1. 程式人生 > >51微控制器之忽略的東西

51微控制器之忽略的東西

P0口將作為匯流排的低8位地址線和8位資料線使用
P2口將作為匯流排的高8位地址線使用

如果十六進位制數以字母ABCDEF中的某一個開頭,必須在前面加一個0.譬如,MOV P1, #0BFH

ORG 00H 表示的是偽指令,作用幫助彙編器彙編指令,並不是微控制器指令的一部分,因此偽指令不佔用儲存器空間。這段程式碼的含義是從程式儲存器的00H開始執行程式。

一段小程式,迴圈閃爍小燈

	ORG	00H
START:
	MOV P1, #00H
	CALL DELAY
	MOV P1, #0FFH
	CALL DELAY
	JMP START
	
DELAY: MOV R3, #50
D1:	MOV R4, #20
D2:	MOV R5, #248
	DJNZ R5, $
	DJNZ R4, D2
	DJNZ R3, D1
	RET			;返回主程式
	END			;彙編程式結束
	

按鍵開關控制P1.0上的發光二極體閃爍5次

	ORG	00H
START:
	MOV R0, #05 ;R0作為計數器
LOOP:
	MOV P1, #00H
	CALL DELAY
	MOV P1, #0FFH
	CALL DELAY
	DJNZ R0, LOOP ;R0減一,不等於0就跳到loop處
	JB P2.0, $ ;如果P2.0為高電平則迴圈執行本行
	JMP START
	
DELAY: MOV R3, #50
D1:	MOV R4, #20
D2:	MOV R5, #248
	DJNZ R5, $ ;R5的值減1,不等於0則迴圈執行本行
	DJNZ R4, D2
	DJNZ R3, D1
	RET			;返回主程式
	END			;彙編程式結束
	

中斷方式

	ORG	00H
	JMP START
	ORG 03H
	JMP EXT0
START:	;主程式
	MOV IE, #10000001B ;外部中斷0使能
	MOV IP, #00000001B ;外部中斷0中斷優先
	MOV TCON, #00000001B ;外部中斷0為電平觸發
SHINE:
	MOV P1, #0FEH
	JMP SHINE
	
EXT0:
	MOV R2, #5	
LOOP:
	MOV P0, #0FEH
	CALL DELAY
	MOV P0, #0FFH
	CALL DELAY
	DJNZ R2, LOOP ;R2減一,不等於0就跳到loop處
	RETI ;中斷服務子程式結束標誌
	
DELAY: MOV R3, #20 ;這一段200ms

D1:	MOV R4, #20 ;這一段延時10ms
D2:	MOV R5, #248
	DJNZ R5, $
	DJNZ R4, D2
	
	DJNZ R3, D1
	RET			;返回主程式
	END			;彙編程式結束
	

PSEN(program store enable) - 片外程式儲存使能,需要和儲存器的輸出端端OE相連。

ALE(address latch enable) - 地址鎖存使能,當微控制器與片外儲存器相連時,P0既可以送出資料也可以送出地址,如何區分到底是地址還是資料呢?
ALE為0,表示送出的是資料,當ALE為1表示送出的是地址。(P0送出的低8位地址,配合P2口的高八位地址,片外儲存器便可以尋到16位地址)

注意51微控制器的P0口是需要加上拉的!
51作為輸入,必須先自己置1!

P0輸入,P1輸出

	MOV A, #0FFH
	MOV P0, A
LOOP:
	MOV A, P0
	MOV P1, A
	JMP LOOP

片內片外程式儲存器統一編址,訪問指令使用MOVC,通過PC來指定地址。

外部資料儲存器與外部IO埠實行統一編址,並使用相同的選通控制訊號,相同的訪問指令MOVX,相同的暫存器間接定址。類似程式儲存器的PC訪問資料儲存器用DPTR

資料指標DPTR和程式計數器PC