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

下载本文档

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

文档简介

1、疔岸立E I _.o_ 口>+ |工Mt立件|1厂厂rr厂r11 t厂 厂 rr1r r厂 厂r 厂 r 厂 iRf皿“&乞C十六WH?帀 <=k?悴欢35祇*我豪亟程字7件1l串口乳丰工程件| 决阳电盘左疋綏心区携收穿成耳.耳洪卜是涯堆器孩射抑冲的册细界 犀号 氐电泗寸旦心丿低电、乌|创心.424刘E03M E21N吋4 1sss1 1 1 1 U 1 19黑黑14C63妙 3 卷§822Q635631637矽ee5G3962463BK9Q621641623S1234567891011121.314何育接収壤冲区Q +厂也乱显示 e字行桔式显示羊宇苻惑去区:G

2、+六世峨査 广字符恪歿凭翻开/矢i肿口P妬和开串口揺地计甑】2436尖主计舉caccwiJK特網STC00 勺 校g 9692472岑93304549402 T 2 T 2 6 2 r-B9J39D& g| ?刃6263643M673697071TZ73T-47S76TT7870WS24 yjis624 t»75524 9TT0623 yjiu95923ZJW959212193959242199O592St IB:通用编那式;弓导冯-灵位解 T呢用户0榜作玛正反砂1 用户E <58($)- 3x83用户码 <ROfc> ; 31TF璨作码王码:0x12径匹比

3、 16位用户础是正反冯冃户码正色 曲。*可以重新妾枝询抿蓬控沁糾*程痒艾件_亠 串口助手i工程又件J 播験/龍盘发後缓亦区795T731617793772&763T79379177 6733T9Z730'怕377D860_cflr33讯M旷船旷疋歹愛凹叶8 G Q- 9 7 3 Q- 8 T Q 98 y o fl-J6 7 E Ct c 16 Ou & 6 7 T 73 c- E 6 T Mu fl- n.T 7 7 T T 7 7 onI占能I £ I ° 11系鬲fl °i ° 0疵堀益0 0二固制:11二直嗣;000 00

4、二遢制:001100*+*可以| 1前無控炖*神|防业业占畑強Kgl跡品舸程序如下:/*作品:捕获红外发射脉冲高、低电平时间,送串口显示单片机:STC12C5410晶振:12M编译环境:Keil uVisio n4 V9.00*/ 说明:1、适用于:1T系列含有PCA捕获的STC单片机/2、捕获引脚PCA2也就是P2.0,3字节存放一个电平时间数据。/3、串口显示脉冲上下电平时间数据串口:字符57600bps校验位N数据位8停止位1,/4、含NEC RC5解码,如需其它解码请自己参加。/ NEC 码:芯片有市场上用量最大的 HT6121/6122及其兼容的IC芯片等/ RC5 码:芯片有 SA

5、A3006、SAA3010 SAA3027 PCA8521、PT2210 等# defi ne uchar un sig ned char# defi ne uint un sig ned int# defi ne ulong un sig ned long#in elude <STC12C5410AD.h>#in elude <CKA.H>sbit IR = P2A0;/捕获引脚PCA2uchar xdata v486;uchar N4;uint t;ulong nn;bit VT;/bit B_Z;/捕获完成标志丢弃第一次捕获标志void ChuanKou(); /

6、串口发送主程序void IR_RC5(); /RC5解码/*函数:10ms x n延时程序 STC仃12MHz*/void YS10ms(uchar n)uchar i,j,k;for(i=n;i!=0;i-)for(j=198;j!=0;j-)for(k=150;k!=0;k-);/*函数:接收初始化*/void JS_Init(void)uint i;B_Z = 1;t = 0;for(i=0;i<486;i+)v=0; / 存储区清 0EPCA_LVD = 1;/PCA模块中断和低压检测中断允许位CCAPM2 |= 0x31;/PCACMOD = 0x01;/ECF=1EA = 1

7、;模块2 : 16位捕获模式,由 CCP2的跳变触发。ECCF2=1,使能CCF2中断(CMOD.0=1使能 CF( CCON.7位产生中断P21= 0;/开始接收,指示灯翻开/*函数:主程序*、void main(void)UartInit(12,1);JS_Init();YS10ms(10);ZIFUC("rnrnrn*开始接收,请按遥控 *rn"while(1)if(VT)VT = 0;接收完成,指示灯关闭串口显示P21 = 1; /ChuanKou(); /YS10ms(200);YS10ms(200);YS10ms(200); /6秒后重新开始JS_Init();

8、可以重新接收,请按遥控 *rn"ZIFUC("rnrnrn函数:PCA中断捕获程序电位跳变捕获模式* void PCA_isr(void) interrupt 6 using 1是否是PCA定时器溢岀必须软件清 0 PCA 定时器标志定时器溢岀计数,保存数据最高字节设置允许溢岀次数, >131ms 终止捕获if(CF)/CF = 0;/vt+;/PCAif(vt>1) / CR = 0;CF = 0;CCAPM2 = 0;CCF2=0;捕获完成标志VT=1; / vt=0;return;if(CCF2)CCF2 = 0;CL = 0;CH = 0;/是否是电位跳

9、变必须软件清 0 PCA 模块 2 标志先赋值低位if(B_Z) CR =1; /B_Z=0;return; /t+;vt=CCAP2H; /t+;vt=CCAP2L; /t+;启动PCA定时器丢弃第一次捕获数据保存数据高字节保存数据低字节if(t >= 486) /捕获 162个数据 1个电平时间 3 字节存放CCAPM2 = 0;CCF2=0;CR = 0;CF = 0;捕获完成标志VT = 1; /* 函数:串口发送主程序 */void ChuanKou()uchar i;uint j,T;ZIFUC("rnrn*接收完成 *");ZIFUC("rnr

10、n( 以下是遥控器发射脉冲的波形数据) ");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;(uc

11、har *)&nn)1 = vj+;(uchar *)&nn)2 = vj+;(uchar *)&nn)3 = vj+;ZIFUC("");JZ(nn,10,8);/低电平时间if( (i%8)=0 )ZIFUC("rnrn"); else ZIFUC("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<1

12、900) && (T>1000)Ni/8 |= 0x80;if(N2 = N3) /校验NEC操作码。错误那么尝试RC5解码ZIFUC("rnZIFUC("rnJZ(N0,16,1);ZIFUC("rn【NEC通用编码格式:引导码 + 32位编码16位用户码+操作码正反码用户码高 8 位: 0x"用户码低 8位: 0x"】rn");JZ(N1,16,1);ZIFUC("rnrn操作码正码0x");JZ(N2,16,1);ZIFUC("rn");if(N0 = N1)经比照,

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

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

15、;");ZIFUC("ZIFUC("rnIR_RC5();ZIFUC("rn";丨起始位丨空丨系统位/RC51丨丨丨丨丨dn"数据位I 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");else

16、 ZIFUC(" 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 解码*/void IR_RC5()bit B_v,BV;uchar x;uchar n;uint t;x = 0;t = 0;N0=N1=N2=N3=0;for(n=0;n&

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

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

19、器报错了/*/ 实验调试助手,串口字符显示版本: 2022/08/06 / 串口说明:使用定时器1,字符发送, N, 8 , 1/ (6MHz 1T) 28800bps/ ( 11.0592MHz 1T ) 115200bps/ (12MHz 1T) 57600bps/ ( 22.1184MHz 1T ) 256000bps/ (6MHz 12T)2400bps/ ( 11.0592MHz 12T) 57600bps/ (12MHz 12T)4800bps/ voidUart_Init(uint8 M,uint8 T);/ 串口初始化/ voidJZ(uint32 tem,uint8 num,

20、uint8 i);/ 整形数据送串口显示/ voidZIFUC(uint8code*p);送/ 【供用户调用的 3 个函数】/*/ 字 符 串 发#ifndef_CKA_H_#define_CKA_H_#include#define uint8#define uint16#define uint32<intrins.h>unsigned charunsigned intunsigned long/*函数:串口初始化入口:( MHz, 12T/1T )举例:如使用 22.1184MHz 晶振, STC 1T 系列,那么初始化时应为: Uart_Init(22,1 ),与PC的串口助手

21、通讯:波特率 256000bps,字符,校验位N,数据位8,停止位1 */void Uart_Init(uint8 M,uint8 T)bitBS,XT;uint16 MT;MT = M*100+T;switch(MT)1T 系列】case 601:/28800bps6MHz/ 倍速/1T 模式BS = 1;XT = 1;TL1 = 0xF3; /初值AUXR &= 0xfe;/ 串口 1 选择定时器 1 为波特率发生器break;case 1101:/115200bps11.0592MHzBS= 0;/ 不倍速XT= 1;/1T模式TL1= 0xFD; /初值break;case 1

22、201:/57600bps12MHzBS= 1;/ 倍速XT= 1;/1T模式TL1= 0xF3; /初值break;case 2201:/256000bps22.1184MHzBS= 1;/ 倍速XT= 1;/1T模式TL1= 0xFB; /初值break;/12T 系列】case 612:/2400bps6MHzBS= 1;/ 倍速XT= 0;/12T 模式TL1= 0xF3; /初值break;case 1112:/57600bps11.0592MHzBS= 1;/ 倍速XT= 0;/12T 模式TL1= 0xFF; /初值break;case 1212:/4800bps12MHzBS=

23、 1;/ 倍速XT= 0;/12T模式TL1= 0xF3; /初值break;if(BS)PCON |= 0x80;/ 使能波特率倍速位 SMODelsePCON &= 0x7f;/ 波特率不倍速SCON = 0x50;/8 位数据 , 可变波特率if(XT)AUXR |= 0x40;/ 定时器 1 时钟为 Fosc, 即 1Telse AUXR &= 0xbf;/ 定时器 1时钟为 Fosc/12, 即 12TTMOD &= 0x0f;/ 去除定时器1 模式位TMOD |=0x20;/ 设定定时器1为 8位自动重装方式TH1= TL1;/ 重装值ET1= 0;/ 禁止

24、定时器1 中断TR1= 1;/ 启动定时器1/*函数:HEX转ASCII */uint8 HEX2ASCII(uint8 dat)dat &= 0x0f;if(dat <= 9) return(dat+'0');return (dat-10+'A');/ 数字 09( '0' 0x30 )/ 字母 AF ( 'A' 0x41,'a' 0x61 )/*函数:串口发送*/void TxS(uint8 i)SBUF=i;while(!TI);TI=0;/*函数:字符串发送void ZIFUC(uint8 c

25、ode *p)*/ 发送一串字符串/ 遇到停止符 0 结束for(; *p != 0; p+) TxS(*p);/*函数:整形数据送串口显示入口: tem = 整形数据送入 14 字节整形数据num = 以什么进制显示, 2:二进制,10:十进制, 16:十六进制= 显示低几位= 显示个位算起几位数= 显示几字节 */以二进制显示时以十进制显示时以十六进制显示时void JZ(uint32 tem,uint8 num,uint8 i)uint8 j,z10;bit BT=0;switch(num)case 2: tem = _lror_(tem,i-1); / 以二进制显示while(i-)i

26、f(tem & 1)ZIFUC("1");elsetem = _lrol_(tem,1);/* 【 另一种算法 】 tem <<= (32-i);while(i-)if(tem & 0x80000000)ZIFUC("1"); elsetem <<= 1; */break;case 10: for(j=0;j<i;j+)/ 以十进制显示zj = tem%10;nv1=十位,tem /= 10;ZIFUC("0");ZIFUC("0");/nv0= 个位,while(i-

27、)if(z | (i=0)BT=1;if(BT)TxS(HEX2ASCII(z); else ZIFUC(" ");break;/ 数据有效标志/ 数据有效前的“ 0不显示,/ 用空格替case 16: for(j=4-i;j<4;j+)/十六进制显示zj = (uint8 *)&tem)j;TxS(HEX2ASCII(zj>>4);/ 发送高 4 位TxS(HEX2ASCII(zj);/ 发送低 4 位break;#endif/头文件 CKA.H 应用例如/#define uint8unsigned char#define uint16unsig

28、ned int#define uint32unsigned long#include "STC89C52RC.H"#include "intrins.h"#include "CKA.H"/*函数:10ms x n 延时程序STC 12T12MHz*/void YS10ms(uint8 n)uint8 i,j,k;for(i=n;i!=0;i-)for(j=30;j!=0;j-) for(k=165;k!=0;k-); void main(void)uint32 a = 1234567890;uint32 b = 0xABCE1234;

29、Uart_Init(11,12);/串口初始化11.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("rn b = 0x");JZ(b,16,4);/ 以十六进制显示 bZIFUC("b 低 3字节 =

30、");JZ(b,16,3);/ 以十六进制显示 b 的低 3 字节ZIFUC("rn b = ");JZ(b,2,32);/ 以二进制显示 bZIFUC("( 二进制 )rn c = ");JZ(c,2,8); / 以二进制显示 cZIFUC("( 二进制 )rn");ZIFUC("rnrn* c自加 1 显示 *rnrn");while(1)c+;ZIFUC(" 十六进制 :c = 0x");JZ(c,16,1); / 以十六进制显示 cYS10ms(200);ZIFUC("

31、;rn");程睜交件丨丄L串口助手工程文件I 接收/犍盘发送後冲区參字符串岌逶区 陵注宇符串 HEXt:*#* 密口显示实瞪 *»*#a = 1?3456T69C 蠅倆奇=那b = 0-AB7E:24b碼 3节=CE1234b = 10101011 llOOlllOOOOlOClOOOllOlM T进制丿 c = C0110011 U 邊制c自加 1 昼示 *5甲-fltstty-fl4:c - 0tx34 :c - 0tit35:c = 0x36;c = 0x37 ;c - 0x38:c 匸 0x39:c = 0tx3A:c - Ota 眇 :c = 0x3C:c = D

32、x3D;c = Ox3E:c 匸 Ox3F:c = tb:4017厂十六遊制显示 席字符格武显示育接收缓冲区3卫20首动循环发送|间產单字符串笈注区.忡十育进制痂清发送螺中区发送学符#数据r字符格式发蓬自动耘翩|皿壹秒 自动发蓬黄闭串口 |SSW抒开关闭串口两下载后扛开串口收缩主窗悽|楼用说蜀I接收计埶弋53发送计藪.cur dev. cn我用STC12C5A60S2的芯片跑了这个程序,程序跑成功了,用的是该芯片的PCA模块1,头文件改成了 PCA1.主函数和头文件改了下,CKA文件不变!我在研究楼主这个程序,想红外发射出来,还想压缩数据,保存到eeprom中去!/*作品:捕获红外发射脉冲高、

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

34、S2.h>#include <CKA.H>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit IR = P1A4;sbit P2 仁 P2A1;uchar xdata v486;uchar N4;uint t;ulong nn;/ 捕获引脚 PCA2即红外接收端口bitVT;bitB_Z;voidChuanKou();voidIR_RC5();/ 捕获完成标志/ 丢弃第一次捕获标志/ 串口发送主程序/RC5 解码/*函数:10ms x n延时程序STC仃12MH

35、z*/void YS10ms(uchar n)uchar i,j,k;for(i=n;i!=0;i-)for(j=198;j!=0;j-)for(k=150;k!=0;k-);函数:接收初始化*、void JS_Init(void)uint i;B_Z = 1;t= 0;for(i=0;i<486;i+)vt=0;EPCA_LVD = 1;CCAPM1|= 0x31;CMOD = 0x01;EA = 1;P21 = 0;/*函数:主程序*void main()/ 存储区清 0/PCA 模块中断和低压检测中断允许位/PCA模块1 : 16位捕获模式,由 CCP2的跳变触发。ECCF2=1,

36、使能CCF2中断ECF=1 ( CMOD.0=1 使能 CF ( CCON.7 位产生中断/ 开始接收,指示灯翻开Uart_Init(12,1);JS_Init();YS10ms(10);ZIFUC("rnrnrn* 开始接收,请按遥控 *rn");while(1)if(VT)VT = 0;P21 = 1;ChuanKou();/ 接收完成,指示灯关闭/ 串口显示YS10ms(200);/1 秒后重新开始JS_Init();ZIFUC("rnrnrn* 可以重新接收,请按遥控 *rn");函数:PCA中断捕获程序(电位跳变捕获模式)*/void PCA_

37、isr(void) interrupt 6 using 1 if(CF)CF = 0;vt+;if(vt>1)CR = 0;CF = 0;CCAPM1 = 0;CCF1=0;VT=1;vt=0;/是否是PCA定时器溢出/ 必须软件清 0 PCA 定时器标志/PCA 定时器溢出计数,保存数据最高字节/ 设置允许溢出次数, >131ms 终止捕获/ 捕获完成标志return;if(CCF1)CCF1 = 0;CL= 0;CH= 0;if(B_Z)CR =1;B_Z=0;return;t+;vt=CCAP1H;t+;vt=CCAP1L;t+;if(t >= 486)CCAPM1 =

38、 0;CCF1=0;/ 是否是电位跳变/ 必须软件清 0/ 先赋值低位/ 保存数据高字节/ 保存数据低字节/ 捕获 162 个数据PCA 模块 1 标志/启动PCA定时器/ 丢弃第一次捕获数据1 个电平时间 3 字节存放CR = 0;CF = 0;VT = 1;/ 捕获完成标志/*函数:串口发送主程序 */void ChuanKou()uchar i;uint j,T;ZIFUC("rnrn * 接收完成 *");ZIFUC("rnrn ( 以下是遥控器发射脉冲的波形数据) ");ZIFUC("rnrn 序号 高电平时间 (us) 低电平时间

39、(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+;(uchar *)&nn)2 = vj+;(uchar *)&nn)3 = vj+;/

40、 序号/ 高电平时间ZIFUC(" ");JZ(nn,10,8);/ 低电平时间if( (i%8)=0 )ZIFUC("rnrn");elseZIFUC("rn");i+;/ NECj=9;for(i=0;i<32;i+)解码 / 弓导码丢弃if(N2 = N3)j+;(uchar *)&T)0 = vj+;(uchar *)&T)1 = vj+;j += 3;Ni/8 >>= 1;if(T<1900) && (T>1000)Ni/8 |= 0x80;/校验NEC操作码。错

41、误那么尝试RC5解码ZIFUC("rn 【NEC通用编码格式:弓I导码+ 32位编码(16位用户码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位用户码是正反码,用户码正码:JZ(N0,16,1);return;+操作码正反码)】rn&

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

43、 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)偶数if(T<1000)/ 最高/ 如果 i 是elseelseZIFUC(;ZIFUC(" ");if(T<950)ZIFUC("_");elseZIFUC("");ZIFUC("");rn");ZIFUC(

44、"rn丨 丨丨丨 丨 丨 丨丨丨 丨 丨丨 丨 丨IR_RC5();/RC5 解码ZIFUC("rn丨起始位丨空丨系统位丨数据位丨rn");ZIFUC("rnrn 【 RC5 通用编码格式: 14 位编码 】 rn");ZIFUC("rn 起始位(2 位):Ox");JZ(N0,16,1);ZIFUC("二进制:");JZ(NO,2,2);ZIFUC("rn控制位( 1 位): ");if(N1) elseZIFUC("1");ZIFUC("O"

45、);ZIFUC("rn系统位(5 位): Ox");JZ(N2,16,1);ZIFUC("二进制:");JZ(N2,2,5);ZIFUC("rn数据位(6 位): Ox");JZ(N3,16,1);ZIFUC("二进制:");JZ(N3,2,6);/*函数:根据收集的脉冲数据进行RC5 解码 */void IR_RC5()bitB_v,BV;uchar x;uchar n; uint t;BV = 1;高电平时间。x= 0;t= 0;N0=N1=N2=N3=0;BV=1时检测接收端低电平时间,BV=0时检测接收端f

46、or(n=0;n<14;n+)x+;(uchar *)&t)0 = vx+;(uchar *)&t)1 = vx+;/14 位位码解码/ 最高位丢弃 1 个数据 3 字节/*确认位码值*/if(BV)ift <950过高电平时间/BV=1 时,如果 t<950uS ,下次还是检测 接收端 低电平时间,且跳B_v=1;x+=3;elset>950uS ,下次检测 接收端 高电平时间/BV=1 时,如果B_v=1;BV=0;elseif(t < 950)B_v=0;x+=3;elseBV=1;/* 装载位码值 */if(n < 2)N0 >>= 1; if(B_v)N0 |= 0x02;else if (n=2)N1 = B_v;else if(n<8)N

温馨提示

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

评论

0/150

提交评论