欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3426|回復: 12
打印 上一主題 下一主題
收起左側

51單片機中使用printf后,怎么屏蔽中斷?

[復制鏈接]
跳轉到指定樓層
樓主
51結構的單片機,型號MSC1211,開發工具為mdk530。使用printf函數向串口0傳數據。同時,程序中還需要通過串口0接收上位機下發的數據,所以打開了串口0中斷。遇到問題如下:
為了使用printf,串口0初始化時,運行了語句TI=1;
因為打開了串口0中斷,所以TI=1使得程序觸發并響應串口0中斷。在中斷響應中,如果運行TI=0,則printf會失效;如果不運行TI=0,則程序會反復觸發并響應串口0中斷,從而耗費大量的CPU時間。
我想使用printf函數,但是不希望反復觸發串口0中斷。正確的做法應該是怎樣的呢?望指教,謝謝!


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2021-10-7 00:31 | 只看該作者
照理,應該是讓你不要用printf。但是看你那么執著。
那么,printf 之前 ES = 0; printf 之后 ES = 1;
回復

使用道具 舉報

板凳
ID:887371 發表于 2021-10-7 09:29 | 只看該作者
bit bTI=1;//增加一標志位。
在中斷響應中
if(TI){TI=0;bTI=1;}
修改putchar()函數,把TI替換成bTI。
char putchar (char c) {
while(bTI==0) {bTI=0;SBUF = c;}
}
回復

使用道具 舉報

地板
ID:887371 發表于 2021-10-7 09:50 | 只看該作者
putchar()函數忘記返回值了。

char putchar (char c) {
while(bTI==0) {bTI=0;SBUF = c;}
return c;
}
回復

使用道具 舉報

5#
ID:887371 發表于 2021-10-7 10:20 | 只看該作者
188610329 發表于 2021-10-7 00:31
照理,應該是讓你不要用printf。但是看你那么執著。
那么,printf 之前 ES = 0; printf 之后 ES = 1;

樓主既然用了串口中斷,他肯定有同時收發多個字符的需求,你這種解決辦法不能滿足。
假如單片機有足夠的資源,可參考keil幫助手冊的方法,發送和接收都是非阻塞的。

回復

使用道具 舉報

6#
ID:970163 發表于 2021-10-7 10:44 來自觸屏版 | 只看該作者
datouyuan 發表于 2021-10-7 09:29
bit bTI=1;//增加一標志位。
在中斷響應中
if(TI){TI=0;bTI=1;}

謝謝回復!
putchar函數是在哪個文件里面定義的?
回復

使用道具 舉報

7#
ID:57657 發表于 2021-10-7 10:46 | 只看該作者
如果要屏蔽所有中斷,你可以這樣寫:
  1. _push_(IE);        //位于頭文件 intrins.h
  2. IE = 0;                //關閉所有中斷
  3. //此處添加你要的代碼
  4. _pop_(IE);
復制代碼
回復

使用道具 舉報

8#
ID:887371 發表于 2021-10-8 09:13 | 只看該作者
TLHZP 發表于 2021-10-7 10:44
謝謝回復!
putchar函數是在哪個文件里面定義的?

printf ()輸出到哪是由putchar函數決定的。
keil自帶的putchar函數是輸出到串口,你可以改成輸出到任何地方。
在你代碼中任何位置寫了putchar函數,就可以替換掉keil自帶的putchar函數。
回復

使用道具 舉報

9#
ID:887371 發表于 2021-10-8 09:29 | 只看該作者
npn 發表于 2021-10-7 10:46
如果要屏蔽所有中斷,你可以這樣寫:

關總中斷應該下列代碼
  1. EA=0;
  2. //此處添加你要的代碼
  3. EA=1;
復制代碼

所有MCU都有總中斷開關指令。我剛學習arm時在芯片手冊你找不到這指令時用過和你類似的方法,后來才知道這是內核指令,是由arm公司指定,和芯片公司無關。
回復

使用道具 舉報

10#
ID:514901 發表于 2021-10-8 10:45 | 只看該作者
之前也遇到過你這個問題,后來通過重定義putchar函數解決了
回復

使用道具 舉報

11#
ID:970163 發表于 2021-10-31 12:51 | 只看該作者
在各位的熱心回復下,問題圓滿解決了,感謝!
回復

使用道具 舉報

12#
ID:964308 發表于 2021-11-1 16:17 來自觸屏版 | 只看該作者
EA是總這段
回復

使用道具 舉報

13#
ID:964308 發表于 2021-11-1 16:17 來自觸屏版 | 只看該作者
EA是總中斷,EA=0的話不會有任何中斷
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表