PT2262软件解码程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我看过很多PT2262软件解码程序,都是用定时器测量脉冲宽度。占用系统太多资源。我自己编写的程序不用定时器,不用中断,代码最少。发射端为PT2262 3.3M 的电阻接收端为M8 内部1M RC振荡。解码成功后输出D口显示。编译软件为ICCA VR。
(原文件名:2272.JPG)
引用图片
#include
#include
void delay_ms(void) //毫秒延时
{
unsigned int i;
for (i=0;i<140;i++)
{
}
}
void delay_nms(unsigned int n) //延时周期{
unsigned int i;
for (i=0;i { delay_ms(); } } void spaz(void) //响蜂鸣器{ PORTC|=(1<<5); delay_nms(50); PORTC&=~(1<<5); } unsigned long decode(void) //无线解码{ unsigned long DA TA; //记录数据 unsigned char count,i; //暂时计数 /*一共接收三字节*/ DA TA=0; // for (count=0;count<24;count++) //开始收集{ /*测量高电平宽度*/ i=0; //宽度计数while (PINC&(1<<4)) //高位计数 { asm("nop"); // i++; //计数增加 if (i>192) goto end; //限时解码 } /*分辨出电平高低*/ DA TA*=2; //数据左移 if (i<64) //分辨高低{ if (!((56>i)&(i>24))) goto end; //电平合法 DA TA+=0; //记低电平} else { if (!((168>i)&(i>72))) goto end; //电平合法 DA TA+=1; //记高电平} /*测量低电平宽度*/ while (!(PINC&(1<<4))) //低位计数 { asm("nop"); // i++; //计数增加 if (i>224) goto end; //限时解码 } /*低电平是否过窄*/ if (i<96) goto end; //对比宽度} /*解码成功返结果*/ return DA TA; //成功返回 /*有误码结束解码*/ end: return 0; //误码结束 } void main(void) { unsigned long DA TA; // unsigned char D[3]; // signed char i; // DDRB =0B00000000; //定义输入PORTB=0B11111111; //上拉使能 DDRC =0B11101111; //输入通道PORTC=0B11011111; //上拉选择 DDRD =0B11111111; //定义输出PORTD=0B00000000; //输出显示 while (1) { DA TA =decode(); //解码程序 if (DA TA>0) // { spaz(); //解码成功 for (i=2;i>=0;i--) //数据转换 { D[i]=DA TA; // DA TA>>=8; // } i=0; //转换完毕 while (1) //输出显示 { if (!(PINB&(1<<0))) //按键检查 { delay_nms(20); //防误处理 if (!(PINB&(1<<0))) // { i++; //显示值加 spaz(); } while (!(PINB&(1<<0))) //按键弹起 { delay_nms(20); //防误处理 } } if (i>2) break; // PORTD=D[i]; //输出显示} } } }