打印

关于51中串口发送中断的问题

[复制链接]
2455|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suphill|  楼主 | 2007-10-22 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
////************************程序********************
#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并且主程序为死循环,为什么只能发一个字母?
请教大家!

相关帖子

沙发
suphill|  楼主 | 2007-10-22 14:29 | 只看该作者

关于51中串口发送中断的问题

回去看了一下:错误在while(TI==0);
因为在中断中使TI==0,所以在此处为死循环.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

1

粉丝