各位大虾帮我看看下面的程序啊,怎么定时器对程序的运行有影响的? 程序如下: #include<reg51.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long
extern show(uchar showdata);
ulong IRcode=0x00000000; //32位的键代码 uchar Lcustomcode=0x92; //低八位用户码 uchar Hcustomcode=0x82; //高---- uchar datacode=0xf8; //8位键数据码 uchar Rdatacode=0x80; //8位键数据反码
void delay() { uchar i,j,k; for(i=200;i>0;i--) for(j=200;j>0;j--) for(k=5;k>0;k--) ; }
void init() { TMOD=0x11; //定时器0,工作方式1 ; 定时器1,工作方式1 TCON=0x01; //外中断0下降沿触发,(包括TR1=0,TR0=0) TH0=0x3c; //初始化定时器0,定时50ms TL0=0xb0; TH1=0x00; //初始化定时器1 TL1=0x00; EA=1; //开全中断 ET0=1; //开放T0中断 ET1=1; //开放T1中断 EX0=1; //开放外中断0 }
void remoteint() interrupt 0 using 0 //遥控器中断处理函数 { EX0=0; IRcode=code; //code为读到的32位的值 Lcustomcode=IRcode; IRcode=IRcode>>8; Hcustomcode=IRcode; IRcode=IRcode>>8; datacode=IRcode; IRcode=IRcode>>8; Rdatacode=IRcode; TR1=1; //开始计时????????? EX0=1; }
void main() { init(); while(1) { show(Lcustomcode); delay(); show(Hcustomcode); delay(); show(datacode); delay(); show(Rdatacode); delay(); } } 问题就出在TR1=1上,有了这句之后显示的数码管就一闪一闪的了,并且数据也不正确,但删掉这句后,程序就正常,或者一开始就关闭T1(ET1=0)也没影响,程序运行也正常,难到定时器的中断对程序也有影响吗? 谢谢各位! |