单片两个定时器我时这么用的, 定时器0,作为一个定时器。初始化如下。 void InitialT0(void) {
TMOD = TMOD|0x01; TH0 = HLOAD; TL0 = LLOAD; EA = 1;// Open the global interrupt ET0 = 1;//Open the respective interrupt TR0 = 1;//Start counter } 中断函数: unsigned char temp; void timer0(void) interrupt 1 using 0 { TR0 = 0; TH0 = HLOAD; TL0 = LLOAD; CNT = CNT + 1; temp = IO_LED_UP; IO_LED_UP = !temp; TR0 = 1; } 第二定时器作为波特率发生器。 void InitialSerial(void) {
TMOD &= 0x0F; TMOD |= 0x20; TH1 = 253; //baudrate = 19200 TR1 = 1; //timer 1 starting //init UART PCON |= 0x80;//SMOD = 1 SCON = 0x40; //uart mode 1
EA = 1; //global interrupt enable ES = 1; //enable uart interrupt REN = 1; //enable rx }
然后我在主函数里面判断,当CNT==2时,我就通过串口发数据。串口发数据程序正常(测试过)。 int main(void) {
InitialSerial(); InitialT0( ); while(1) { if(CNT==2) { TR0 = 0; sp_start_xmt(string1,strlen(string1)); CNT = 0; TR0 = 1; }
} } 然后通过PC串口发现没有接受到数据。为什么啊? 但是我把那个定时器0的TR0 = 1屏蔽时,我发现串口可以发数据了。 为什么?
急啊! |