微控制器程式的工作迴圈過程和迴圈語句while(1)的作用

2022-03-15 03:25:52 字數 3063 閱讀 7387

1樓:匿名使用者

這個while(1)迴圈並不能阻止程式的跑飛(應該用看門狗防止程式跑飛),不過這樣寫也是很正確的做法,就是讓程式一直在執行著(原地迴圈),這裡的while(1)並不是防止程式「跑飛」的,而是防止main()返回。

① 在嵌入式中main是不能返回的。不同的c語言實現的微控制器初始化**會有不同的表現,有的是在call _main後jmp,而有的是jmp 0,等等這些會導致不可預料的結果。

② 在我們寫的c語言後轉換成彙編,再觀察微控制器的**區,你會發現沒有寫程式的部分例如全1或者全0區域,程式執行到這裡,就會有可能造成意料不到的結果。若無while(1)迴圈,程式全部執行後,跳轉至程式起始處重新執行。

我用keil將去掉while(1)的程式編譯,編譯後的彙編**如下,注意c:0x0012行(ret後會從0開始執行)和c:0x001c行(執行結束後跳轉至main)這個方式是keil編譯器的跳轉方法,其他的可能會不同:

c:0x0000 020013 ljmp c:0013

10: void main (void){

11: p1=0x00;

c:0x0003 e4 clr a

c:0x0004 f590 mov p1(0x90),a

12: p20=0;

c:0x0006 c2a0 clr p20(0xa0.0)

13: p21=0;

c:0x0008 c2a1 clr p21(0xa0.1)

14: cs88=0;

15:c:0x000a c2a2 clr cs88(0xa0.2)

16: p1 = 0xff;

17:18:

c:0x000c 7590ff mov p1(0x90),#0xff

19: p1 = 0xfe;

20:21:

22: // while (1)

c:0x000f 7590fe mov p1(0x90),#0xfe

23: {

c:0x0012 22 ret

c:0x0013 787f mov r0,#0x7f

c:0x0015 e4 clr a

c:0x0016 f6 mov @r0,a

c:0x0017 d8fd djnz r0,c:0016

c:0x0019 758107 mov sp(0x81),#0x07

c:0x001c 020003 ljmp main(c:0003)

2樓:匿名使用者

迴圈是保證微控制器一直處於工作狀態,在有訊號觸發的時候,能執行相應的動作。

3樓:

while(1){}

是為了讓程式停在這兒 防止程式跑偏

去掉while (1)後便一直重複執行void main()中的語句

利用mcs51微控制器p1口控制8只發光二極體迴圈點亮,採用定時器t0,使之工作在方式1中斷實現2秒時間間隔程式設計/

4樓:匿名使用者

unsigned char a,count;

void main()

}void timer0() interrupt 1}

5樓:做而論道

中斷方式:

org 0000h

jmp main

org 000bh

jmp t0_int

main:

mov tmod, #01h

mov th0, #high(65536-62500)mov tl0, #low (65536-62500)setb tr0

mov a, #7fh

mov p0, a

m_loop:

sjmp m_loop

;--------------------------------t0_int:

mov th0, #high(65536-62500)mov tl0, #low (65536-62500)djnz r7, t0_end

mov r7, #32

rr a

mov p0, a

t0_end:

reti

;--------------------------------end;*************************=查詢方式,最簡單:

org 0000h

mov tmod, #01h

setb tr0

mov a, #7fh

m_loop:

mov p0, a

mov r7, #32

wait:

mov th0, #high(65536-62500)mov tl0, #low (65536-62500)jnb tf0, $

clr tf0

djnz r7, wait

rr a

sjmp m_loopend

求51微控制器c程式:按一下k1繼電器吸合30秒鬆開10分鐘不停的迴圈,按一下k2停止工作

6樓:美麗善良的孩子

它普遍應用於電力系統中的變壓器和母線的繼電保護中,簡單的說就是採用比較被保護

裝置兩端電流,正常時,兩端電流一進一出相互抵消,內部發生它普遍應用於電力系統中的變壓器和母線的繼電保護中,簡單的說就是採用比較被保護

裝置兩端電流,正常時,兩端電流一進一出相互抵消,內部發生短路等故障時,同時流入內部

,啟動該繼電器,出口使開關跳閘起到保護變壓器等裝置的作用短路等故障時,同時流入內部,啟動該繼電器,出口使開關跳閘起到保護變壓器等裝置的作用

微控制器程式的問題

keil 是可以計算 單步執行時,左邊的視窗上出現跑到這個語句時所需要的時間,你可以計算出兩個語句之間的時差,或者n個語句之間的時差。而且他算出來的時差是根據你所選的器件的週期來算出的,我覺得這個比較準確 因為c語言中一條語句大約2us,所以大約延時為 250 2 z,即0.5z ms 想實現精確延...

微控制器查表程式設計的思路,微控制器查表程式編寫 急!

a 秒十位指標 mov dptr,tab 資料表頭地址送dptrmovc a,a dptr 讀取資料表中相應的資料 秒十位 clr p1.0 p1.0 清零 秒十位標誌位 mov p0,a 顯示妙計數的十位 秒十位由p0口輸出 lcall delay 調延時子程式 setb p1.0 p1.0 置1...

關於計算機和微控制器程式執行過程的幾個問題

計算機或微控制器之所以能執行一些程式,是因為我們認為的給它的儲存器寫入程式。這個就是錯誤的。應該說是他們可以從儲存器裡將程式讀入記憶體。或者運算器中。計算機如何讀取儲存器的一條程式並開始執行的呢。這個要是每一步都說可以寫3部以上的書。2flashrom裡有很多地址,我們在燒程式的時候能否自己設定地址...