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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2638|回復: 11
收起左側(cè)

51單片機定時器中斷和外部中斷同時使用為什么一定要設(shè)置優(yōu)先級

[復制鏈接]
ID:1091094 發(fā)表于 2023-9-11 08:59 | 顯示全部樓層 |閱讀模式
我在使用普中51單片機開發(fā)板,設(shè)置了定時器10us執(zhí)行一次PWM,還有外部中斷0的程序,不設(shè)置外部中斷為高優(yōu)先級的時候,
程序是按鍵沒有反應的。 加上優(yōu)先級就可以了按鍵控制三個擋位了,為什么?
不應該是即使沒有優(yōu)先級也可以執(zhí)行外部中斷的嗎?

14、按鍵換擋模仿產(chǎn)品控制板.rar

32.03 KB, 下載次數(shù): 8

程序文件

普中-2&普中-3&普中-4開發(fā)板原理圖.pdf

151.73 KB, 下載次數(shù): 4

原理圖

回復

使用道具 舉報

ID:404160 發(fā)表于 2023-9-11 21:22 | 顯示全部樓層
由于處理中斷的運算器只有一個,同一時間只能運行一段程序,當中斷同時到達時,你說先處理(運算)哪個中斷程序?所有需要優(yōu)先級。由于你PWM中斷“太快”,搶占了按鍵中斷需求,所以,一直來不及響應按鍵

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:213173 發(fā)表于 2023-9-12 11:48 | 顯示全部樓層
你這不是中斷優(yōu)先級的問題,是程序結(jié)構(gòu)的問題,給你改了,你試試。
  1. #include <reg52.h>

  2. #define u8 unsigned char
  3. #define u16 unsigned int

  4. sbit PWM  = P2^1;
  5. sbit KEY4 = P3^3;
  6. sbit led1 = P2^5;
  7. sbit led2 = P2^6;
  8. sbit led3 = P2^7;


  9. u8 mode = 0;
  10. u8 gduty;

  11. void InitTimer0(void)
  12. {
  13.         TMOD = 0x01;
  14.         TH0 = 0xFC;
  15.         TL0 = 0x18;
  16.         EA = 1;
  17.         ET0 = 1;
  18.         TR0 = 1;
  19. }

  20. void Delay_ms(u16 t)
  21. {
  22.         u16 i,j;
  23.         for(i=t;i>0;i--)
  24.                 for(j=110;j>0;j--);
  25. }


  26. void main()
  27. {
  28.         InitTimer0();
  29.         while(1)
  30.         {       
  31.                 if(!KEY4)
  32.                 {
  33.                         Delay_ms(10);
  34.                         if(!KEY4)
  35.                         {
  36.                                 mode = ++mode%4;
  37.                                 switch(mode)
  38.                                 {
  39.                                         case 0: led1=1;led2=1;led3=1;gduty=0;break;//占空比%100
  40.                                         case 1: led1=0;led2=0;led3=0;gduty=2;break;//占空比%50
  41.                                         case 2: led1=0;led2=0;led3=1;gduty=3;break;//占空比%25
  42.                                         case 3: led1=0;led2=1;led3=1;gduty=4;break;//占空比%0
  43.                                 }
  44.                                 while(!KEY4);
  45.                         }
  46.                 }
  47.         }
  48. }

  49. void Timer0Interrupt(void) interrupt 1
  50. {
  51.         static u8 time = 0;
  52.         TH0 = 0xFC;
  53.         TL0 = 0x18;
  54.         time++;
  55.         if(time >= 4)
  56.                 time = 0;
  57.         if(time >= gduty)  //占空比
  58.                 PWM = 0;
  59.         else
  60.                 PWM = 1;
  61. }       
復制代碼
回復

使用道具 舉報

ID:1034262 發(fā)表于 2023-9-12 15:18 | 顯示全部樓層
合理安排中斷程序,一般不需要用優(yōu)先級(更沒聽說一定要設(shè)置優(yōu)先級),有些項目程序用了10來個中斷,沒那么多中斷優(yōu)先級。
回復

使用道具 舉報

ID:1091094 發(fā)表于 2023-9-14 22:15 | 顯示全部樓層
飛云居士 發(fā)表于 2023-9-11 21:22
由于處理中斷的運算器只有一個,同一時間只能運行一段程序,當中斷同時到達時,你說先處理(運算)哪個中斷 ...

但是不應該是有中斷申請,應該執(zhí)行完正在執(zhí)行的中斷程序后,再回過來執(zhí)行外部中斷嗎?
我試過了,確實PWM太快了,把定時器中斷的時間調(diào)長一點就可以了
回復

使用道具 舉報

ID:1091094 發(fā)表于 2023-9-14 22:24 | 顯示全部樓層
wulin 發(fā)表于 2023-9-12 11:48
你這不是中斷優(yōu)先級的問題,是程序結(jié)構(gòu)的問題,給你改了,你試試。

你這個是沒有用外部中斷了,直接while(1)循環(huán)里面,檢測按鍵。
我是想看看用外部中斷和定時器中斷來實現(xiàn)會不會有什么問題。
確實是定時器中斷不能太快,要不然外部中斷就沒反應了,但是不知道具體原因。
回復

使用道具 舉報

ID:647261 發(fā)表于 2023-9-15 09:04 | 顯示全部樓層
3038838599 發(fā)表于 2023-9-14 22:24
你這個是沒有用外部中斷了,直接while(1)循環(huán)里面,檢測按鍵。
我是想看看用外部中斷和定時器中斷來實現(xiàn) ...

我記得好像回過這個貼子,詳細說明了原因,但是不知道是不是給論壇吃掉了貼了。。。。。。
回復

使用道具 舉報

ID:647261 發(fā)表于 2023-9-15 09:06 | 顯示全部樓層
3038838599 發(fā)表于 2023-9-14 22:24
你這個是沒有用外部中斷了,直接while(1)循環(huán)里面,檢測按鍵。
我是想看看用外部中斷和定時器中斷來實現(xiàn) ...

查看了回帖記錄,原來是你發(fā)了兩個一樣的帖子,我把內(nèi)容復制過來了


51單片機的中斷規(guī)則:
不設(shè)置優(yōu)先級時,中斷源都是一個優(yōu)先級,規(guī)則如下:
1.哪個中斷先到,就先執(zhí)行哪個中斷。
2.中斷執(zhí)行過程中,不能被其他中斷打斷。
3.多個中斷同時到來時,按查詢號順序執(zhí)行。
查詢號順序:外部中斷0(P3.2腳)-> 定時器 0 -> 外部中斷1(P3.3腳) -> 定時器 1 -> 串口

假如按鍵是P3.2腳,定時器10us
要實現(xiàn)按鍵功能,就必須在10us的間隙中,完成按鍵下降沿的觸發(fā)動作,才能進入外部中斷
假如按鍵是P3.3腳,定時器是T0的話,難度就更大了,這個觸發(fā)動作還不能剛好和10us時間同時產(chǎn)生

當設(shè)置了優(yōu)先級后,中斷就分成了高優(yōu)先級和低優(yōu)先級兩種了,這時,規(guī)則多了一樣:
低優(yōu)先級的中斷執(zhí)行過程中,高優(yōu)先級中斷產(chǎn)生,可以打斷低優(yōu)先級中斷,實現(xiàn)中斷嵌套。
回復

使用道具 舉報

ID:1092335 發(fā)表于 2023-9-20 16:56 | 顯示全部樓層
因為CPU只能同時處理一個中斷
回復

使用道具 舉報

ID:811253 發(fā)表于 2023-9-21 23:28 | 顯示全部樓層
外部中斷0應該是默認優(yōu)先級最高的吧
回復

使用道具 舉報

ID:647261 發(fā)表于 2023-9-22 09:11 | 顯示全部樓層
青草麥田 發(fā)表于 2023-9-21 23:28
外部中斷0應該是默認優(yōu)先級最高的吧

不是的,默認是同一優(yōu)先級,只是查詢順序最高
意思是,幾個中斷在同一時間觸發(fā),外部中斷0先進中斷
如果其他中斷剛好比外部中斷快那么一丁點,外部中斷0就只能等其他中斷完成后,再看中斷觸發(fā)還在不在,不在的話也是不能進的
回復

使用道具 舉報

ID:1097455 發(fā)表于 2023-10-27 13:48 | 顯示全部樓層
程序里肯定有進程很高的程序模塊是不能讓其它外設(shè)影響的
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品欧美一区二区三区不卡 | 日本不卡一区二区三区在线观看 | 成人国产综合 | 国产午夜精品一区二区三区四区 | av激情影院 | 国产成人91| 日韩毛片免费视频 | 日韩午夜在线播放 | 久久久久久美女 | 精品亚洲国产成av人片传媒 | 欧美自拍视频 | 视频一区二区在线观看 | 天堂亚洲网 | 日韩中文在线视频 | 欧美日韩一二三区 | 欧美影院 | 午夜免费精品视频 | 日日操夜夜操天天操 | 久久美女网 | 欧美视频1 | 精品久久亚洲 | 午夜三级在线观看 | 在线观看国产精品一区二区 | 国产精品精品视频一区二区三区 | 精品一二区| 欧美日本一区二区 | 久久久久久久久蜜桃 | 欧美日韩一区二区电影 | 国产美女一区二区 | 97综合在线 | 国产色在线 | 久久人人爽人人爽人人片av免费 | 亚洲日本中文 | 精品色| 国产成人综合亚洲欧美94在线 | 波多野结衣在线观看一区二区三区 | 亚洲精品二区 | 国产美女精品视频 | 国产黄色在线 | 亚洲欧美一区二区三区视频 | 中文字幕av色 |