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裡有很多地址,我們在燒程式的時候能否自己設定地址...