PIC单片机应用开发典型模块-第四章程序_第1页
PIC单片机应用开发典型模块-第四章程序_第2页
PIC单片机应用开发典型模块-第四章程序_第3页
PIC单片机应用开发典型模块-第四章程序_第4页
PIC单片机应用开发典型模块-第四章程序_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(1)多功能波形信号发生模块程序应用#INCLUDERTCC EQUU01HHPCEQUU02HHPCLATTHEQUU0AHHTEMP00TIMME EQUU20HH;方波波次数TEMP00CONNSTEQUU21HH;方波波常数TEMO00DOTTEQUU22HH;方波波点数TEMP00OUTTEQUU23HH;方波波输出值值TEMP11TIMME EQUU30HH;锯齿齿波次数数TEMP11CONNSTEQUU31HH;锯齿齿波常数数TEMP11 DOOTEQUU32HH;锯齿齿波点数数TEMP11OUTTEQUU33HH;锯齿齿波输出出值TEMP22TIMME EQUU40HH;三角角

2、波次数数TEMP22CONNSTEQUU41HH;三角角波常数数TEMP22 DOOTEQUU42HH;三角角波点数数TEMP22OUTTEQUU43HH;三角角波输出出值OPTIOON_RREQUU81HHWBUEQUU2FHH;W暂暂存SBUEQUU2EHH;STTATUUS暂存存RCCEQUU0FAAH;最大大频率常常数;- ORG00SYS_RRESEETGOTOSTAART;- ORG44;中断断程序 MOVWFFWBUUSWAPFFWB00, 00SWAPFFSTAATUSS, 0MOVWFF SBUUCALLSERRV_IINTSWAPFF SBUU, 0MOVWFFSTAATU

3、SSSWAPFF WBUU, 0RETFIIE;- ORG40HH NNOPSTARTTCALL INTTCALLINTTPORRT CALLL INTTTMOOLOOP;延时时NOPNOPGOTOLOOOP;- INTCLRFTEMMP0DDOTCLRFTEMMP1DDOTCLRF TEMMP2DDOTCLRF TEMMP0OOUTCLRF TEMMP1OOUTCLRF TEMMP2OOUTMOVLWW 03HHMOVWFF TEMMP0TTIMEEMOVWFF TEMMP0CCONSSTMOVWFF TEMMP2TTIMEEMOVWFF TEMMP2CCONSSTMOVLWW 06HMOV

4、WFF TEMMP1TTIMEEMOVWFF TEMMP1CCONSSTRETURRN;- INTPOORT;端口口初始化化BCF STAATUSS, 0BCF STAATUSS, 1BCF STAATUSS, 55CLRF PORTCCCLRF PORTDBSFPORRTE,1BSFSTAATUSS, 55MOVLWW 00HHMOVWFF TRIISDMOVLWW OF44HMOVWFF TRIISC ;定义义RE11为输出出,其他他为输入入MOVWFF TRIISEBCF STAATUSS, 55RETURRN;-INTTMM0;定时时器初始始化BSF STAATUSS, 55MOVLW

5、W 80HHMOVWFF OPTTIONN_ RBCF STAATUSS, 55MOVLWW 0A0H;开放放定时器器中断MOVLWW RCCC;RCCC=最最大频率率延时常常数MOVWFFRTCCCRETURRN;;-SERY_ INNT;中断断服务程程序BTFSCC INTTCONN,2GOTO SERRVRTTCCCLRF INTTCONNBSF INTTCONN, 55RETURRNSERVRRTCCCMOVLWW RCCCMOVWFF RTCCCBCFINTTCONN,2CALL OUTTPUTTRETFIIE;-OUTPUUT;输出出波形BCF STAATUSS,5FBO DDEC

6、FFSZTEMMP0TTIMEE,1;方波波GOTO J BBOCALL FANNGBOOJBO DDECFFSZTEMMP1TTIMEE,1;锯齿齿波GOTO SJ BBOCALL JUCCBOSJBO DEECFSSZ TEMMP2 TIMME,11;三角角波RETURRNCALL SJIIAOBBORETURRN;-FANGBBOBCF PORRTS, 1;为低BCFPORRTC, 0 BCFPORRTC, 1;选择择输出通通道, 0通道道为方波波INCF TEMMP0DDOT,11MOVF TEMMP0CCONSST, 0MOVWFFTEMMP0TTIMEEBTFSCC TEMMP0D

7、DOT,77 GOTO GAOOGOTO DIGAO MMOVLLW OFFFHMOVWFFPORRTDBSF PORRTE, 1RETURRNDIM00VLWW 00HMOVWFF PORRTDBSFPORRTE, 11RETURRN;-JUCBOOBCFPORRTE, 11BCF PORRTC,00 ;选择择输出通通道, 1通道道为锯齿齿波MOVFTEMMP1CCONSST,00 MOVWFF TEMMP1TTIMEEINCFSSZ TEMMP1DDOT, 1GOTOJUBBO1MOVF TEMMP1OOUT, 0MOVWFF PORRTDINCFTEMMP1OOUT, 1RETURRNJ

8、UBO11 MOOVLWW 00HHMOVWFF TEMMPlOOUTRETURRN;-SJIAOOBOBCF PORRTE, 1BCF PORRTC, 1;选择择输出通通道, 2通道道为三角角波MOVFTEMMP2CCONSST, 0MOVWFF TEMMP2TTIMEEINCFSSZ TEMMP2DDOT, 1 GOTO SJBBO2 CALL SJBBO0 SJB022 MOVFF TEMMP2OOUT, 0MOVWFF PORRTDBSF PORRTE, 1MOVLWW 02HH BTFSSS TEMMP2DDOT,77GOTOSJBBO1ADDWFF TEMMP2OOUT, 1RET

9、URRNSJBO11SUBWFFTEMMP2OOUT,11 RETURRNSJBO00 CLLRF TEMMP2OOUTRETURRNEND(2)PWWM信号号发生模模块程序应用#inclludee /*CCPP1模块块的PWWM工作作方式初初始化子子程序*/void INNIT_CCPP1() PR2=00XFFF; /*设设置PWWM周期期*/CCPR11L=00X7FF; /*设设置工作作循环的的高8bbit为为0111111111*/CCP1CCON=0X3C; /*设设置CCCP1为为PWMM工作方方式,且且工作循循环的低低bitt2为111*/INTCOON=00X000; /*禁

10、禁止总中中断和外外围中断断*/TRISCC=0XXFB; /*设设置RCC2/CCCP11为输出出*/*主程序序*/main()INIT_CCPP1();/*CCCP11模块的的PWMM工作方方式初始始化*/T2CONN=0XX03; /*前前分频比比为166,打开开TMRR2,同同时输出出PWMM信号*/(3)正弦弦信号发发生模块块程序应用#inclludee /本程序序将通过过PICC16FF877的I2C方式驱驱动D/A 转转换器MMAX5518,使使其D/A0 通道输输出/一个连连续的正正弦波形形constt chhar tabble = 0X880,0X886,0X88D, 0XX9

11、3,0X999,0X9FF,0XAA5,0XAAB,0XB1,0XBB7,0XBBC,0XCC2,0XCC7,0XCCC,0XDD1,0XDD6,0XDDA,0XDDF,0XEE3,0XEE7,0XEEA,0XEEE,0XFF1,0XFF4,0XFF6,0XFF8,0XFFA,0XFFC,0XFFD,0XFFF,0XFFF,0XFFF,0XFFF,0XFFF,0XFFF,0XFFE,0XFFD,0XFFB,0XFF9,0XFF7,0XFF5,0XFF2,0XEEF,0XEEC,0XEE9,0XEE5,0XEE1,0XDDD,0XDD8,0XDD4,0XCCF,0XCCA,0XCC5,0XBBF

12、,0XBBA,0XBB4,0XAAE,0XAA8,0XAA2,0X9CC,0X996,0X990,0X889,0X883,0X880,0X779,0X772,0X6CC,0X666,0X660,0X5AA,0X555,0X44E,0X448,0X443,0X33D,0X338,0X333,0X22E,0X229,0X225,0X220,0X1CC,0X118,0X115,0X111,0X00E,0X00B,0X009,0X007,0X005,0X003,0X002,0X000,0X000,0X000,0X000,0X000,0X000,0X001,0X002,0X004,0X006,0X008

13、,0X0AA,0X00D,0X110,0X113,0X116,0X1AA,0X11E,0X222,0X227,0X22B,0X330,0X335,0X3AA,0X440,0X445,0X4CC,0X551,0X557,0X55D,0X663,0X669,0X6FF,0X776,0X7CC;/以上的的数组用用于存放放正弦表表,在定定义数组组时,前前面应该该加上 connst,/使数组组存放于于ROMM 中,而而不至于于占用太太多的RRAMunsiggnedd chhar i;unsiggnedd chhar j;unsiggnedd chhar n;/I2CC 初始化化子程序序void i2cc

14、intt()SSPCOON = 0XX08; /初始始化SSSPCOON 寄寄存器TRISCC3 =1; /设置置SCLL 为输输入口TRISCC4 =1; /设置置SDAA 为输输入口TRISAA4 = 0;SSPSTTAT=0X880; /初始始化SSSPSTTAT 寄存器器SSPADDD=00X022; /设定定I2C 时钟频频率SSPCOON2=0X000;/初始始化SSSPCOON2 寄存器器di(); /关闭闭总中断断SSPIFF=0; /清SSPP 中断断标志RA4=00; /关掉掉74HHC1665 的的移位时时钟使能能,以免免74HHC1665/移位数数据输出出与I2C 总线

15、的的数据线线发生冲冲突SSPENN=1;/SSSP模模块使能能/I2CC 总线输输出数据据子程序序void i2ccoutt()SEN=11;/产生生I2C 启动信信号for(nn=0 xx02;-nn;)contiinuee;/给予予一定的的延时,保保证启动动do RSEN=1; /产生生I2C 启动信信号whille(SSSPIIF=0);/如果果没能启启动,则则反复启启动,直直到启动动为止SSPIFF=0; /SSSPIIF 标标志清00SSPBUUF=00X588; /II2C 总线发发送地址址字节do ;whille(SSSPIIF=0);/等待待地址发发送完毕毕SSPIFF=0;

16、/SSSPIIF 标标志清00SSPBUUF=00X011; /II2C 总线发发送命令令字节do ;whille(SSSPIIF=0); /等待待命令发发送完毕毕SSPIFF=0; /SSSPIIF 标标志清00SSPBUUF=jj; /II2C 总线发发送数据据字节do ;whille(SSSPIIF=0); /等待待数据发发送完毕毕SSPIFF=0; /SSSPIIF 标标志清00PEN=11; /产生生停止条条件do ;whille(SSSPIIF=0); /等待待停止条条件产生生SSPIFF=0; /SSSPIIF 标标志清00/主程序序main ()i2cinnt(); /II2C

17、 初始化化whilee(1)for(ii=0 xx00;i=1277;+ii)j=tabblei; /从数数组中得得到需要要传输的的数据量量i2couut(); /利用用I2C 总线方方式送出出数据(4)简易易频率计计模块程程序#inclludee #inclludee #inclludee bank33 innt ccp1zz111; /定义义一个数数组,用用于存放放各次的的捕捉值值unionn cpp1int yy1;unsiggnedd chhar cp11e22;cp1uu; /定义一一个共用用体unsiggnedd chhar COUUNTWW,COUUNT; /测量脉脉冲个数数寄存

18、器器unsiggnedd chhar COUUNTEER,datta,k;unsiggnedd chhar s14;/定义义4个显显示缓冲冲数组unsiggnedd chhar s24;unsiggnedd chhar s34;unsiggnedd chhar s44;int T5,uoo;doublle RRE5;doublle ppuadd5;/CCPP 模块块工作于于捕捉方方式初始始化子程程序void ccppintt( )CCP1CCON=0X005; /首先先设置CCCP11 捕捉捉每个脉脉冲的上上升沿T1CONN=0XX00; /关闭闭TMRR1 震震荡器PEIE=1; /外围围中

19、断允允许(此时总总中断关关闭)CCP1IIE=11; /允许许CCPP1 中中断TRISCC2=11; /设置置RC22 为输输入/系统其其它部分分初始化化子程序序void iniitiaal( )COUNTT=0XX0B; /为保保证测试试精度,测测试5 个脉冲冲的参数数后/求平均均值,每每个脉冲冲都要捕捕捉其上上升、下下降沿,故故需要有有11 次中断断/中断服服务程序序void intterrruptt cpp1innt(vvoidd)CCP1IIF=00; /清除除中断标标志cp1u.cp11e00=CCCPRR1L;cp1u.cp11e11=CCCPRR1H;cp1zdatta=cp1

20、1u.yy1; /存储储1 次捕捕捉值CCP1CCON=CCPP1COON00X011; /把CCPP1 模模块改变变成捕捉捉相反的的脉冲沿沿data+;COUNTT-;/周期处处理子程程序void PERRIODD( )T5=cpp1z10-cpp1z0; /求得得5 个周周期的值值RE5=(douublee)T55; /强制制转换成成双精度度数RE5=RRE5/5; /求得得平均周周期,单单位为s/频率处处理子程程序void FREEQUEENCYY( )PERIOOD( ); /先求求周期RE5=1100000000/REE5;/周期期值求倒倒数,再再乘以1100000000,得频频率,

21、单单位为HHz/脉宽处处理子程程序void PULLSE( )int ppu;for(ddataa=0,puaad5=0;datta=9;datta+) pu=cpp1zdatta+11-ccp1zzdaata;puad55=(ddoubble)pu+puaad5;data=datta+22; /求求得5 个脉宽宽的和值值RE5=ppuadd5/55; /求得平平均脉宽宽/占空比比处理子子程序void OCCCUPAATIOONALL( )PULSEE( ); /先求求脉宽puad55=REE5; /暂存存脉宽值值PERIOOD(); /再求求周期RE5=ppuadd5/RRE5; /求得得占

22、空比比preciisioon(RRE5) /为为了保证证小数点点的精度度,对RRE5进进行处理理k=5;if(REE511)RE5=RRE5*10000; /若RE551,则则乘以11 0000,保保证小数数点的精精度k=0 x000;else if(RE55100)RE5=RRE5*10000; /若RE55100,则乘乘以1 0000,保证证小数点点的精度度k=0 x000;else if(RE551000)RE5=RRE5*1000; /若RE551000,则则乘以1100,保保证小数数点的精精度k=0 x001;else if(RE5510000)RE5=RRE5*10; /若RE55

23、10000,则则乘以110,保保证小数数点的精精度k=0 x002;else RE55=REE5 ;/主程序序main( )ccpinnt(); /CCCP模模块工作作于捕捉捉方式初初始化initiial(); /系统统其它部部分初始始化data=0 x000; /存储储数组指指针赋初初值TMR1HH=0;TMR1LL=0; /定时时器1 清0CCP1IIF=00; /清除除CCPP1 的的中断标标志,以以免中断断一打开开就进入入/中断ei( ); /中断断允许TMR1OON=11; /定时时器1 开whilee(1)if(COOUNTT=00)brreakk; /等等待中断断次数结结束di(

24、); /禁止止中断TMR1OON=00; /关闭闭定时器器/进行下下面的数数值转换换和显示示工作PERIOOD(); /进行行周期处处理preciisioon(RRE5);uo=(iint)RE55;sprinntf(s1,%4d,uo); /把周周期数据据转换成成4 位ASIII 码码,且放放入数组组S中FREQUUENCCY(); /进行行频率处处理preciisioon(RRE5);uo=(iint)RE55;sprinntf(s2,%4d,uo);/把频频率数据据转换成成4 位ASIII 码码,且放放入数组组S中OCCUPPATIIONAAL();/进行行占空比比处理preciisio

25、on(RRE5);uo=(iint)RE55;sprinntf(s2,%4d,uo); /把占占空比数数据转换换成4 位ASIII 码码,且放放入数组组S中PULSEE(); /进行行脉宽处处理preciisioon(RRE5);uo=(iint)RE55;sprinntf(s2,%4d,uo); /把脉脉宽数据据转换成成4 位ASIII 码码,且放放入数组组S中(5)交流流电压测测量模块块程序#inclludee #inclludee #inclludee unnionn adrres intty1; unssignned chaaraddre2; addressultt;/定义义一个共共用

26、体 bannk3 intt re40;/定义义存放AA/D转转换结果果的数组组,在bbankk3中 unssignned chaar kk,datta;/定义义几个通通用寄存存器 douublee squu,squuad;/平方方寄存器器和平方方和寄存存器,ssqu又又通用为为存储其其它数值值 intt uo; bannk1 unssignned chaar s44;/此数数组用于于存储需需要显示示的字符符的ASSII码码 /AA/D转转换初始始化子程程序 voiid adiinittiall() ADDCONN0=00 x411;/选择择A/DD通道为为RA00,且打打开A/D转换换器 /在

27、工工作状态态,使AA/D转转换时钟钟为8TToscc ADDCONN1=00X8EE;/转换换结果右右移,及及ADRRESHH寄存器器的高66位为00 /把RA00口设置置为模拟拟量输入入方式 ADIIE=11;/AA/D转转换中断断允许 PEIIE=11;/外围围中断允允许 TRIISA00=1;/设置置RA00为输入入方式 /系统其其它初始始化子程程序 voiidinnitiial() CCCP2IIE=00;/禁止止CCPP中断 SSPPIE=0;/禁止止SSPP中断 CCPP2COON=00X0BB;/初始始化CCCP2CCON,CCPP2为特特别事件件触发方方式 CCPPR2HH=0XX01; CCPPR2LL=0XXF4;/初始始化CCCPR22寄存器器,设置置采样间间隔5000 s, /一个个周期内内电压采采40个点点 /中断服服务程序序 voiidintterrrupttadiint(voiid) CCCP2IIF=00; ADIIF=00;/清除除中断标标志 adrresuult.adrre00=AADREESL; adrresuult.ad

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论