匯編學習單片機,小小記錄,點滴進步
實驗目的:一個LED閃爍的簡單實驗
實驗代碼:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
LJMP MAIN
DELAY: MOV R5,#04H
F3: MOV R6,#0FFH
F2: MOV R7,#0FFH
F1: DJNZ R7,F1 ;若為0程序向下執行,若不為0程序跳轉到
DJNZ R6,F2
DJNZ R5,F3
RET
END
代碼解析:
ORG后面跟一個地址,是指該語句后的指令會放到這個地址里,一直順序存放,直到END
ORG 0000H:程序從此地址開始運行
ORG 030H :在0000H到0030H之間,很多地址都是留給中斷或者DOS保留的使用的,所以一般是從
0030H以后的地址開始,加一條跳轉指令,跳轉到 MAIN 程序處
LED原理圖
現在要D8燈亮,則P1.0需要是低電平,CLR p1.0這條語句是將P1.0中的內容清零,高電平取反為低電平,這時候LED就亮,接著調用延時子程序,即將立即數傳給寄存器R5,實現延時SETB p1.0是用來把其后面的寄存器的位置1,即將其變為高電平,這時候LED就不亮,緊接著繼續調用延時程序
DJNZ指令的具體功能是使操作數的內容減1,并判斷操作數是否等于0,如果不等于0,則跳轉至標號處,如果等于0,則順序往下執行。
#0FFH是單片機匯編語bai言程序中一個8位二進du制數的16進制表示方法,#表示這是一zhi個數字,0是匯編語言的規定,即當16進制數dao的高位數大于9時,前面要加0,FF是這個16進制數的數值,即255,H是16進制數的尾綴。
子程序F3來實現某個燈的熄滅和點亮,0FFH即11111111B,最后一個等D8點亮
|