向各位请教一个51串口通信的问题

2020-01-23 14:33发布

本帖最后由 Rayne_Hwang 于 2014-7-3 15:26 编辑

【型号】:STC89C51RC
【编译环境】:Keil uv4
【问题】:主程序就一个任务,不停地向串口发送字符a。主要是为了测试串口中断有没有问题。结果现在如果在主程序开中断,每次复位之后输出2个a就死机了。关闭ES之后一切正常.
                麻烦各位帮我看看串口中断有没有问题。
  1. void    UART_Init()
  2. {   
  3.     TMOD = 0x20;         //定时器T1为8位自动重载模式, 用于产生波特率
  4.     SCON = 0x50;         //串口工作方式1,允许接收。相当于这三句:SM0=0; SM1=1; REN=1;
  5.     TH1 = 0xfd;
  6.     TL1 =  0xfd;         //设定T1初值
  7.     PCON = 0x00;         //波特率不倍增
  8.     EA = 1;         //使能总中断
  9.     ES = 1;         //使能串口中断
  10.     TR1 = 1;         //启动定时器T1
  11. }

  12. void UART_PutByte(UINT8 c)
  13. {
  14.     SBUF = c;
  15.     while(!TI);         // 等待数据发送结束(TI==1代表发送结束)
  16.     TI = 0;         // 清除发送结束标志
  17. }
  18. void UART_ISR(void) interrupt 4
  19. {
  20.      if(RI)         //对于接收中断
  21.      {   
  22.          RI = 0;         //清中断
  23.          RxData = SBUF;         //将本次数据存入RxData
  24.          if(RxPtr<RX_BUF_LEN) RxBuf[RxPtr++] = SBUF;        //将本次数据追加存入RxBuf[]
  25.       }
  26. else         //对于发送中断,不作处理
  27.      {
  28.          TI = 0;
  29.      }
  30. }

  31. //变量定义:
  32.   
  33. static xdata volatile unsigned char RxData = 0;
  34. static xdata volatile unsigned char RxBuf[RX_BUFF_LEN] = {0};
  35. Static xdata volatile unsigned char RxPtr = 0;
  36. //主程序
  37. void main()
  38. {
  39.      UART_Init();
  40.      while(1)
  41.      {   
  42.           UART_PutByte('a');
  43.      }   
  44. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。