簡單的C51微控制器組合語言程式分析

時間 2021-08-14 23:03:29

1樓:羅門大佬

樓上說的有理,但是即使刪去ljmp main也不行,因為在中斷時它把ea關了,也就不會中斷了。

其實不用關ea,你把clr ea也刪去就可以執行。只要你的手沒有中斷服務程式快就會有中斷。每次按都有。你試一下在開發板上執行,應該可以的。

原因是當你外中斷置低電平時,就會進入中斷程式。執行完就會自動返回主程式

而你的主程式是sjmp $死迴圈,就是用來等待中斷的。所以不用重新中斷初始化。

2樓:

你的程式確實有問題。

當你第一次執行中段服務的時候,雖然關閉了總中斷,但是在中斷服務程式沒有返回前(遇到reti)就也到了ljmp main,結果就造成你的中斷函式迴圈巢狀(即在函式stock堆疊中,一直會把當前的中斷地址往裡面堆疊push,而不會出棧pop),,,,這樣如此迴圈下去,會導致stock溢位,而發生不可預計的結果。

這樣的行為一般是不允許的(除非你就是想要這樣)你可以把你程式中的ljmp main這行**去掉,除錯結果應該就會正常

3樓:包強我愛你

把你程式中的ljmp main去掉肯定行

基於微控制器80c51使用組合語言編寫一個簡單程式(最好使用keil軟體)

4樓:匿名使用者

組合語言適用於單位元組程式設計,你那題太麻煩了。用c語言就方便多了。

5樓:做而論道

採納答案是答非所問。

c語言,呼叫匯編,才是高層次。

不用匯編,偏愛用c,明顯是瘸腿。

51微控制器組合語言學習軟體,51微控制器用組合語言需要什麼軟體?

我想告訴你,keil可以編輯彙編的檔案.你建好一個project後,在source group 1上點右鍵,選add files to group source group 1 這時,就可以選中你的asm檔案 要選asm檔案得先把對話方塊中的檔案類弄選為 雙擊就可以新增到source group 1...

c51微控制器中斷程式中的interrupt1,2,3是由什麼決定的

衛戍邊疆 中斷是由於某種事件的發生 硬體或者軟體的 計算機暫停執行當前的程式,轉而執行另一程式,以處理髮生的事件,處理完畢後又返回原程式繼續作業的過程。中斷是處理器一種工作狀態的描述。1 int0 外部中斷0,由p3.2埠引入,低電平或下降沿引起。預設優先順序最高。2 int1 外部中斷1,由p3....

C51微控制器程式設計

include define uchar unsigned char define uint unsigned intsbit high key p1 0 sbit low key p1 1 sbit led p2 0 sbit speak p2 1 uint count void delay ui...