單片機編程從簡單程序開始,通俗易懂才能輕鬆入門,電工電子基礎

一:編程任務和思路

我們來做一個讓燈不斷閃爍的簡單程序。怎樣才能讓燈不斷地閃爍呢?要燈亮一段時間,再滅一段時間,也就是說要P1口不斷地輸出高和低電平。

編程思路:

在執行完SETB P1後,延時一段時間(幾秒或零點幾秒)再執行第二條指令,就可以分辨出燈曾滅過了。執行完第二條指令後,讓計算機再去執行第一條指令,不斷地在原地兜圈,我們稱之為"循環",這樣就可以完成任務了。

二:程序編寫

主程序

LOOP: SETB P1 ;(1)

LCALL DELAY ;(2)

CLR P1 ;(3)

LCALL DELAY ;(4)

AJMP LOOP ;(5)

子程序

DELAY: MOV R7,#250 ;(6)

D1: MOV R6,#250 ;(7)

D2: DJNZ R6,D2 ;(8)

DJNZ R7,D1 ;(9)

RET ;(10)

END ;(11)

單片機編程從簡單程序開始,通俗易懂才能輕鬆入門,電工電子基礎

單片機閃燈電路圖

三:程序分析說明

1:第一條是讓燈滅,第二條是延時,第三條是讓燈亮,第四條和第二條一模一樣,也是延時,第五條應當是轉去執行第一條指令。

2:再看第五條,LJMP是一條指令,意思是轉移,往什麼地方轉移呢?後面跟的是LOOP,看一下,什麼地方還有LOOP,對了,在第一條指令的前面有一個LOOP,所以很直觀地,我們可以認識到,它要轉到第一條指令處。這個第一條指令前面的LOOP被稱之為標號,它的用途就是給這一行起一個名字,便於使用。是否一定要給它起名叫LOOP呢?當然不是,起什麼名字,完全由編程序的人決定,可以稱它為A,X等等,當然,這時,第五條指令LJMP後面的名字也得跟著改了。

3:第二條和第四條指令的用途是延時,它是怎樣實現的呢?

指令的形式是LCALL,這條指令稱為調用子程序指令,看一下指令後面跟的是什麼,DELAY,找一下DELAY,在第六條指令的前面,顯然,這也是一個標號。這條指令的作用是這樣的:當執行LCALL指令時,程序就轉到LCALL後面的標號所標定的程序處執行,如果在執行指令的過程中遇到RET指令,則程序就返回到LCALL指令的下面的一條指令繼續執行,從第六行開始的指令中,可以看到確實有RET指令。

在執行第二條指令後,將轉去執行第6條指令,而在執行完6,7,8,9條指令後將遇到第10條令:RET,執行該條指令後,程序將回來執行第三條指令,即將P10清零,使燈亮,然後又是第四條指令,執行第四條指令就是轉去執行第6,7,8,9,10條指令,然後回來執行第5條指令,第5條指令就是讓程序回到第1條開始執行,如此週而復始,燈就在不斷地亮、滅了。

4:在標號DELAY標誌的這一行到RET這一行中的所有程序,這是一段延時程序,大概延時零點幾秒,至於具體的時間,以後我們再學習如何計算。 程序的最後一行是END,這不是一條指令,它只是告訴我們程序到此結束,它被稱為"偽指令"。


分享到:


相關文章: