0$房天下问答|单片机红外遥控程序$https://m.fang.com/ask/ask_1444006.html$https://static.soufunimg.com/common_m/m_public/201511/images/asksharedefault.png
packc/pages/ask/detail/detail?askid=1444006
-
单片机红外遥控程序
问题在程序的注释部分。用中断底电平触发怎么没写IT0=1呢?请帮忙看看。还有能不能说说在接收红外解码过程中,中断是怎么工作的?如接收头接收到数据给P3^2时就产生中断,说说这一系列的中断过程吧?拜托了!void interrupt_ISR() interrupt 0{ EX0=0; //D is able INT 0 TR0=0; //D is able Timer0 IRint=1; //为什么要把IRint置1(IRint接MCU单片机 P3^2) interval=TH0; TH0=0xb0; //怎么算得TH0的值? TL0=0; TR0=1; //Enable Timer0 EX0=1; //Enable INT0}bit IRdecode() { static Idata BYTE INTcount=0; //这里可以用uchar INTcount;INTcount=0;代替吗? static ulong idata IRdata=0; BYTE IRdata1,IRdata2,IRdata3,IRdata4; if(IRint) { if((interval>0xde)&&(interval<0xe1)) //0xdfe2=13.5ms { IRdata=0; INTcount=0; } else if((interval>0xb6)&&(interval<0xb9)) //0xb7fb=2.25ms(data=1) { IRdata=(IRdata<<1)+1; INTcount++; } else if((interval>0xb2)&&(interval<0xb5)) //0xb3fd=1.125ms(data=0) { IRdata=IRdata<<1; INTcount++; } else if((interval>0xd6)&&(interval<0xd9)) //0xd7e7=11.25ms { IRint=0; IRdata=0; IRcommanddata=0xff; //repeat重复 code flag有什么意义吗? return 1; 返回1值到哪去? } else { INTcount=33; IRdata=0; } IRint=0; if(INTcount==32) { IRdata1=(BYTE)(IRdata>>24); //这部分是什么意思,有什么作用? IRdata2=(BYTE)(IRdata>>16); IRdata3=(BYTE)(IRdata>>8); IRdata4=(BYTE)(IRdata); IRdata=0; if(IRdata4==~IRdata3) { IRcommanddata=IRdata3; //还原命令成功 return 1; } else return 0; } else return 0; } return 0; 返回值0给谁??}#include<reg52.h>void main(){ TH0=0XB0; EA=0; ET0=1; //Enable Timer0 interrupt TMOD=0x21;//定时器0,工作模式1;定时器1,工作模式2(8位自动重装) 为什么要启用两个定时器?? TCON=0x50; //TR0=TR1=1,start timers EA=1; while(1) { }}
更多
提问者:zoubufeng
发布于2010-12-13
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。

关注成功