最精间的PT2262解码程序.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:5 大小:105KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

最精间的PT2262解码程序.doc

最精间的PT2262解码程序.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

我看过很多PT2262软件解码程序,都是用定时器测量脉冲宽度。占用系统太多资源。我自己编写的程序不用定时器,不用中断,代码最少。发射端为PT22623.3M的电阻接收端为M8内部1MRC振荡。解码成功后输出D口显示。编译软件为ICCAVR。#include<iom8v.h>#include<macros.h>voiddelay_ms(void)//毫秒延时{unsignedinti;for(i=0;i<140;i++){}}voiddelay_nms(unsignedintn)//延时周期{unsignedinti;for(i=0;i<n;i++){delay_ms();}}voidspaz(void)//响蜂鸣器{PORTC|=(1<<5);delay_nms(50);PORTC&=~(1<<5);}unsignedlongdecode(void)//无线解码{unsignedlongDATA;//记录数据unsignedcharcount,i;//暂时计数/*一共接收三字节*/DATA=0;//for(count=0;count<24;count++)//开始收集{/*测量高电平宽度*/i=0;//宽度计数while(PINC&(1<<4))//高位计数{asm("nop");//i++;//计数增加if(i>192)gotoend;//限时解码}/*分辨出电平高低*/DATA*=2;//数据左移if(i<64)//分辨高低{if(!((56>i)&(i>24)))gotoend;//电平合法DATA+=0;//记低电平}else{if(!((168>i)&(i>72)))gotoend;//电平合法DATA+=1;//记高电平}/*测量低电平宽度*/while(!(PINC&(1<<4)))//低位计数{asm("nop");//i++;//计数增加if(i>224)gotoend;//限时解码}/*低电平是否过窄*/if(i<96)gotoend;//对比宽度}/*解码成功返结果*/returnDATA;//成功返回/*有误码结束解码*/end:return0;//误码结束}voidmain(void){unsignedlongDATA;//unsignedcharD[3];//signedchari;//DDRB=0B00000000;//定义输入PORTB=0B11111111;//上拉使能DDRC=0B11101111;//输入通道PORTC=0B11011111;//上拉选择DDRD=0B11111111;//定义输出PORTD=0B00000000;//输出显示while(1){DATA=decode();//解码程序if(DATA>0)//{spaz();//解码成功for(i=2;i>=0;i--)//数据转换{D[i]=DATA;//DATA>>=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];//输出显示}}}}