这个程序为什么在中断里占空比不正确,在MAIN里就正确呢
#include sbit PWMOUT = P0^0;unsigned char HighRH = 0;unsigned char HighRL = 0;unsigned char LowRH = 0;unsigned char LowRL = 0;void ConfigPWM(unsigned int fr, unsigned char dc);void ClosePWM();void init_uart(void);void main(){ unsigned int i; unsigned char tmp1; EA = 1; //开总中断 init_uart(); while (1) ;// {// ConfigPWM(500, 50); //频率100Hz,占空比10%// for (i=0; i<40000; i++);// ConfigPWM(892.85, 80); //频率100Hz,占空比10%// for (i=0; i<40000; i++); // // }}void ConfigPWM(unsigned int fr, unsigned char dc){ unsigned long tmp; unsigned int high, low; tmp = 11059200/12/fr; high = (tmp*dc)/100; low = tmp - high; high = 65536 - high + 12; low = 65536 - low + 12; HighRH = (unsigned char)(high >>8); HighRL = (unsigned char)high; LowRH = (unsigned char)(low >> 8); LowRL = (unsigned char)low; TMOD &= 0xF0; TMOD |= 0x01; TH0 = HighRH; TL0 = HighRL; ET0 = 1; TR0 = 1; PWMOUT = 1; }void ClosePWM(){ TR0 = 0; ET0 = 0; PWMOUT = 1;}void InterruptTimer0() interrupt 1{ if (PWMOUT == 1) //当前输出为高电平时,装载低电平值并输出低电平 { TH0 = LowRH; TL0 = LowRL; PWMOUT = 0; } else //当前输出为低电平时,装载高电平值并输出高电平 { TH0 = HighRH; TL0 = HighRL; PWMOUT = 1; }}void init_uart(void){ SCON=0x50; //REN=1允许串行接受状态,串口工作模式2 TMOD= 0x00; //定时器1为模式0(16位自动重载) AUXR=0X40; //开启1T模式 TL1=(65535-(11059200/4/9600)); //设置波特率重装值 TH1=(65535-(11059200/4/9600))>>8; TR1 = 1; //开启定时器1 ES = 1; //开串口中断 }void uart_int(void) interrupt 4 using 1{ unsigned char tmp1; unsigned int i; if (RI) { tmp1 = SBUF; if(tmp1==0x8A) //收到的数据为0x15 { RI = 0; ES= 0; //关闭串口中断 ConfigPWM(500, 50); //频率100Hz,占空比10% for (i=0; i<40000; i++); //ES= 1; } else if(tmp1==0x8B) { RI = 0; ES= 0; //关闭串口中断 ConfigPWM(892.85, 80); //频率100Hz,占空比10% for (i=0; i<40000; i++); // ES= 1; } }}