下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 PIC单片机应用开发典型模块各章程序第四章程序

PIC单片机应用开发典型模块各章程序第四章程序.doc

PIC单片机应用开发典型模块各章程序第四章程序

WindomZhong
2018-09-08 0人阅读 举报 0 0 暂无简介

简介:本文档为《PIC单片机应用开发典型模块各章程序第四章程序doc》,可适用于IT/计算机领域

()多功能波形信号发生模块程序应用#INCLUDE<PFINC>RTCCEQUHPCEQUHPCLATHEQUAHTEMPTIMEEQUH方波次数TEMPCONSTEQUH方波常数TEMODOTEQUH方波点数TEMPOUTEQUH方波输出值TEMPTIMEEQUH锯齿波次数TEMPCONSTEQUH锯齿波常数TEMPDOTEQUH锯齿波点数TEMPOUTEQUH锯齿波输出值TEMPTIMEEQUH三角波次数TEMPCONSTEQUH三角波常数TEMPDOTEQUH三角波点数TEMPOUTEQUH三角波输出值OPTIONREQUHWBUEQUFHW暂存SBUEQUEHSTATUS暂存RCCEQUFAH最大频率常数ORGSYSRESETGOTOSTARTORG中断程序MOVWFWBUSWAPFWB,SWAPFSTATUS,MOVWFSBUCALLSERVINTSWAPFSBU,MOVWFSTATUSSWAPFWBU,RETFIEORGHNOPSTARTCALLINTCALLINTPORTCALLINTTMOLOOP延时NOPNOPGOTOLOOPINTCLRFTEMPDOTCLRFTEMPDOTCLRFTEMPDOTCLRFTEMPOUTCLRFTEMPOUTCLRFTEMPOUTMOVLWHMOVWFTEMPTIMEMOVWFTEMPCONSTMOVWFTEMPTIMEMOVWFTEMPCONSTMOVLWHMOVWFTEMPTIMEMOVWFTEMPCONSTRETURNINTPORT端口初始化BCFSTATUS,BCFSTATUS,BCFSTATUS,CLRFPORTCCLRFPORTDBSFPORTE,BSFSTATUS,MOVLWHMOVWFTRISDMOVLWOFHMOVWFTRISC定义RE为输出其他为输入MOVWFTRISEBCFSTATUS,RETURNINTTM定时器初始化BSFSTATUS,MOVLWHMOVWFOPTIONRBCFSTATUS,MOVLWAH开放定时器中断MOVLWRCCRCC=最大频率延时常数MOVWFRTCCRETURNSERYINT中断服务程序BTFSCINTCONGOTOSERVRTCCCLRFINTCONBSFINTCON,RETURNSERVRTCCMOVLWRCCMOVWFRTCCBCFINTCONCALLOUTPUTRETFIEOUTPUT输出波形BCFSTATUS,FBODECFSZTEMPTIME方波GOTOJBOCALLFANGBOJBODECFSZTEMPTIME锯齿波GOTOSJBOCALLJUCBOSJBODECFSZTEMPTIME,三角波RETURNCALLSJIAOBORETURNFANGBOBCFPORTS,为低BCFPORTC,BCFPORTC,选择输出通道通道为方波INCFTEMPDOTMOVFTEMPCONST,MOVWFTEMPTIMEBTFSCTEMPDOTGOTOGAOGOTODIGAOMOVLWOFFHMOVWFPORTDBSFPORTE,RETURNDIMVLWHMOVWFPORTDBSFPORTE,RETURNJUCBOBCFPORTE,BCFPORTC选择输出通道通道为锯齿波MOVFTEMPCONSTMOVWFTEMPTIMEINCFSZTEMPDOT,GOTOJUBOMOVFTEMPOUT,MOVWFPORTDINCFTEMPOUT,RETURNJUBOMOVLWHMOVWFTEMPlOUTRETURNSJIAOBOBCFPORTE,BCFPORTC,选择输出通道通道为三角波MOVFTEMPCONST,MOVWFTEMPTIMEINCFSZTEMPDOT,GOTOSJBOCALLSJBOSJBMOVFTEMPOUT,MOVWFPORTDBSFPORTE,MOVLWHBTFSSTEMPDOTGOTOSJBOADDWFTEMPOUT,RETURNSJBOSUBWFTEMPOUTRETURNSJBOCLRFTEMPOUTRETURNEND()PWM信号发生模块程序应用#include<pich>*CCP模块的PWM工作方式初始化子程序*voidINITCCP(){PR=XFF*设置PWM周期*CCPRL=XF*设置工作循环的高bit为*CCPCON=XC*设置CCP为PWM工作方式且工作循环的低bit为*INTCON=X*禁止总中断和外围中断*TRISC=XFB*设置RCCCP为输出*}*主程序*main(){INITCCP()*CCP模块的PWM工作方式初始化*TCON=X*前分频比为打开TMR同时输出PWM信号*}()正弦信号发生模块程序应用#include<pich>本程序将通过PICF的IC方式驱动DA转换器MAX使其DA通道输出一个连续的正弦波形constchartable={XXXDXXXFXAXABXBXBXBCXCXCXCCXDXDXDAXDFXEXEXEAXEEXFXFXFXFXFAXFCXFDXFFXFFXFFXFFXFFXFFXFEXFDXFBXFXFXFXFXEFXECXEXEXEXDDXDXDXCFXCAXCXBFXBAXBXAEXAXAXCXXXXXXXXCXXXAXXEXXXDXXXEXXXXCXXXXEXBXXXXXXXXXXXXXXXXXAXDXXXXAXEXXXBXXXAXXXCXXXDXXXFXXC}以上的数组用于存放正弦表在定义数组时前面应该加上const使数组存放于ROM中而不至于占用太多的RAMunsignedchariunsignedcharjunsignedcharnIC初始化子程序voidicint(){SSPCON=X初始化SSPCON寄存器TRISC=设置SCL为输入口TRISC=设置SDA为输入口TRISA=SSPSTAT=X初始化SSPSTAT寄存器SSPADD=X设定IC时钟频率SSPCON=X初始化SSPCON寄存器di()关闭总中断SSPIF=清SSP中断标志RA=关掉HC的移位时钟使能以免HC移位数据输出与IC总线的数据线发生冲突SSPEN=SSP模块使能}IC总线输出数据子程序voidicout(){SEN=产生IC启动信号for(n=xn)continue给予一定的延时保证启动do{RSEN=产生IC启动信号}while(SSPIF==)如果没能启动则反复启动直到启动为止SSPIF=SSPIF标志清SSPBUF=XIC总线发送地址字节do{}while(SSPIF==)等待地址发送完毕SSPIF=SSPIF标志清SSPBUF=XIC总线发送命令字节do{}while(SSPIF==)等待命令发送完毕SSPIF=SSPIF标志清SSPBUF=jIC总线发送数据字节do{}while(SSPIF==)等待数据发送完毕SSPIF=SSPIF标志清PEN=产生停止条件do{}while(SSPIF==)等待停止条件产生SSPIF=SSPIF标志清}主程序main(){icint()IC初始化while(){for(i=xi<=i){j=tablei从数组中得到需要传输的数据量icout()利用IC总线方式送出数据}}()简易频率计模块程序#include<pich>#include<stdioh>#include<mathh>bankintcpz定义一个数组用于存放各次的捕捉值unioncp{intyunsignedcharcpe}cpu定义一个共用体unsignedcharCOUNTWCOUNT测量脉冲个数寄存器unsignedcharCOUNTERdatakunsignedchars定义个显示缓冲数组unsignedcharsunsignedcharsunsignedcharsintTuodoubleREdoublepuadCCP模块工作于捕捉方式初始化子程序voidccpint(){CCPCON=X首先设置CCP捕捉每个脉冲的上升沿TCON=X关闭TMR震荡器PEIE=外围中断允许(此时总中断关闭)CCPIE=允许CCP中断TRISC=设置RC为输入}系统其它部分初始化子程序voidinitial(){COUNT=XB为保证测试精度测试个脉冲的参数后求平均值每个脉冲都要捕捉其上升、下降沿故需要有次中断}中断服务程序voidinterruptcpint(void){CCPIF=清除中断标志cpucpe=CCPRLcpucpe=CCPRHcpzdata=cpuy存储次捕捉值CCPCON=CCPCON^X把CCP模块改变成捕捉相反的脉冲沿dataCOUNT}周期处理子程序voidPERIOD(){T=cpzcpz求得个周期的值RE=(double)T强制转换成双精度数RE=RE求得平均周期单位为μs}频率处理子程序voidFREQUENCY(){PERIOD()先求周期RE=RE周期值求倒数再乘以得频率单位为Hz}脉宽处理子程序voidPULSE(){intpufor(data=puad=data<=data){pu=cpzdatacpzdatapuad=(double)pupuaddata=data}求得个脉宽的和值RE=puad求得平均脉宽}占空比处理子程序voidOCCUPATIONAL(){PULSE()先求脉宽puad=RE暂存脉宽值PERIOD()再求周期RE=puadRE求得占空比}precision(RE)为了保证小数点的精度对RE进行处理{k=if(RE<){RE=RE*若RE<则乘以保证小数点的精度k=x}elseif(RE<){RE=RE*若RE<则乘以保证小数点的精度k=x}elseif(RE<){RE=RE*若RE<则乘以保证小数点的精度k=x}elseif(RE<){RE=RE*若RE<则乘以保证小数点的精度k=x}elseRE=RE}主程序main(){ccpint()CCP模块工作于捕捉方式初始化initial()系统其它部分初始化data=x存储数组指针赋初值TMRH=TMRL=定时器清CCPIF=清除CCP的中断标志以免中断一打开就进入中断ei()中断允许TMRON=定时器开while(){if(COUNT==)break}等待中断次数结束di()禁止中断TMRON=关闭定时器进行下面的数值转换和显示工作PERIOD()进行周期处理precision(RE)uo=(int)REsprintf(s"d"uo)把周期数据转换成位ASII码且放入数组S1中FREQUENCY()进行频率处理precision(RE)uo=(int)REsprintf(s"d"uo)把频率数据转换成位ASII码且放入数组S2中OCCUPATIONAL()进行占空比处理precision(RE)uo=(int)REsprintf(s"d"uo)把占空比数据转换成位ASII码且放入数组S3中PULSE()进行脉宽处理precision(RE)uo=(int)REsprintf(s"d"uo)把脉宽数据转换成位ASII码且放入数组S4中}()交流电压测量模块程序#include<pich>#include<mathh>#include<stdioh>unionadres{intyunsignedcharadre}adresult定义一个共用体bankintre定义存放AD转换结果的数组在bank中unsignedcharkdata定义几个通用寄存器doublesqu,squad平方寄存器和平方和寄存器squ又通用为存储其它数值intuobankunsignedchars此数组用于存储需要显示的字符的ASII码AD转换初始化子程序voidadinitial(){ADCON=x选择AD通道为RA且打开AD转换器在工作状态使AD转换时钟为ToscADCON=XE转换结果右移及ADRESH寄存器的高位为""把RA口设置为模拟量输入方式ADIE=AD转换中断允许PEIE=外围中断允许TRISA=设置RA为输入方式}系统其它初始化子程序voidinitial(){CCPIE=禁止CCP中断SSPIE=禁止SSP中断CCPCON=XB初始化CCPCONCCP为特别事件触发方式CCPRH=XCCPRL=XF初始化CCPR寄存器设置采样间隔μs一个周期内电压采个点}中断服务程序void interruptadint(void){CCPIF=ADIF=清除中断标志adresultadre=ADRESLadresultadre=ADRESH读取并存储AD转换结果AD转换的结果通过共用体的形式放入了变量y中rek=adresulty次AD转换的结果存入数组k数组访问指针加}主程序main(){adinitial()AD转换初始化initial()系统其它初始化k=数组访问指针赋初值TMRH=XTMRL=X定时器清ei()中断允许TCON=X打开定时器while(){if(k==)breakAD转换次数达到则终止}di()禁止中断for(k=k<k)rek=rekX假设提升电压为V对应十六进制数H则需在采样值的基础上减去该值for(k=squad=k<k){uo=reksqu=(double)uo强制把采得的数据量转换成双精度数以便运算squ=squ*把每点的数据转换成实际数据squ=squ*squ求一点电压的平方squad=squadsqu}以上求得点电压的平方和存于寄存器squad中squ=squad求得平均值squ=sqrt(squ)开平方求得最后的电压值squ=squ*通过变压器的变比和分压电阻分配确定该系数以上得到了实际电网的电压值squ=squ*为了保证显示的小数点的精度先对电压值乘以uo=(int)squ强制把U转换成有符号整型量sprintf(s"d"uo)通过sprintf函数把需要显示的电压数据转换成ASII码并存于数组S中}unknown

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/12

PIC单片机应用开发典型模块各章程序第四章程序

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利