關於微控制器裡的SJMP知道的請進

2022-12-29 11:05:39 字數 3223 閱讀 8932

1樓:匿名使用者

sjmp $是在原地迴圈,一般都用在等待中斷到來,然後進入中斷處理程式。

處理完了,再繼續在原地迴圈。

比如你的手機現在不用了,估計也在這裡迴圈,你按下鍵,它就當是有中斷來了,就去處理,處理完了,它又開始迴圈等待你的操作了。

end是每個程式必須寫的指令,如果你的程式走到了這條指令就停下來了。

一般的程式是不會讓它走到這條指令的,因為走到了就結束了,不能去處理你的實時中斷了。

2樓:匿名使用者

程式中的end根本就不執行,

它只在對程式進行彙編時有效,

當你用電腦編完彙編程式時,

電腦要編譯一下,把你的彙編**轉換成16進位制機器碼,然後把這個機器碼檔案通過燒寫器燒進cpu裡。在進行**轉換時,當電腦只要一看到end,就停止轉換,無論它後面還有沒有彙編**,都會停止。

3樓:匿名使用者

51微控制器指令系統中,沒有停機指令,通常用短轉移命令sjmp $來實現動態停機的操作。

$為本條指令的首地址

程式中的end根本就不執行,

它只在對程式進行彙編時有效,

當你用電腦編完彙編程式時,

電腦要編譯一下,把你的彙編**轉換成16進位制機器碼,然後把這個機器碼檔案通過燒寫器燒進cpu裡。在進行**轉換時,當電腦只要一看到end,就停止轉換,無論它後面還有沒有彙編**,都會停止。

引用上面兩個答案,合併起來就是您想要的答案了。

微控制器中 為什麼要用sjmp $

4樓:匿名使用者

這個語句sjmp $ 只有在做測試實驗等的時候才用的(為的是不讓微控制器「跑飛」了),在工程裡面是沒用的。

5樓:做而論道

在需要死迴圈的時候,寫上:sjmp $,即可。

6樓:

微控制器執行到 sjmp $ 時就原地踏步,不再往下執行,也就是死迴圈。

一般主程式的最後一句就是sjmp $,然後往下就是子程式,包括中斷處理程式。

7樓:

sjmp $ 實際中是不會用的,實驗的時候為了好控制才搞的。

微控制器中 sjmp $ 什麼意思?

8樓:匿名使用者

微控制器 sjmp $表示重複執行這條指令。

void main()

{ p1=0x00;

while(1)

void delayms()

{ uchar i;

while(10)

for(i=0;i<120;i+ +);

p1=!p1;

2:void timer_init()

tmod=0x01;

th0=(65536-0)/256;

tl0=(65536-0)%256;

tr0=1;

在上面程式1中,0x00表示一種狀態,即表示微控制器p1口八位都是低電位0,而不是表示為等於零無意義。

在程式2中,初值賦為零,則表示整個定時為65.536ms,是該定時方式的最大值,而初值0則僅表示該值為零,沒有任何意義。

在微控制器學習中,數值的表示方法是學習中應引起注意的細節,若不注意,有時因何而錯,都分辨不清。

單片微控制器,它不是完成某一個邏輯功能的晶片,而是把一個計算機系統整合到一個晶片上,相當於一個微型的計算機。執行中也僅能處理數字訊號。

微控制器只能識別二進位制數,也就是高低電平1與0。但當數值太大時,用1和0來表示程式中的數值時顯得太繁鎖了,於是便用十六進位制來表示。這樣表示起來方便,通用,

為了讓微控制器按照我們的要求來工作,就必須對它賦予指令也就是編寫程式,在程式中同一個數值會因應用的位置不一樣,而理解含義就不一樣。

如下面程式1中用十六進位制表示的0x00和定時程式2賦初值時用0(0=0x00)表示的初值。它們在不同程式中所表示的意義也不一樣,理解起來也就不能用同一種思維方式去理解。

9樓:林楊楊楊楊

sjmp是微控制器的短跳轉指令,後面一般跟標號,例如:sjmp here,sjmp $等。sjmp $ 就是跳到此處,也就是原地踏步,讓程式停在此處。

10樓:

跳轉到自己所在在位置

原地踏步

微控制器中sjmp是什麼意思

11樓:匿名使用者

sjmp是微控制器的短跳轉指令,後面一般跟標號,例如:sjmp here,sjmp $等。

微控制器組合語言中sjmp $是什麼意思

12樓:

因為不迴圈那麼過陣微控制器會從執行到最後從頭來

因為pc的值不停的增加到最後變0000就是起始了所以要有個死迴圈讓pc不會被溢位而導致0000發生

13樓:做而論道

原地轉移,一般來說,就是宕機了。

如果中斷開放,滿足條件時,也可以轉入到中斷程式裡面去。

14樓:匿名使用者

原地踏步,用於等待中斷

15樓:那麼紅包

sjmp $意味著跳轉到該指令的開頭以開始執行,因此它變為迴圈執行,就地跳轉,通常用於等待中斷。但是本指令也不宜濫用。這是一條死迴圈指令,如果系統的中斷是開放的,那麼sjmp $指令實際上是在等待中斷,當有中斷申請後,cpu 轉至執行中斷服務程式。

中斷返回時,仍然返回到這條死迴圈指令,繼續等待中斷,而不是返回到該指令的下一條指令。這是因為執行sjmp $後,pc 仍指向這條指令,中斷的斷點就是 [3] 這條指令的首位元組地址。擴充套件資料1)在51中,與外部儲存器ram打交道的只可以是a累加器。

所有需要送入外部ram的資料必需要通過a送去,而所有要讀入的外部ram中的資料也必需通過a讀入。在此我們可以看出內外部ram的區別了,內部ram間可以直接進行資料的傳遞,而外部則不行,比如,要將外部ram中某一單元(設為0100h單元的資料)送入另一個單元(設為0200h單元),也必須先將0100h單元中的內容讀入a,然後再送到0200h單元中去。2)要讀或寫外部的ram,當然也必須要知道ram的地址,在後兩條指令中,地址是被直接放在dptr中的。

而前兩條指令,由於ri(即r0或r1)只是一個8位的暫存器,所以只提供低8位地址。因為有時擴充套件的外部ram的數量比較少,少於或等於256個,就只需要提供8位地址就夠了。3)使用時應當首先將要讀或寫的地址送入dptr或ri中,然後再用讀寫命令。

關於微控制器,關於微控制器的

對呀,這個問題確實不好解釋.不過我以mcs 51系列的微控制器為例為你解答吧 mov 就是內部儲存器間的傳送指令 例如 mov a ro movx 就是外部儲存器向內部傳送的指令 例如 movx a 2001h movc 就是程式儲存器間傳送指令 還有 add加法指令 dec減一指令 muc乘法指令...

關於微控制器中的jc指令,關於微控制器中的JC指令

閣下首先搞清楚cjne a,25,1的含義,它的含義有三點 1.當a等於25時,執行下一句 2.當a不等版於25時,跳轉到權ne1語句執行 3.要注意當a不等於25時,a必定大於25或者小於25,如果a小於25,則不僅要跳轉到ne1執行,還要給cy標誌位置一,如果a大於25,則僅僅要跳轉到ne1執行...

關於微控制器io口的高阻態問題,51微控制器的IO口怎麼設為高阻態

輸出沒有高阻態,輸入有,輸出是推輓 上拉,不要搞錯了 高阻態意味著從外部看,電阻很大,近於懸空 51微控制器的i o口怎麼設為高阻態 普通51微控制器的io口無法設定為高阻態。stc微控制器可以設定為高阻態,通過改變pnm0和pnm1的值來設定其狀態。當pnm1 pnm0 10時對應的io即為高祖態...