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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2312|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)中斷的深入探索

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:825202 發(fā)表于 2023-10-24 17:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近在看關(guān)于中斷的相關(guān)基礎(chǔ)知識(shí)點(diǎn),想請(qǐng)教一下各位大神,關(guān)于中斷在應(yīng)用,原理上的一些相對(duì)深入一些的重點(diǎn)知識(shí)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:195496 發(fā)表于 2023-10-24 17:39 | 只看該作者
暫時(shí)中斷循環(huán)操作,執(zhí)行相應(yīng)的中斷請(qǐng)求,再返回大循環(huán)程序中
回復(fù)

使用道具 舉報(bào)

板凳
ID:883242 發(fā)表于 2023-10-24 17:51 | 只看該作者
用就行了,不需要探索,事實(shí)上你也探索不出來什么。
回復(fù)

使用道具 舉報(bào)

地板
ID:57657 發(fā)表于 2023-10-24 20:39 | 只看該作者
常用中斷有定時(shí)器中斷、外部中斷、串口中斷,還有硬件SPI中斷、ADC、LVD、I2C等中斷。
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2023-10-25 07:55 | 只看該作者
這是回復(fù)題主的代碼,目的是觀察各中斷及返回用的,可以借鑒理解中斷的作用,我實(shí)踐是不會(huì)這樣寫的.
  1. #include <REG52.H>
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. bit K1=0,K2=0;//標(biāo)記邏輯組合可以替代中斷優(yōu)先
  5. void Delay(unsigned int i)//延時(shí)函數(shù)                                       
  6. {      
  7.   unsigned int j;
  8.         for(;i>0;i--)               
  9.         for(j=0;j<125;j++)               
  10.         {;}//空函數(shù)                                                                       
  11. }
  12. void main()//主函數(shù)https://ask.csdn.net/questions/8011758
  13. {
  14.         unsigned char display [9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水燈顯示數(shù)據(jù)數(shù)組
  15.         unsigned char a;
  16.         EA=1;//總中斷允許
  17.         EX0=1;//允許外部中斷0中斷
  18.         EX1=1;//允許外部中斷1中斷
  19.         IT0=1;//選擇外部中斷0為跳沿觸發(fā)方式
  20.         IT1=1;//選擇外部中斷1為跳沿觸發(fā)方式
  21.         PX0=0;//外部中斷0為低優(yōu)先級(jí)
  22.         PX1=1;//外部中斷1為高優(yōu)先級(jí)  
  23.         for(;;)               
  24.         {     
  25.                 for(a=0;a<9;a++)               
  26.                 {                                               
  27.                         Delay(400);//延時(shí),切換會(huì)延時(shí)阻塞設(shè)定時(shí)間
  28.                         P1=display[a];//已定義的流水燈顯示數(shù)據(jù)送到P1口
  29.                 }
  30.         }
  31. }
  32. void int0_isr() interrupt 0      //刪除using 0否則無法返回主函數(shù)外中斷0的中斷服務(wù)函數(shù)
  33. {
  34.         unsigned char m=0;
  35.   for(m=0;m<10;m++)//標(biāo)號(hào)為偶數(shù)的LED和奇數(shù)LED交替閃爍10次
  36.   {
  37.     P1=0x55;//標(biāo)號(hào)為偶數(shù)的LED燈點(diǎn)亮
  38.     Delay(500);//延時(shí)
  39.         P1=0xaa;//標(biāo)號(hào)為奇數(shù)的LED燈點(diǎn)亮
  40.         Delay(500);//延時(shí)
  41.   }
  42. }
  43. void int1_isr() interrupt 2      //using 1外中斷1的中斷服務(wù)函數(shù),體現(xiàn)了中斷優(yōu)先和返回
  44. {
  45.     unsigned char n=0;
  46.   for(n=0;n<5;n++)//8位LED全亮全滅5次
  47.   {
  48.     P1=0;//8位LED全亮
  49.         Delay(500);//延時(shí)
  50.         P1=0xff;//8位LED全滅
  51.         Delay(500);//延時(shí)
  52.   }
  53. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

6#
ID:155507 發(fā)表于 2023-10-25 16:17 | 只看該作者
有免費(fèi)教學(xué)視頻

免費(fèi)教學(xué)視頻《STC USB型 真1T 8051 單片機(jī)原理及應(yīng)用-STC8H8K64U》

第十三集 中斷原理及工作機(jī)制一

第十四集 中斷原理及工作機(jī)制二
回復(fù)

使用道具 舉報(bào)

7#
ID:397054 發(fā)表于 2023-10-25 16:31 | 只看該作者
xianfajushi 發(fā)表于 2023-10-25 07:55
這是回復(fù)題主的代碼,目的是觀察各中斷及返回用的,可以借鑒理解中斷的作用,我實(shí)踐是不會(huì)這樣寫的.

【刪除using 0否則無法返回主函數(shù)外中斷0的中斷服務(wù)函數(shù)】
——實(shí)際上不必刪除,只要不使用0且不使用另外一個(gè)using號(hào)就行,即兩個(gè)中斷都不能using 0,且不能相同,原理是明了的,main肯定使用的是0區(qū),中斷函數(shù)再使用0區(qū)肯定破壞了現(xiàn)場(chǎng),返回是反回了,但現(xiàn)場(chǎng)變了。兩個(gè)中斷函數(shù)using號(hào)相同時(shí)只要不嵌套,運(yùn)行是正常的,一嵌套也不行,原理相同。所以u(píng)sing確實(shí)是不必要的,可以都刪除。
回復(fù)

使用道具 舉報(bào)

8#
ID:624769 發(fā)表于 2023-10-26 20:09 | 只看該作者
鵜鶘 發(fā)表于 2023-10-25 16:31
【刪除using 0否則無法返回主函數(shù)外中斷0的中斷服務(wù)函數(shù)】
——實(shí)際上不必刪除,只要不使用0且不使用另 ...

Main 函數(shù)不一定是 0 區(qū), 要看你Startup 如何設(shè)置。

using 號(hào)是可以相同的。
在C中 using 號(hào)相同 僅僅是降低了效率而已。
在A中 using 號(hào)相同 會(huì)考驗(yàn)?zāi)惚Wo(hù)現(xiàn)場(chǎng)的能力。
回復(fù)

使用道具 舉報(bào)

9#
ID:73992 發(fā)表于 2023-10-26 21:11 | 只看該作者
中斷的普通用法的確太過于平庸,在中斷程序中修改棧內(nèi)容,并且修改中斷返回地址是高級(jí)用法。我記得在《權(quán)威指南》這本書上說藝高人膽大的人會(huì)用這種方法。我想那種樂趣應(yīng)該是可以追求一下的。等手頭這個(gè)項(xiàng)目做完,我也要感受那種樂趣
回復(fù)

使用道具 舉報(bào)

10#
ID:397054 發(fā)表于 2023-10-27 22:02 | 只看該作者
188610329 發(fā)表于 2023-10-26 20:09
Main 函數(shù)不一定是 0 區(qū), 要看你Startup 如何設(shè)置。

using 號(hào)是可以相同的。

如果不設(shè)置呢?我上面不是說了【兩個(gè)中斷函數(shù)using號(hào)相同時(shí)只要不嵌套,運(yùn)行是正常的】,但發(fā)生了嵌套會(huì)怎樣?——基本上可以肯定不正常。
回復(fù)

使用道具 舉報(bào)

11#
ID:397054 發(fā)表于 2023-10-27 22:43 | 只看該作者
188610329 發(fā)表于 2023-10-26 20:09
Main 函數(shù)不一定是 0 區(qū), 要看你Startup 如何設(shè)置。

using 號(hào)是可以相同的。

“在A中 using 號(hào)相同 會(huì)考驗(yàn)?zāi)惚Wo(hù)現(xiàn)場(chǎng)的能力。”

——“A”是指的什么?,“C”指的是C語(yǔ)言吧,用C編程,兩個(gè)不同級(jí)別的中斷使用同一個(gè)using號(hào)多半不行,5樓程序就是個(gè)實(shí)例,中斷0用的是using 0,這肯定是和主函數(shù)沖突,所以“無法返回”,改成using 2或using 3完全就正常了。所謂的“無法返回”是表面現(xiàn)象,實(shí)際上返回了,因?yàn)楦緵]有理由不返回,只是返回后環(huán)境變了,CPU進(jìn)入半死機(jī)狀態(tài),看著像沒返回。

“在C中 using 號(hào)相同 僅僅是降低了效率而已。”
這句話怎么理解?“降低了效率”指的是什么?原理是什么?

using 號(hào)相同可能可以,這恐怕要看編譯程序了,keil是不行的,至少我用的這個(gè)版本不行,其他的也沒用過。
在keil環(huán)境中using 號(hào)相同只要懂得這個(gè)原理,符合一定的規(guī)則也可以,即:同優(yōu)先級(jí)的中斷可以使用相同的using號(hào),不同優(yōu)先級(jí)的中斷,只要能保證不發(fā)生中斷嵌套也沒問題——原理是很清楚的。
回復(fù)

使用道具 舉報(bào)

12#
ID:401564 發(fā)表于 2023-10-27 23:58 | 只看該作者
中斷:就是暫停當(dāng)前的事件,去處理中斷事件,處理完中斷事件,再回來執(zhí)行剛才正在執(zhí)行的"當(dāng)前事件"
你只要知道這個(gè)就可以了,其它的就在這個(gè)基礎(chǔ)之上出來的,會(huì)用就行,沒什么所謂的"探索"
很多東西都是要結(jié)合你所用的單片機(jī)的資源來搭配使用的
像STM32這種復(fù)雜的中斷系統(tǒng),你能折騰好幾天
但是,像有低端單片機(jī),它就一個(gè)中斷源,兩層硬件堆棧,有什么能探索的?
回復(fù)

使用道具 舉報(bào)

13#
ID:624769 發(fā)表于 2023-10-28 19:42 | 只看該作者
鵜鶘 發(fā)表于 2023-10-27 22:43
“在A中 using 號(hào)相同 會(huì)考驗(yàn)?zāi)惚Wo(hù)現(xiàn)場(chǎng)的能力。”

——“A”是指的什么?,“C”指的是C語(yǔ)言吧, ...

我前文中的 C指 C51, A指 A51
C51 編程時(shí),中斷函數(shù)后面跟的 using x 主要是用來分配 RS0~RS3 這4個(gè)通用寄存器組的。
如果你主程序 用的默認(rèn)RS0,  而中斷函數(shù) 用的 RS1 (USING 1指定),則編譯后,會(huì)直接利用 PSW = 0x08, 把寄存器組切換到 RS1 組,退出中斷時(shí),通過 POP PSW 來還原寄存器組,恢復(fù)部分現(xiàn)場(chǎng)。來實(shí)現(xiàn)高效率中斷。
而,如果你主程序用的 RS0, 中斷也使用 RS0 (USING 0), 那么,編譯時(shí),KEIL會(huì) 很聰明的 把通用寄存器組的 R0~R7  依次 PUSH 的堆棧里,確保可以返回時(shí)恢復(fù)現(xiàn)場(chǎng),當(dāng)然,這樣的操作會(huì)降低中斷的效率。
然后,到了不同優(yōu)先級(jí)的中斷了。由于KEIL無法判斷 嵌套中斷,因此,如果低優(yōu)先級(jí)中斷,和高優(yōu)先級(jí)中斷使用相同的寄存器組,的確會(huì)產(chǎn)生低優(yōu)先級(jí)中斷的現(xiàn)場(chǎng)被破壞的情況。如果自己在這方面沒有把握的的話,不建議使用 using 參數(shù),可以在 設(shè)置中 用 ONEREGBANK 來屏蔽代碼中的 Using發(fā)生作用。畢竟using 的最初設(shè)計(jì)的應(yīng)用場(chǎng)景是 基于A51的應(yīng)用場(chǎng)景。所以在C51中,還是有不少缺陷的。
回復(fù)

使用道具 舉報(bào)

14#
ID:883242 發(fā)表于 2023-10-29 02:49 | 只看該作者
匯編有兩種寫法,教科書里面講的是absolute location,這種寫法所有變量都是作者自己指定的絕對(duì)地址,using這個(gè)關(guān)鍵字毫無意義。另一種是relocatable,變量地址都是用ds這樣的關(guān)鍵字定義的,在匯編期間變量地址都不確定,只有連接期間才會(huì)確定,using這個(gè)關(guān)鍵字是讓linker回避已經(jīng)使用過的register bank用的,但是這種寫法沒見過中文書籍講解,只能查C51的幫助文件,講匯編的那個(gè)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产不卡一区在线观看 | 天天爽一爽| 午夜视频一区二区 | 国产婷婷| 国内精品久久久久久久 | 欧美激情国产日韩精品一区18 | 欧美色a v | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 天天操天天射综合 | 国产一级片在线观看视频 | 精品国产一区二区三区久久久四川 | 99视频在线播放 | 国产精品久久久久婷婷二区次 | 成人深夜小视频 | 免费美女网站 | 欧美日韩a| 国产丝袜一区二区三区免费视频 | 日日干日日色 | 精品日韩一区二区 | 成人精品免费视频 | 亚洲精品www久久久久久广东 | 国产高清美女一级a毛片久久w | 中国美女av | 黄色毛片网站在线观看 | 日韩欧美一区二区三区 | 国产综合av | 永久免费在线观看 | 国产精品久久久久aaaa九色 | 久久国产精品免费一区二区三区 | 99精品国产成人一区二区 | 日韩视频在线免费观看 | 欧美精品久久久 | 色欧美片视频在线观看 | 精品国模一区二区三区欧美 | 国产精品观看 | 午夜视频一区二区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 成人免费视频观看视频 | www.奇米| 亚洲欧美国产毛片在线 | 亚洲国产成人精品女人久久久 |