HI,ALL 本来是红外发射码,但是发现只要定时器用得多了,就有问题,只能将代码一点一点删除,现在就剩下发38K脉冲持续500次,延时一段时间,再循环。实测38K持续时间忽长忽短,不知所以,请大侠解释一下。。 #include <reg51.h> //#include <C51_ZY.h> sbit P1_1=P1^1; // LED static bit OP; //the turn on or off of the IR led sbit P1_3=P1^3; // IR pin static unsigned char flag; //the flag of IRemission static unsigned int lead_high; static unsigned int lead_low; static unsigned int count; //delaycount static unsigned int endcount; //terminatecount void SendIRdata(void); void timer0_int(void); void IR_transfer_test(void); void delay_100ms(int); void main(void) { IE=0x0; P1_1=0; //AUXR |= 0x80; //SET TIMER0 1T MODE P1M1 &= 0xF7; P1M0 |= 0x08; //SETP1_3 PUSH-PULL MODE timer0_int(); IR_transfer_test(); } void IR_transfer_test() { //int i; // int j; count=0; flag=0; OP=0; P1_3=0; lead_high=500; lead_low=500; do{ EA=1; SendIRdata(); EA=0; P1_3=0; delay_100ms(1); } while(1); } void SendIRdata() { endcount=lead_high; flag=1; count=0; //ET0=1;TR0 = 1; do{}while(count<endcount); //TR0 = 0;ET0=0; //endcount=lead_low; //flag=0; // count=0; //ET0=1;TR0 = 1; //do{}while(count<endcount); // TR0 =0;ET0=0; } void timer0_int() { EA=1; AUXR |= 0x80; //定时器时钟1T模式 TMOD &=0xF0; //设置定时器模式 TMOD |= 0x02; //设置定时器模式 TL0 = 0x64; //设置定时初值 TH0 = 0x64; //设置定时重载值 TF0 = 0; //清除TF0标志 ET0=1; TR0 = 1; //定时器0开始计时 } void timeint(void) interrupt 1 { count++; if (flag==1) { OP=~OP; } else { OP = 0; } P1_3= OP; } void delay_100ms(int k) { int i,j; for(k;k>0;k--) { for(i=0;i<150;i++) { for(j=0;j<100;j++); } } }
|