?? mcs51.asm
字號:
;《MCS-51系列單片機實驗指導書》程序清單
;硬件實驗十七 電子音響 的程序請裝載music.bin文件
ORG 0000H
LJMP CHK00
ORG 0003H
LJMP ZO00
ORG 0013H
LJMP PO16
;=============== 軟件實驗十 電腦時鐘(定時器、中斷綜合實驗) =============
ORG 0030H
CHK00: MOV SP,#60H
LCALL LEDP
MOV DPTR,#CLOCK
MOV R0,DPL
MOV R1,DPH
MOV DPTR,#000BH
MOV A,#02H
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R0
MOVX @DPTR,A
CHK0: LCALL LCK0 ;鍵掃,顯示子程序
LCALL PTDS0 ;顯示緩沖區放數子程序
MOV TMOD,#01H
ORL IE,#82H
MOV TL0,#0B7H
MOV TH0,#3CH ;定時中斷初始化
MOV 23H,#00H
SETB TR0 ;開定時
LOO5: LCALL DIS ;SSEE ;顯示
LCALL PTDS0
SJMP LOO5
PTDS0: MOV R0,#79H
MOV A,22H
ACALL PTDS
MOV A,21H
ACALL PTDS
MOV A,20H
ACALL PTDS
RET
;-------------------
PTDS: MOV R1,A ;拆送顯示緩沖區
ACALL PTDS1
MOV A,R1
SWAP A
PTDS1: ANL A,#0FH
MOV @R0,A
INC R0
RET
CLOCK: MOV TL0,#0B7H
MOV TH0,#3CH ;恢復初值
PUSH PSW
PUSH ACC
SETB 0D3H ;保護
INC 23H ;0.1秒加1
MOV A,23H
CJNE A,#0AH,DONE ;1秒到嗎?
MOV 23H,#00H ;清0.1秒單元
MOV A,22H
INC A ;秒加1
DA A
MOV 22H,A ;十進制調整
CJNE A,#60H,DONE ;60秒到嗎?
MOV 22H,#00H ;秒單元清零
MOV A,21H
INC A
DA A ;分加1.十進制調整
MOV 21H,A
CJNE A,#60H,DONE ;60分到嗎?
MOV 21H,#00H ;分單元清零
MOV A,20H
INC A
DA A ;時加1.十進制調整
MOV 20H,A
CJNE A,#24H,DONE ;24小時到嗎?
MOV 20H,#00H ;時單元清零
DONE: POP ACC ;退棧
POP PSW
RETI
ORG 00D0H
H900: MOV SP,#53H
MOV DPTR,#0FFE1H
MOV A,#00H
MOVX @DPTR,A ;8279方式字寫入
MOV A,#32H
MOVX @DPTR,A ;分頻
MOV A,#0DFH
MOVX @DPTR,A
H901: MOVX A,@DPTR ;清緩沖區
JB ACC.7,H901
MOV DPTR,#0FFE0H
MOV A,#0C8H
MOVX @DPTR,A ;字形送入
INC DPTR
MOV A,#80H
MOVX @DPTR,A ;字位送入.顯示P
H902: MOV 30H,#80H
MOV 31H,#40H
H903: MOV DPTR,#0FFE1H
MOVX A,@DPTR
ANL A,#07H
CJNE A,#00H,H904 ;有鍵按下嗎?
AJMP H903
H904: MOV DPTR,#0FFE0H
MOVX A,@DPTR
MOV B,A ;取出鍵值
MOV R1,#00H
MOV DPTR,#GOJZ
H905: MOV A,#00H
MOVC A,@A+DPTR ;查鍵值表是否相同
CJNE A,B,H906
AJMP H907 ;轉數字外處理程序
H906: INC DPTR ;鍵表地址加1
INC R1 ;查找次數加1
MOV A,R1
JB ACC.4,H908 ;是功能鍵嗎?
AJMP H905 ;繼續查找
H908: MOV R1,#00H
MOV DPTR,#GOJZ1
H909: MOV A,#00H
MOVC A,@A+DPTR ;功能鍵鍵值取出
CJNE A,B,H90A ;鍵值相等嗎?
AJMP H90B ;轉功能鍵處理子程序
H90A: INC DPTR
INC R1
MOV A,R1
JNB ACC.2,H909 ;繼續查找
AJMP H900 ;無鍵按下返回
H907: MOV A,30H
MOV DPTR,#0FFE1H ;字位送入8297
MOVX @DPTR,A
MOV A,R1
MOV R0,31H
MOV @R0,A
INC 31H ;字形緩沖區加1
MOV DPTR,#ZOE0
MOVC A,@A+DPTR ;取出字形代碼
MOV DPTR,#0FFE0H
MOVX @DPTR,A ;送入8279顯示
INC 30H
MOV A,30H ;字位加1
CJNE A,#88H,H90C ;顯示到第八位,從頭顯示
AJMP H902
H90C: AJMP H903
H90B: MOV DPTR,#CKEY3
MOV A,R1
RL A ;功能鍵 散轉處理
ADD A,R1
JMP @A+DPTR
CKEY3: LJMP L240
LJMP L241
LJMP L242
GOJZ: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H
DB 0D9H,0DAH,0C3H,0CBH,0D2H,0D3H,0DBH
GOJZ1: DB 0E3H,0E2H,0E1H
ZOE0: DB 0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H
DB 38H,6CH,1AH,68H,0E8H
;===================== 硬件實驗四 工業順序控制 ========================
ORG 0190H
PO10: MOV P1,#7FH
ORL P3,#00H
PO11: JNB P3.4,PO11 ;開工嗎?
ORL IE,#84H
ORL IP,#01H
MOV PSW,#00H ;初始化
MOV SP,#53H
PO12: MOV P1,#7EH ;第一道工序
ACALL PO1B
MOV P1,#7DH ;第二道工序
ACALL PO1B
MOV P1,#7BH ;第三道工序
ACALL PO1B
MOV P1,#77H ;第四道工序
ACALL PO1B
MOV P1,#6FH ;第五道工序
ACALL PO1B
MOV P1,#5FH ;第六道工序
ACALL PO1B
MOV P1,#0FH ;第七道工序
ACALL PO1B
SJMP PO12
PO16: MOV B,R2 ;保護現場
PO17: MOV P1,#7FH ;關輸出
MOV 20H,#0A0H ;振蕩次數
PO18: SETB P1.7 ;振蕩
ACALL PO1A ;延時
CLR P1.7 ;停振
ACALL PO1A ;延時
DJNZ 20H,PO18 ;不為0轉
CLR P1.7
ACALL PO1A ;停振
JNB P3.3,PO17 ;故障消除嗎?
MOV R2,B ;恢復現場
RETI
PO19: MOV R2,#10H
ACALL DELY ;延時1
RET
PO1A: MOV R2,#06H
ACALL DELY ;延時2
RET
PO1B: MOV R2,#30H
ACALL DELY ;延時3
RET
;---------------------
ORG 0213H
DELY: PUSH 02H
DEL2: PUSH 02H
DEL3: PUSH 02H ;延時
DEL4: DJNZ R2,DEL4
POP 02H
DJNZ R2,DEL3
POP 02H
DJNZ R2,DEL2
POP 02H
DJNZ R2,DELY
RET
ORG 0240H
DOE0: MOV DPTR,#0FFDBH
MOV A,#88H
MOVX @DPTR,A ;8255控制命令送入
MOV DPTR,#0FFDAH
MOV A,#01H ;關打印機
MOVX @DPTR,A
DOE1: MOVX A,@DPTR
JB ACC.4,DOE1 ;打印機忙嗎?
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR ;取數
INC DPTR
MOV R0,DPL
MOV R1,DPH ;DPTR加1
MOV DPTR,#0FFD8H
MOVX @DPTR,A ;送打印機
MOV DPTR,#0FFDAH
MOV A,#00H
MOVX @DPTR,A
MOV A,#01H
MOVX @DPTR,A ;開始打印
DJNZ R2,DOE1
DJNZ R3,DOE1 ;字節打完嗎?
SJMP $
;================= 硬件實驗十三 微型打印機打印字符/曲線/漢字 =============
ORG 0280H
D1E0: MOV SP,#53H
MOV DPTR,#0FFDBH
MOV A,#88H
MOVX @DPTR,A ;8255初始化.A.B口輸出,.C口輸入
ACALL D1E2 ;打印空格和#號
ACALL D1E3 ;換行
MOV R6,#0A6H ;取代碼偏移量
MOV R7,#0DH ;13個代碼
D1E1: MOV A,R6
MOVC A,@A+PC ;取代碼
ACALL D1E4 ;打印
INC R6
DJNZ R7,D1E1 ;未完繼續
ACALL D1E3
ACALL D1E2 ;再打印一行#和空格
ACALL D1E3
ACALL D1EA ;設置行間距子程序
ACALL D1E5 ;圖形打印命令子程序
MOV R6,#68H
ACALL D1E6 ;取代碼偏移量
ACALL D1E5 ;打印上部圖形
MOV R6,#8CH
ACALL D1E6 ;打印下部圖形
ACALL D1E7
ACALL D1E7 ;回車換行
MOV DPTR,#2000H ;曲線數據存放首址
MOV R6,#14H
ACALL D1E8 ;取曲線數據
MOV R7,#0DH ;行數
D1E9: MOV R6,#09H ;列數
ACALL D1E8
DJNZ R7,D1E9 ;取曲線數據
SJMP $
D1E3: MOV A,#0AH ;打完嗎?
ACALL D1E4 ;換行子程序
RET
D1E7: MOV A,0DH ;回車子程序
ACALL D1E4
RET
D1EA: MOV A,#1BH
ACALL D1E4
MOV A,#31H
ACALL D1E4 ;ESC I n (n=o)
MOV A,#00H ;行間距=0
ACALL D1E4
ACALL D1E3
RET
D1E6: MOV R7,#24H
D1EB: MOV A,R6
MOVC A,@A+PC
ACALL D1E4 ;36個圖形代碼送打印機
INC R6
DJNZ R7,D1EB
ACALL D1E3
RET
D1E8: MOV A,#1BH
ACALL D1E4
MOV A,#27H
ACALL D1E4 ;ESC/ m n1 n2 nk CR命令
MOV A,R6
ACALL D1E4 ;(R6)=m
D1EC: MOVX A,@DPTR
INC DPTR ;(DPTR)=n1 n2 nk
ACALL D1E4
DJNZ R6,D1EC
ACALL D1E7 ;CR命令
RET
D1E5: MOV A,#1BH
ACALL D1E4
MOV A,#4BH
ACALL D1E4 ;ESC K n1 n2
MOV A,#24H ;圖形打印命令
ACALL D1E4
MOV A,#00H
ACALL D1E4
RET
D1E2: MOV R7,#07H
D1ED: MOV A,#23H
ACALL D1E4 ;打印7個#號和空格
MOV A,#20H
ACALL D1E4
DJNZ R7,D1ED
RET
D1E4: PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#0FFDAH
D1EE: MOVX A,@DPTR
JB ACC.4,D1EE ;打印機忙嗎?
POP ACC
MOV DPTR,#0FFD8H
MOVX @DPTR,A ;送打印機
MOV DPTR,#0FFDBH
MOV A,#00H
MOVX @DPTR,A
MOV A,#01H
MOVX @DPTR,A ;產生STB后沿
POP DPL
POP DPH
RET
;----------------------------------------------------
DB 23H,20H,39H,34H,8CH,31H,32H,8DH,33H,30H,8EH
DB 20H,23H
;#94年12月31日#
DB 00H,00H,00H,7FH,3FH,22H,22H,0A2H,0E2H,62H
DB 22H,22H,22H,3EH,7FH,20H,00H,00H
;“啟”字上部代碼
DB 00H,00H,00H,00H,20H,21H,27H,3FH,79H,0E1H,0BFH
DB 27H,21H,21H,23H,61H,20H,00H
;“東”字上部代碼
DB 00H,03H,06H,0FCH,0FCH,7FH,3EH,22H,22H,22H,22H
DB 22H,22H,3FH,7FH,20H,00H,00H
;“啟”字下部代碼
DB 00H,00H,00H,00H,04H,0CH,0B8H,70H,22H,02H,0FEH
DB 0FEH,00H,40H,38H,1EH,08H,00H
;“東”字下部代碼
;--------------------------------------------------------------
X3: MOV R4,A
MOV R0,#50H
MOV A,@R0
MOV R1,A
MOV A,R4
MOV @R1,A
CLR A
POP DPH
POP DPL
MOVC A,@A+DPTR
INC DPTR
CJNE A,01H,X30
dec r1
clr a
MOVC A,@A+DPTR
X31: MOV @R0,A
INC DPTR
PUSH DPL
PUSH DPH
RET
X30: DEC R1
MOV A,R1
SJMP X31
;--------------------------
X2: MOV R6,#50H
X0: ACALL XLE
JNB ACC.5,XX0
DJNZ R6,X0
MOV R6,#20H
MOV R0,#50H
MOV A,@R0
MOV R0,A
MOV A,@R0
MOV R7,A
MOV A,#10H
MOV @R0,A
X1: ACALL XLE
JNB ACC.5,XX1
DJNZ R6,X1
MOV A,R7
MOV @R0,A
SJMP X2
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -