////************************程序******************** #include <REG51.H> // void initScom(void); void dms(void); // typedef unsigned int INT16U; typedef unsigned char INT8U; sbit sInterruptEn=IE^4; sbit allInterruptEn=IE^7; // void main(void) { INT8U a; initScom(); a='w'; while(1) { SBUF=a; while(TI==0); //TI=0; dms(); }
} //********************* void sInterruptService(void) interrupt 4 using 2 { //************* if(TI==1) { sInterruptEn=0;//关 TI=0; } sInterruptEn=1;//开 return; } //**************initScom()******* void initScom(void) { //init serial transfer and receive interrupt IE=0x0; //关掉所有中断。 IP=0x10; //设置串行中断级别最高。 // SCON = 0X50; //串行口控制寄存器,1方式 ,允许接收 PCON = 0x80; //设置TMOD为1 电源管理寄存器 波特率加倍 TMOD=0x20; //设置定时器1产生4800 baud TL1 = TH1 =0xf3; //f3 为4800;波特率为4800时设的数有误差。 TR1 = 1; //启动定时器1 // sInterruptEn=1; //开串行中断 allInterruptEn=1; //开总中断。 } //***********dms()********** void dms(void) { INT16U i,j; for(i=0;i<200;i++) { for(j=0;j<150;j++) ; } } ////************************end******************** 在利用串口调试精灵调试 1),开了51的串行中断,居然只能发送一个字母. 2)关51的串行中断,可以发送很多字母.
问题:开了51的串行中断,在中断中使TI=0并且主程序为死循环,为什么只能发一个字母? 请教大家!
|