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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3144|回復: 12
收起左側

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

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


回復

使用道具 舉報

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;
}
回復

使用道具 舉報

ID:887371 發表于 2021-10-7 10:20 | 顯示全部樓層
188610329 發表于 2021-10-7 00:31
照理,應該是讓你不要用printf。但是看你那么執著。
那么,printf 之前 ES = 0; printf 之后 ES = 1;

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

回復

使用道具 舉報

ID:970163 發表于 2021-10-7 10:44 來自觸屏版 | 顯示全部樓層
datouyuan 發表于 2021-10-7 09:29
bit bTI=1;//增加一標志位。
在中斷響應中
if(TI){TI=0;bTI=1;}

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

使用道具 舉報

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

使用道具 舉報

ID:887371 發表于 2021-10-8 09:13 | 顯示全部樓層
TLHZP 發表于 2021-10-7 10:44
謝謝回復!
putchar函數是在哪個文件里面定義的?

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

使用道具 舉報

ID:887371 發表于 2021-10-8 09:29 | 顯示全部樓層
npn 發表于 2021-10-7 10:46
如果要屏蔽所有中斷,你可以這樣寫:

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

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

使用道具 舉報

ID:514901 發表于 2021-10-8 10:45 | 顯示全部樓層
之前也遇到過你這個問題,后來通過重定義putchar函數解決了
回復

使用道具 舉報

ID:970163 發表于 2021-10-31 12:51 | 顯示全部樓層
在各位的熱心回復下,問題圓滿解決了,感謝!
回復

使用道具 舉報

ID:964308 發表于 2021-11-1 16:17 來自觸屏版 | 顯示全部樓層
EA是總這段
回復

使用道具 舉報

ID:964308 發表于 2021-11-1 16:17 來自觸屏版 | 顯示全部樓層
EA是總中斷,EA=0的話不會有任何中斷
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美a级成人淫片免费看 | caoporn免费在线视频 | 亚州精品成人 | 手机av网| 欧美黄色网 | 午夜视频免费在线观看 | 一级网站 | 黄色a视频 | av高清毛片 | 国产精品免费一区二区 | 伊伊综合网 | 奇米影视77 | 亚洲精品9999 | 在线免费小视频 | 免费网站国产 | 日韩喷潮 | 99久久久无码国产精品 | 国产精品亚洲精品 | 亚洲午夜在线 | 婷婷狠狠| 欧美日韩在线一区二区 | 女同久久| 成人精品国产一区二区4080 | 爱高潮www亚洲精品 中文字幕免费视频 | 国产乱码精品一区二区三区中文 | 成年人在线观看视频 | 精品一区在线 | 农村真人裸体丰满少妇毛片 | 色精品视频 | 亚洲欧洲日本国产 | 国产999精品久久久久久绿帽 | 欧美精品久久久久 | 日本免费视频 | www,黄色,com | 国产欧美一区二区精品忘忧草 | 日韩欧美在线不卡 | 亚洲一区 | 国产欧美一区二区三区在线播放 | 91精品国产一区二区 | 色资源在线| 成人在线a |