久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2907|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩欧美二区 | 午夜av成人 | 国产丝袜一区二区三区免费视频 | 神马九九| 亚洲首页| av电影一区 | 欧美一区二区三区在线播放 | 美女拍拍拍网站 | 一级黄色片网站 | 亚洲不卡视频 | 日韩精品久久一区二区三区 | 日韩在线视频免费观看 | 日日干日日 | 亚洲国产成人精品久久久国产成人一区 | 日韩一区二区在线视频 | 亚洲美女网站 | 欧美综合精品 | 免费成人在线网站 | 皇色视频在线 | 日韩在线中文 | 国产福利91精品一区二区三区 | 青青伊人久久 | 国产精品成人一区二区三区 | 日韩一区二 | 在线观看av不卡 | 日韩综合一区 | 一级高清免费毛片 | 成人亚洲视频 | 不用播放器看的av | 日韩成人性视频 | 91视频播放| 波多野结衣一区二区三区 | 国产成人在线视频播放 | 国产高清免费视频 | av免费网址 | 欧美久久视频 | 久久久久无码国产精品一区 | 国产精品日韩欧美一区二区三区 | 偷拍亚洲色图 | 国产激情偷乱视频一区二区三区 | 精品国产精品 |