房天下 > 房天下问答 > 业主生活 > 其他
  • 单片机红外遥控程序

    问题在程序的注释部分。用中断底电平触发怎么没写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

共1个回答
  • 奶娘娱乐 丨Lv 2
    红外遥控,世纪上是串口程序你写段串口的接收程序看看吧!!!
    +1 2010-12-14 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。