利用PCA捕获捕获红外发射脉冲高、低电平时间,送串口显示_第1页
利用PCA捕获捕获红外发射脉冲高、低电平时间,送串口显示_第2页
利用PCA捕获捕获红外发射脉冲高、低电平时间,送串口显示_第3页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、irrr厂rrrrrrrrr”1,一r,j-:,r£l?;-8一音一法-吾-号云一号一普互11亘<理蛔时;蛭:C十六”M2?干<=K?作式35,了、a十六泡可发诺I兰止史百,”1B厂字后万日功y琢|林仲成丽Snose|Wvi>I.心:u;LpF程宇?倍15。串口助手工程文件|揍鼠信拦友还澄中区“Z.4棱收席成(以卜是渤洗§发射奸中的舟绑葬)序号岛电皿丘(g低电、.勒旬忌.n1Ju4JJ1A!C63C43635做e22ez3e22所豹睇631637Hee5G39621酬场63B心做621641623s1234567891011121314仲15171019Z

2、IJ21222324百接收凄冲区c+k诋戏示G字行格式显示羊字苻串左法区:G+六进制发送I.清妄q。宝符格言发关目由发快店期打开/矢i.脾口rr期打开手口摘收计溯12436发送计/coccwi2JJK*|5W00g校中国电子开发即5Ef”程序文件手|工程文件|技收锲主发注演由EZ2S-2-4Q<1*务2井295-293-z692472237OM75246Q241O8品B29D529J62633质&567W697O717Z62495923yjisz:yjS24皿物87S2:93524959249TT02:93623O592Syjiu73T-47S76TT7870C8JtIB渔用弱嘛

3、式;弓导习32fc»"吨用户砖博作习正反功1用户召<58($)3x83用户科(加莅;STF瑛作酒王码:0x12径画比,1电用户碇是正反呼用户码正冯:MQ*可以重新清拐逞控*与顿cm程序又停al串口助手i工程文件I接楸/锭盘发送搓牌区67ECtc1LU6Ous67TTa60_g顷关gwQV6gi093c-E6THuoTYTTTTTOn795TT316177937T2ff763T793791Y7B78379E733加77D1B3T一£据商C心通用蝙码榕工巳H位编税1二询融11二定制;OOOQC二道都001100*可以里我接收Ii前勰控*程序如下:/*作品:捕获红

4、外发射脉冲高、低电平时间,送串口显示单片机:STC12C5410晶振:12M编译环境:KeiluVision4V9.00*/说明:1、适用于:1T系列含有PCA捕获的STC单片机/2、捕获引脚PCA2(也就是P2.0),3字节存放一个电平时间数据。/3、串口显示脉冲高低电平时间数据(串口:字符57600bps校验位N数据位8停止位1)/4、含NECRC5解码,如需其它解码请自己加入。/NEC码:(芯片有市场上用量最大的HT6121/6122及其兼容的IC芯片等)/RC5码:(芯片有SAA3006、SAA301GSAA3027、PCA8521、PT2210等)#defineucharunsign

5、edchar#defineuintunsignedint#defineulongunsignedlong#include<STC12C5410AD.h>#include<CKA.H>ucharxdatav486;ucharN4;uintt;ulongnn;bitVT;/捕获完成标志bitB_Z;/丢弃第一次捕获标志voidChuanKou();/串口发送主程序voidIR_RC5();/RC5解码/*函数:10msXn延时程序STC仃12MHz*/voidYS10ms(ucharn)uchari,j,k;for(i=n;i!=0;i-)for(j=198;j!=0;j-

6、)for(k=150;k!=0;k-);/*函数:接收初始化*/voidJS_Init(void)uinti;B_Z=1;t=0;存储区清0for(i=0;i<486;i+)v=0;/EPCA_LVD=1;/PCA模块中断和低压检测中断允许位CCAPM2|=0x31;/PCA模块2:16位捕获模式,由CCP2的跳变触发。ECCF2=1,使能CCF2中断。CMOD=0x01;/ECF=1(CMOD.0=6使能CF(CCON0位产生中断EA1;P21=0;/开始接收,指示灯打开/*函数:主程序*voidmain(void)(UartInit(12,1);JS_Init();YS10ms(10

7、);ZIFUC("rnrnrn*while(1)(if(VT)(VT=0;P21=1;/ChuanKou();/YS10ms(200);YS10ms(200);YS10ms(200);/6JS_Init();ZIFUC("rnrnrn*/*函数:PCA中断捕获程序(电位跳变捕获模式)*/voidPCA_isr(void)interrupt6using1(if(CF)/(CF=0;/vt+;/PCAif(vt>1)/(CR=0;CF=0;CCAPM2=0;CCF2=0;VT=1;/vt=0;return;开始接收,请按遥控*rn");接收完成,指示灯关闭串口显

8、示秒后重新开始可以重新接收,请按遥控*rn");是否是PCA定时器溢出必须软件清0(PCA定时器标志)定时器溢出计数,保存数据最高字节设置允许溢出次数,>131ms终止捕获捕获完成标志if(CCF2)/是否是电位跳变(CCF2=0;/必须软件清0(PCA模块2标志)CL=0;/先赋值低位CH=0;if(B_Z)CR=1;/启动PCA定时器B_Z=0;return;/t+;丢弃第一次捕狄数据vt=CCAP2H;t+;/保存数据高字节vt=CCAP2L;t+;/保存数据低字节捕获162个数据(1个电平时间3字节存放)捕获完成标志if(t>=486)/(CCAPM2=0;CCF

9、2=0;CR=0;CF=0;VT=1;/*函数:串口发送主程序*/voidChuanKou()(uchari;uintj,T;ZIFUC("rnrn*接收完成*");ZIFUC("rnrn(以下是遥控器发射脉冲的波形数据)");ZIFUC("rnrn序号高电平时间(us)低电平时间(us)rnrn");i=0;for(j=0;j<486;)(uchar*)&nn)0=0;(uchar*)&nn)1=vj+;(uchar*)&nn)2=vj+;(uchar*)&nn)3=vj+;ZIFUC(&quo

10、t;");JZ(i,10,2);/序号ZIFUC("");JZ(nn,10,8);/高电平时间(uchar*)&nn)0=0;(uchar*)&nn)1=vj+;(uchar*)&nn)2=vj+;(uchar*)&nn)3=vj+;ZIFUC("");JZ(nn,10,8);/低电平时间if(i%8)=0)ZIFUC("rnrn");elseZIFUC("rn");i+;/NEC解码/j=9;/引导码丢弃for(i=0;i<32;i+)(j+;(uchar*)&am

11、p;T)0=vj+;(uchar*)&T)1=vj+;j+=3;Ni/8>>=1;if(T<1900)&&(T>1000)Ni/8|=0x80;if(N2=N3)/校验NECM作码。错误则尝试RC5解码(ZIFUC("rn【NEC通用编码格式:弓I导码+32位编码(16位用户码+操作码正反码)】rn");ZIFUC("rn用户码(高8位):0x");JZ(N0,16,1);ZIFUC("rn用户码(低8位):0x");JZ(N1,16,1);ZIFUC("rnrn操作码正码0x

12、");JZ(N2,16,1);ZIFUC("rn");if(N0=N1)(ZIFUC("rnrnJZ(N0,16,1);return;经对比,16位用户码是正反码,用户码正码:0x");/初略分析是否是RC5编码/j=0;for(i=0;i<20;i+)(j+;/(uchar*)&T)0=vj+;(uchar*)&T)1=vj+;最高位丢弃(1个数据3字节)if(T<600|T>1800)/RC5码前20个脉冲数据600<nn<1800(ZIFUC(-rn【解码失败,再试一试或者分析波形数据】&qu

13、ot;);return;/将波形数据绘成图像/ZIFUC("rn【RC5编码发射波形】发射顺序:(低位)<-(高位)rn");ZIFUC("rn_");j=0;for(i=0;i<26;i+)(j+;/最高位丢弃(1个数据3字节);(uchar*)&T)0=vj+;(uchar*)&T)1=vj+;if(T>2000)break;if(i%2!=1)/如果i是偶数(if(T<1000)ZIFUC("");elseZIFUC("");else(if(T<950)ZIFUC

14、("_");elseZIFUC("");ZIFUC("");ZIFUC("rn:rn");IR_RC5();/RC5解码ZIFUC("rnI起始位I空I系统位I数据位Irn");ZIFUC("rnrn【RC5通用编码格式:14位编码】rn");ZIFUC("rn起始位(2位):0x");JZ(N0,16,1);ZIFUC("二进制:");JZ(N0,2,2);ZIFUC("rn控制位(1位):");if(N1)ZIF

15、UC("1");elseZIFUC("0");ZIFUC("rn系统位(5位):0x");JZ(N2,16,1);ZIFUC("二进制:");JZ(N2,2,5);ZIFUC("rn数据位(6位):0x");JZ(N3,16,1);ZIFUC("二进制:");JZ(N3,2,6);/*函数:根据收集的脉冲数据进行RC5解码*/voidIR_RC5()(bitB_v,BV;ucharx;ucharn;uintt;BV=1;/BV=1时检测(接收端)低电平时间,BV=0时检测(接

16、收端)高电平时间x=0;t=0;N0=N1=N2=N3=0;for(n=0;n<14;n+)/14(x+;/(uchar*)&t)0=vx+;(uchar*)&t)1=vx+;位位码解码最高位丢弃(1个数据3字节)/*确认位码值*/if(BV)if(t<950)B_v=1;x+=3;/BV=1时,如果t<950uS,下次还是检测(接收端)低电平时间,且跳过高电平时间。elseB_v=1;BV=0;/BV=1elseif(t<950)B_v=0;x+=3;elseB_v=0;BV=1;/*装载位码值*/if(n<2)N0>>=1;if(B

17、_v)N0|=0x02;elseif(n=2)N1=B_v;elseif(n<8)N2>>=1;if(B_v)N2|=0x10;elseif(n<15)N3>>=1;if(B_v)N3|=0x20;/*发射位码值*/ZIFUC("");if(B_v)ZIFUC("1");elseZIFUC("0");时,如果t>950uS,下次检测(接收端)高电平时间#include<CKA.H>是什么呀?为什么我的keil编译不了还有AIFUC是起什么作用的我的编译器报错了/*/实验调试助手,串

18、口字符显示(版本:2011/08/06)/串口说明:使用定时器1,字符发送,N,8,1/6MHz1T)28800bps/(11.0592MHz1T)115200bps/(12MHz157600bps/(22.1184MHz1T)256000bps/(6MHz12T2400bps/(11.0592MHz12T)57600bps/(12MHz12T4800bps/【供用户调用的3个函数】/voidUart_Init(uint8M,uint8T);/串口初始化/voidJZ(uint32tem,uint8num,uint8i);/整形数据送串口显示/voidZIFUC(uint8code*p);送/

19、字符串发/*#ifndef_CKA_H_#define_CKA_H_#include<intrins.h>#defineuint8unsignedchar#defineuint16unsignedint#defineuint32unsignedlong/*函数:串口初始化入口:(MHz12T/仃)举例:如使用22.1184MHz晶振,STC1T系列,那么初始化时应为:Uart_Init(22,1),与PC的串口助手通讯:波特率256000bps,字符,校验位N,数据位8,停止位1*/voidUart_Init(uint8M,uint8T)bitBS,XT;uint16MT;MT=M

20、*100+T;switch(MT)/【1T系列】case601:/28800bps6MHzBS=1;/倍速XT=1;/1T模式TL1=0xF3;/初值/115200bps11.0592MHz不倍速=1;/1T模式/57600bps12MHz/倍速=1;/1T模式/256000bps22.1184MHz/倍速=1;/1T模式【12T系列】/2400bps6MHz/倍速/12T模式/57600bps11.0592MHz/倍速0;/12T模式/4800bps12MHz/倍速=0;/12T模式if(BS)PCON|=0x80;elsePCON&=0x7f;SCON=0x50;if(XT)AUX

21、R|=0x40;elseAUXR&=0xbf;break;case1101:BS=0;/XTTL1=0xFD;/初值break;case1201:BS=1;XTTL1=0xF3;/初值break;case2201:BS=1;XTTL1=0xFB;/初值break;/case612:BS=1;XT=0;TL1=0xF3;/初值break;case1112:BS=1;XTTL1=0xFF;/初值break;case1212:BS=1;XTTL1=0xF3;/初值break;/使能波特率倍速位SMOD/波特率不倍速/8位数据,可变波特率/定时器1时钟为Fosc,即1T/定时器1时钟为Fosc

22、/12,即12TAUXR&=0xfe;/串口1选择定时器1为波特率发生器TMOD&=0x0f;/清除定时器1模式位TMOD|=0x20;/设定定时器1为8位自动重装方式TH1TL1;/重装值ET10;/禁止定时器1中断TR11;/启动定时器/*函数:HEX转ASCII*/uint8HEX2ASCII(uint8dat)dat&=0x0f;if(dat<=9)return(dat+'0');/数字09('0'0x30)return(dat-10+'A');/字母AF('A'0x41,'a'

23、;0x61)/*函数:串口发送*/voidTxS(uint8i)SBUF=i;while(!TI);TI=0;/*函数:字符串发送*/voidZIFUC(uint8code*p)/发送一串字符串for(;*p!=0;p+)TxS(*p);/遇到停止符0结束/*函数:整形数据送串口显示入口:tem=整形数据(送入14字节整形数据)num=以什么进制显示,2:二进制,10:十进制,16:十六进制显示低几位(以二进制显示时)显示个位算起几位数(以十进制显示时)显示几字节(以十六进制显示时)*/voidJZ(uint32tem,uint8num,uint8i)bitBT=0;switch(num)(c

24、ase2:tem=_lror_(tem,i-1);/以二进制显示while(i-)(if(tem&1)ZIFUC("1”);elseZIFUC("0”);tem=_lrol_(tem,1);/*【另一种算法】tem<<=(32-i);while(i-)(if(tem&0x80000000)ZIFUC("1”);elseZIFUC("0");tem<<=1;*/break;以十进制显示case10:for(j=0;j<i;j+)/(zj=tem%10;nv1=十位,tem/=10;while(i-)(

25、if(z|(i=0)BT=1;if(BT)TxS(HEX2ASCII(z);elseZIFUC("");换。break;case16:for(j=4-i;j<4;j+)/十六进制显示(zj=(uint8*)&tem)j;TxS(HEX2ASCII(zj>>4);/nv0=个位,/数据有效标志/数据有效前的“0”不显示,/用空格替/发送高4位/发送低4位TxS(HEX2ASCII(zj);break;#endif/头文件CKA.H应用示例/#defineuint8unsignedchar#defineuint16unsignedint#defineu

26、int32unsignedlong#include"STC89C52RC.H”#include"intrins.h"#include"CKA.H"/*函数:10msXn延时程序STC12T12MHz*/voidYS10ms(uint8n)(uint8i,j,k;for(i=n;i!=0;i-)for(j=30;j!=0;j-)for(k=165;k!=0;k-);voidmain(void)(uint32a=1234567890;uint32b=0xABCE1234;uint8c=0x33;Uart_Init(11,12);/串口初始化(11.

27、0592MHz晶振,STC12T系列),57600bps,字符,校验位N,数据位8,停止位1YS10ms(60);ZIFUC("rn*串口显示实验*rnrn");ZIFUC("a=");JZ(a,10,10);/以十进制显示aZIFUC("a的低2位=");JZ(a,10,2);以十进制显示a的低2位ZIFUC("rnb=0x");JZ(b,16,4);/以十六进制显示bZIFUC("b低3字节=");JZ(b,16,3);/以十六进制显示b的低3字节ZIFUC("rnb="

28、);JZ(b,2,32);/以二进制显示bZIFUC("(二进制)rnc=");JZ(c,2,8);/以二进制显示cZIFUC("(二进制)rn");ZIFUC("rnrn*c自加1显示*rnrn");while(1)c+;ZIFUC("十六进制:c=0x");JZ(c,16,1);/以十六进制显示cYS10ms(200);ZIFUC("rn");程序文件I串口助手工底文件I搂收/键盘发谖建冲区*:*串口显示实嘘*琳1*虬*a=1?3456T69C噬断而=90b=0xAECE1234h儒3节=C

29、E1234b=101010111100111M001001000110100c=C0110011仁避制)c自加1昱示*Jt'fl-flT-fl-六兖会会驾:c-0tx34:c-0t»t35:c=0x36;c=0x37;c-0x38:c:0x39:c=0tx3A1c-OtaSB:c=Ox3C:c=0x311;c=Ox3E:c:Ox3F:c=Cht4023L十六道制显示&享答格式是示者接收缓冲区擎宝符串发送区发送宰符串HEX20亘旨珈留松送|觥单享符串发法区.3十六进制发送清发送缓中区发送字符/数据r字寄格式发送自动发送顾网口套秒自动发谖打开r关闭串口V下裁后打开串口.关

30、闭口:接收计数.453发谖外数.清空计薮IC闻CM2二|波特章|576OC与|校验位何耳数锅位何三停止1却二)我用STC12C5A60S2的芯片跑了这个程序,程序跑成功了,用的是该芯片的PCA模块1,头文件改成了PCA1.主函数和头文件改了下,CKA文件不变!我在研究楼主这个程序,想红外发射出来,还想压缩数据,保存到eeprom中去!/*作品:捕获红外发射脉冲高、低电平时间,送串口显示单片机:STC12C5410晶振:12M编译环境:KeiluVision4V9.00*/说明:1、适用于:1T系列含有PCA捕获的STC单片机/2、捕获引脚PCA2(也就是P2.0),3字节存放一个电平时间数据。

31、/3、串口显示脉冲高低电平时间数据(串口:字符57600bps校验位N数据位8停止位1),/4、含NECRC5解码,如需其它解码请自己加入。/NEC码:(芯片有市场上用量最大的HT6121/6122及其兼容的IC芯片等)/RC5码:(芯片有SAA3006、SAA3010、SAA3027、PCA852卞PT2210等)#include<STC12C5A60S2.h>#include<CKA.H>#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongsbitIR=P1A4;/捕获引脚PCA

32、2即红外接收端口sbitP21二P2A1;ucharxdatav486;ucharN4;t;uintulongnn;bitVT;/捕获完成标志bitB_Z;/丢弃第一次捕获标志voidChuanKou();/串口发送主程序voidIR_RC5();/RC5解码/*函数:10msxn延时程序STC1T12MHz*/voidYS10ms(ucharn)uchari,j,k;for(i=n;i!=0;i-)for(j=198;j!=0;j-)for(k=150;k!=0;k-);/*函数:接收初始化*voidJS_Init(void)(uinti;B_Z=1;t=0;for(i=0;i<486

33、;i+)(vt=0;EPCA_LVD=1;CCAPM1|=0x31;CMOD=0x01;EA=1;P21=0;/*函数:主程序*voidmain()/存储区清0/PCA模块中断和低压检测中断允许位/PCA模块1:16位捕获模式,由CCP2的跳变触发。ECCF2=1,使能CCF2中断/ECF=1(CMOD.0=使能CF(CCON0位产生中断/开始接收,指示灯打开Uart_Init(12,1);JS_Init();YS10ms(10);ZIFUC("rnrnrn*开始接收,请按遥控*rn");while(1)(if(VT)(VT=0;P21=1;ChuanKou();YS10m

34、s(200);/接收完成,指示灯关闭/串口显示/1秒后重新开始JS_Init();ZIFUC("rnrnrn*可以重新接收,请按遥控*rn");*函数:PCA中断捕获程序(电位跳变捕获模式)*/voidPCA_isr(void)interrupt6using1(if(CF)(CF=0;vt+;if(vt>1)(CR=0;CF=0;CCAPM1=0;CCF1=0;VT=1;vt=0;return;if(CCF1)(CCF1=0;CL=0;CH=0;if(B_Z)(B_Z=0;return;t+;vt=CCAP1H;t+;vt=CCAP1L;t+;if(t>=486

35、)(CCAPM1=0;CCF1=0;/是否是PCA定时器溢出/必须软件清0(PCA定时器标志)/PCA定时器溢出计数,保存数据最高字节/设置允许溢出次数,>131ms终止捕获/捕获完成标志/是否是电位跳变/必须软件清0(PCA模块1标志)/先赋值低位CR=1;/启动PCA定时器/丢弃第一次捕获数据/保存数据高字节/保存数据低字节/捕获162个数据(1个电平时间3字节存放)CR=0;CF=0;VT=1;/捕获完成标志/*函数:串口发送主程序*/voidChuanKou()(uchari;uintj,T;ZIFUC("rnrn*接收完成*");ZIFUC("rn

36、rn(以下是遥控器发射脉冲的波形数据)");ZIFUC("rnrn序号高电平时间(us)低电平时间(us)rnrn");i=0;for(j=0;j<486;)(uchar*)&nn)0=0;(uchar*)&nn)1=vj+;(uchar*)&nn)2=vj+;(uchar*)&nn)3=vj+;ZIFUC("");JZ(i,10,2);/序号ZIFUC("");JZ(nn,10,8);/高电平时间(uchar*)&nn)0=0;(uchar*)&nn)1=vj+;(uc

37、har*)&nn)2=vj+;(uchar*)&nn)3=vj+;ZIFUC("");if(i%8)=0)ZIFUC("rnrn");elseZIFUC("rn");i+;/NEC解码/j=9;/引导码丢弃for(i=0;i<32;i+)(j+;(uchar*)&T)0=vj+;(uchar*)&T)1=vj+;j+=3;Ni/8>>=1;if(T<1900)&&(T>1000)(Ni/8|=0x80;if(N2=N3)/校验NECM作码。错误则尝试RC5解

38、码(ZIFUC("rn【NEC通用编码格式:弓I导码+32位编码(16位用户码+操作码正反码)】rn");ZIFUC("rn用户码(高8位):0x");JZ(N0,16,1);ZIFUC("rn用户码(低8位):0x");JZ(N1,16,1);ZIFUC("rnrn操作码正码:0x");JZ(N2,16,1);ZIFUC("rn");if(N0=N1)(ZIFUC("rnrn经对比,16位用户码是正反码,用户码正码:0x");JZ(N0,16,1);return;/初略分析

39、是否是RC5编码/j=0;for(i=0;i<20;i+)/最高位丢弃(1个数(j+;据3字节);(uchar*)&T)0=vj+;(uchar*)&T)1=vj+;600<nn<1800if(T<600|T>1800)/RC5码前20个脉冲数据(ZIFUC("rn【解码失败,再试一试或者分析波形数据】");return;/将波形数据绘成图像/ZIFUC("rn【RC5编码发射波形】发射顺序:(低位)-(高位)rn");ZIFUC("rn_");j=0;for(i=0;i<26;i+

40、)(j+;/最高位丢弃(1个数据3字节);(uchar*)&T)0=vj+;(uchar*)&T)1=vj+;if(T>2000)(break;if(i%2!=1)/如果i是偶数(if(T<1000)ZIFUC("”);elseZIFUC("");elseif(T<950)ZIFUC("_");elseZIFUC("");ZIFUC("");rn");ZIFUC("rn:IR_RC5();/RC5解码ZIFUC("rn|起始位|空|系统位|数

41、据位|rn");ZIFUC("rnrn【RC5通用编码格式:14位编码】rn");ZIFUC("rn起始位(2位):0x");JZ(N0,16,1);ZIFUC("二进制:");JZ(N0,2,2);ZIFUC("rn控制位(1位):");if(N1)ZIFUC("1");elseZIFUC("0");ZIFUC("rn系统位(5位):0x");JZ(N2,16,1);ZIFUC("二进制:");JZ(N2,2,5);ZIFU

42、C("rn数据位(6位):0x");JZ(N3,16,1);ZIFUC("二进制:");JZ(N3,2,6);/*函数:根据收集的脉冲数据进行RC5解码*/voidIR_RC5()(bitucharx;ucharn;uintt;BV=1;高电平时间。x=0;t=0;N0=N1=N2=N3=0;/BV=1时检测(接收端)低电平时间,BV=0时检测(接收端)for(n=0;n<14;n+)x+;(uchar*)&t)0=vx+;(uchar*)&t)1=vx+;/14位位码解码/最高位丢弃(1个数据3字节)/*确认位码值*/if(BV)

43、if(t<950)/BV=1时,如果t<950uS,下次还是检测(接收端)低电平时间,且跳过高电平时间。B_v=1;x+=3;else/BV=1时,如果t>950uS,下次检测(接收端)高电平时间B_v=1;BV=0;elseif(t<950)B_v=0;x+=3;elseB_v=0;BV=1;/*装载位码值*/if(n<2)(N0>>=1;if(B_v)N0|=0x02;elseif(n=2)N1=B_v;elseif(n<8)(N2>>=1;if(B_v)N2|=0x10;elseif(n<15)(N3>>=1;

44、if(B_v)N3|=0x20;/*发射位码值*/ZIFUC("");if(B_v)ZIFUC(T);elseZIFUC("0");/新一代1T8051系列单片机内核特殊功能寄存器C51CoreSFRs/10ResetValue/Accumulator0000,0000sfrB=0xF0;/BRegister0000,0000sfrPSW=0xD0;/ProgramStatusWordCYACF0RS1RS0OVF1P0000,0000/sbitCY=PSWA7;sbitAC=PSWA6;sbitF0=PSWA5;sbitRS1=PSWA4;sbitRS

45、0=PSWA3;sbitOV=PSWA2;sbitP=PSWA0;/sfrSP=0x81;/StackPointer0000,0111sfrDPL=0x82;/DataPointerLowByte0000,0000sfrDPH=0x83;/DataPointerHighByte0000,0000/新一代1T8051系列单片机系统管理特殊功能寄存器/76543210ResetValuesfrPCON=0x87;/PowerControlSMODSMOD0LVDFPOFGF1GF0PDIDL0001,0000/765432sfrACC0xE0;10ResetValuesfrAUXR=0x8E;/A

46、uxiliaryRegisterT0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRS0000,0000/sfrAUXR1=0xA2;/AuxiliaryRegister1/*PCA_P4SPI_P4S2_P4GF2ADRJDPS0000,0000PCA_P4:0,缺省PCA在P1口1,PCA/PWM从P1口切换到P4口:ECI从P1.2切换到P4.1口,PCA0/PWM0从P1.3切换到P4.2口PCA1/PWM1从P1.4切换到P4.3口SPI_P4:0,缺省SPI在P1口1,SPI从P1口切换到P4口:SPICLK从P1.7切换到P4.3口MISO从

47、P1.6切换到P4.2口MOSI从P1.5切换到P4.1口SS从P1.4切换到P4.0口S2_P4:0,缺省UART2在P1口1,UART2从P1口切换到P4口:TxD2从P1.3切换到P4.3口RxD2从P1.2切换到P4.2口GF2:通用标志位ADRJ:0,10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器1,10位A/D转换结果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器DPS:0,使用缺省数据指针DPTR01,使用另一个数据指针DPTR1*/sfrWAKE_CLKO=0x8F;/附力U的SFRWAK1_CLKO/*76

48、543210ResetValuePCAWAKEUPRXD_PIN_IET1_PIN_IET0_PIN_IELVD_WAKE_T1CLKOT0CLKO0000,0000Bb7-PCAWAKEUP:PCA中断可唤醒powerdown。b6-RXD_PIN_IE:当P3.0(RXD)下降沿置位RI时可唤醒powerdown(必须打开相应中断)。b5-T1_PIN_IE:当T1脚下降沿置位T1中断标志时可唤醒powerdown(必须打开相应中断)。b4-T0_PIN_IE:当T0脚下降沿置位T0中断标志时可唤醒powerdown(必须打开相应中断)。b3-LVD_WAKE:当CMPIN脚低电平置位LV

49、D中断标志时可唤醒powerdown(必须打开相应中断)b2-b1-T1CLKO:允许T1CKO(P3.5)脚输出T1溢出脉冲,Fck1=1/2T1b0-T0CLKO:允许T0CKO(P3.4)脚输出T0溢出脉冲,Fck0=1/2T1*/sfrCLK_DIV=0x97;/ClockDivder-/sfrBUS_SPEED=0xA1;/Stretchregister-溢出率溢出率-CLKS2CLKS1CLKS0xxxx,x000ALES1ALES0-RWS2RWS1RWS0xx10,x011/*ALES1andALES0:00:TheP0addresssetuptimeandholdtimetoALEnegativeedgeisoneclockcycle01:TheP0addresssetuptimeandholdtimetoALEnegativeedgeistwoclockcycles.10 :TheP0addre

温馨提示

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

评论

0/150

提交评论