文档:该程序功能是接收遥控信号。先发引导码,引道码9MS的高电平和4.5MS的低电平够成,再开始发用户码(16位) 接着发按键码(8位)最后发按键的反码(8位) 都是先发低位再发高位. 数据0是由0.56MS的高电平和0.56ms的低电平构成,数据1是由0.56ms高电平和1.685ms的底电平构成。所以我用低电平的时间 来判断是0还是1。 #include<stc89c51.h> static unsigned char data array[4],i,,j; //***************************************************************************************** void int1(void) interrupt 2 { EA=1; file://开CPU中断 EX1=1; file://开INT1中断 ET1=1; file://开T1中断 TH1=0X00; file://计时器请0 TL1=0X00; for(i=0;i<4;i++) file://数组清0 {array[i]=0;} } file://************************************************************************************************** void timer1(void) interrupt 3 { int n,m; char k; TMOD=0X10; file://T1选择定时方式1
TR1=1; file://开T1 TH1=0X00; file://T1清0 TL1=0X00; while(1){ file://等待遥控信号的出现 while(!INT1); file://若为到电平,延时8.8ms for(n=0;n<8800;n++); while(INT1); file://若为低,延时4.4ms for(m=0;m<4400;m++); for(i=0;i<4;i++) file://装32位数据 { for(j=0;j<8;j++) { if(INT1==0) file://如果为低电平,开T1 TH1=0X00; TL1=0X00; TR1=1; if(INT1==1) file://如果为低电平,停止计时 TR1=0; if(TH1<0X04) file://如果时间小于1024us k=0; file://发的是0 else
k=1; file://否则发的是1 array[i]|=k; file://将0或1存到数组中 array[i]>>=1; }}}}
void main() { IE=0X86; file://开CPU中断 RI=1; IT1=1; 下降沿有效 SCON=0x50; PCON=0x01; TR1=1; TH1=0x00;
TL1=0x00;}
问题是,CPU响应的中断,收到数据,但是不是遥控发的数据,不知道是采样有问题,还是中断服务程序有问题,请各位老大指点,小弟感激不尽
[align=right][color=#000066][此贴子已经被作者于2005-6-14 20:42:33编辑过][/color][/align]