论坛» 嵌入式开发» MCU

51单片机启用printf函数后,如何屏蔽串口中断?

工程师
2021-11-01 21:26 1楼

51结构的单片机,型号MSC1211,开发工具为mdk530。使用printf函数向串口0传数据。同时,程序中还需要通过串口0接收上位机下发的数据,所以打开了串口0中断。遇到问题如下:
为了使用printf,串口0初始化时,运行了语句TI=1;
因为打开了串口0中断,所以TI=1使得程序触发并响应串口0中断。在中断响应中,如果运行TI=0,则printf会失效;如果不运行TI=0,则程序会反复触发并响应串口0中断,从而耗费大量的CPU时间。
我想使用printf函数,但是不希望反复触发串口0中断。正确的做法应该是怎样的呢?

望指教,谢谢!

工程师
2021-11-01 21:42 2楼

照理,应该是让你不要用printf。但是看你那么执著。
那么,printf 之前 ES = 0; printf 之后 ES = 1;

工程师
2021-11-01 21:46 3楼

bit bTI=1;//增加一标志位。
在中断响应中
if(TI){TI=0;bTI=1;}
修改putchar()函数,把TI替换成bTI。


char putchar (char c) {

while(bTI==0) {bTI=0;SBUF = c;}

return c;

}


专家
2021-11-01 21:48 4楼

看看

工程师
2021-11-01 21:52 5楼

楼主既然用了串口中断,他肯定有同时收发多个字符的需求,你这种解决办法不能满足。
假如单片机有足够的资源,可参考keil帮助手册的方法,发送和接收都是非阻塞的。


院士
2021-11-01 22:27 6楼

谢谢朋友们的回复指导。

专家
2021-11-02 00:02 7楼

感谢楼主的分享,很实用了。

专家
2021-11-02 00:16 8楼

感谢分享

院士
2021-11-02 05:43 9楼

同意楼上说的方法,很实用。

专家
2021-11-02 08:25 10楼

不错,是这样的

共20条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]