这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 51单片机启用printf函数后,如何屏蔽串口中断?

共20条 1/2 1 2 跳转至

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

工程师
2021-11-01 21:26:59     打赏

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

望指教,谢谢!




关键词: printf     串口     中断    

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

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


工程师
2021-11-01 21:46:00     打赏
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:54     打赏
4楼

看看 


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

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



院士
2021-11-01 22:27:48     打赏
6楼

谢谢朋友们的回复指导。


专家
2021-11-02 00:02:45     打赏
7楼

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


专家
2021-11-02 00:16:44     打赏
8楼

感谢分享


院士
2021-11-02 05:43:57     打赏
9楼

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


专家
2021-11-02 08:25:39     打赏
10楼

不错,是这样的


共20条 1/2 1 2 跳转至

回复

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