基于pic单片机的红外遥控解码`

基于pic单片机的红外遥控解码`

ID:13658264

大小:45.50 KB

页数:5页

时间:2018-07-23

基于pic单片机的红外遥控解码`_第1页
基于pic单片机的红外遥控解码`_第2页
基于pic单片机的红外遥控解码`_第3页
基于pic单片机的红外遥控解码`_第4页
基于pic单片机的红外遥控解码`_第5页
资源描述:

《基于pic单片机的红外遥控解码`》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、这个暑假参加电子设计竞赛,学习了PIC单片机,买了很多器件带的源程序都是51单片机的程序,移植过来相当费时费事。我的这些程序都是从51的源程序移植过来的,旨在让用PIC单片机的同学知道这些器件的编程方法。现在器件清单出来了,第一次有了飞机,所以现在又加紧学stm32单片机,以后我还会发一些关于PIC单片机和stm32单片机的程序,大家可以收听我的腾讯围脖wdsmcu大家互相交流。有了新代码我也会在QQ上面说。由于时间紧,还要准备电赛,所以注释比较乱,大家多包涵。#include//调用PIC16F87XA单片机的头文件__CONFI

2、G(HS&WDTDIS&LVPDIS);//---------------------------------------//1602液晶相关I/O设置//---------------------------------------//红外解码寄存器设置unsignedchartmr_times;unsignedcharcode_data;unsignedcharcode;unsignedcharint_times;unsignedcharbuf1;bithead_ok;bitcode_ok;//------------------------

3、---------------//---------------------------------------//名称:解码错误处理函数//---------------------------------------voidwrong(void)//如果有错误,将相应寄存器清零,准备下一次接收{int_times=0;tmr_times=0;head_ok=0;code_data=0;code_ok=0;}//---------------------------------------//名称:0或1判断函数unsignedcharone_

4、zero(void){//参看遥控器芯片HT6221的说明书,0编码的脉冲周期为1.12ms//本例中,时间中断为0.25ms,所以我们判定取大于0.75ms小于1.5ms的脉冲均为0编码if((tmr_times>3)&(tmr_times<6)){return0;}//参看遥控器芯片HT6221的说明书,1编码的脉冲周期为2.24ms//本例中,时间中断为0.25ms,所以我们判定取大于1.75ms小于2.75ms的脉冲均为0编码elseif((tmr_times>7)&(tmr_times<11)){return1;}//如果脉冲周期不在0

5、.75-1.5ms或者1.75-2.75ms区间的,我们认为是错码,返回2return2;}//---------------------------------------//名称:中断服务程序//---------------------------------------voidinterruptISR(void)//PIC单片机的所有中断都是这一个入口{if(T0IF==1)//需要进一步判断是否是T0中断{TMR0=0x13;//定时器中断后,要重置初值,以备下次中断T0IF=0;//清中断标志位,以备下次中断//***此处用户自行添加

6、定时器T0中断处理程序***tmr_times++;//每250us计数一次//******************************************}if(INTF==1)//需要进一步判断是否是INT中断{INTF=0;//清中断标志位,以备下次中断GIE=0;//全局中断关掉,以避免解码过程进入其他中断int_times++;//捕捉中断计次if(head_ok==0)//如果还没接收到头码,那么先判断脉冲编码是否为头码{//参看遥控器芯片HT6221的说明书,发射代码的头码由一个9ms的起始码和一个4.5ms的结果码组成//

7、本例中,时间中断为0.25ms,所以我们判定大于12.5ms小于14.5ms的脉冲均为13.5ms的头码编码if(tmr_times>50&tmr_times<58){head_ok=1;//有效头码标志位置一,以示头码接收完成int_times=0;//外部中断计次寄存器清零,以准备接收后面的4组共32个脉冲tmr_times=0;//定时器中断计次寄存器清零,准备开始对后面的脉冲计时}else{wrong();//如果不是有效的头码,转入错误处理程序}}else//如果已经接收到头码,那么开始对后面的32个脉冲进行解码{code_data=c

8、ode_data>>1;//将接收缓冲区右移一位,以准备接收下一位buf1=one_zero();//判断编码是0或1,或者是错码tmr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。