51微控制器之忽略的東西
阿新 • • 發佈:2018-11-07
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