本帖最后由 Rayne_Hwang 于 2014-7-3 15:26 编辑
【型号】:STC89C51RC
【编译环境】:Keil uv4
【问题】:主程序就一个任务,不停地向串口发送字符a。主要是为了测试串口中断有没有问题。结果现在如果在主程序开中断,每次复位之后输出2个a就死机了。关闭ES之后一切正常.
麻烦各位帮我看看串口中断有没有问题。
- void UART_Init()
- {
- TMOD = 0x20; //定时器T1为8位自动重载模式, 用于产生波特率
- SCON = 0x50; //串口工作方式1,允许接收。相当于这三句:SM0=0; SM1=1; REN=1;
- TH1 = 0xfd;
- TL1 = 0xfd; //设定T1初值
- PCON = 0x00; //波特率不倍增
- EA = 1; //使能总中断
- ES = 1; //使能串口中断
- TR1 = 1; //启动定时器T1
- }
- void UART_PutByte(UINT8 c)
- {
- SBUF = c;
- while(!TI); // 等待数据发送结束(TI==1代表发送结束)
- TI = 0; // 清除发送结束标志
- }
- void UART_ISR(void) interrupt 4
- {
- if(RI) //对于接收中断
- {
- RI = 0; //清中断
- RxData = SBUF; //将本次数据存入RxData
- if(RxPtr<RX_BUF_LEN) RxBuf[RxPtr++] = SBUF; //将本次数据追加存入RxBuf[]
- }
- else //对于发送中断,不作处理
- {
- TI = 0;
- }
- }
- //变量定义:
-
- static xdata volatile unsigned char RxData = 0;
- static xdata volatile unsigned char RxBuf[RX_BUFF_LEN] = {0};
- Static xdata volatile unsigned char RxPtr = 0;
- //主程序
- void main()
- {
- UART_Init();
- while(1)
- {
- UART_PutByte('a');
- }
- }
复制代码
一周热门 更多>