?? mcs51.asm
字號(hào):
;《MCS-51系列單片機(jī)實(shí)驗(yàn)指導(dǎo)書》程序清單
;硬件實(shí)驗(yàn)十七 電子音響 的程序請(qǐng)裝載music.bin文件
ORG 0000H
LJMP CHK00
ORG 0003H
LJMP ZO00
ORG 0013H
LJMP PO16
;=============== 軟件實(shí)驗(yàn)十 電腦時(shí)鐘(定時(shí)器、中斷綜合實(shí)驗(yàn)) =============
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 ;顯示緩沖區(qū)放數(shù)子程序
MOV TMOD,#01H
ORL IE,#82H
MOV TL0,#0B7H
MOV TH0,#3CH ;定時(shí)中斷初始化
MOV 23H,#00H
SETB TR0 ;開定時(shí)
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 ;拆送顯示緩沖區(qū)
ACALL PTDS1
MOV A,R1
SWAP A
PTDS1: ANL A,#0FH
MOV @R0,A
INC R0
RET
CLOCK: MOV TL0,#0B7H
MOV TH0,#3CH ;恢復(fù)初值
PUSH PSW
PUSH ACC
SETB 0D3H ;保護(hù)
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 ;十進(jìn)制調(diào)整
CJNE A,#60H,DONE ;60秒到嗎?
MOV 22H,#00H ;秒單元清零
MOV A,21H
INC A
DA A ;分加1.十進(jìn)制調(diào)整
MOV 21H,A
CJNE A,#60H,DONE ;60分到嗎?
MOV 21H,#00H ;分單元清零
MOV A,20H
INC A
DA A ;時(shí)加1.十進(jìn)制調(diào)整
MOV 20H,A
CJNE A,#24H,DONE ;24小時(shí)到嗎?
MOV 20H,#00H ;時(shí)單元清零
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 ;清緩沖區(qū)
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 ;轉(zhuǎn)數(shù)字外處理程序
H906: INC DPTR ;鍵表地址加1
INC R1 ;查找次數(shù)加1
MOV A,R1
JB ACC.4,H908 ;是功能鍵嗎?
AJMP H905 ;繼續(xù)查找
H908: MOV R1,#00H
MOV DPTR,#GOJZ1
H909: MOV A,#00H
MOVC A,@A+DPTR ;功能鍵鍵值取出
CJNE A,B,H90A ;鍵值相等嗎?
AJMP H90B ;轉(zhuǎn)功能鍵處理子程序
H90A: INC DPTR
INC R1
MOV A,R1
JNB ACC.2,H909 ;繼續(xù)查找
AJMP H900 ;無(wú)鍵按下返回
H907: MOV A,30H
MOV DPTR,#0FFE1H ;字位送入8297
MOVX @DPTR,A
MOV A,R1
MOV R0,31H
MOV @R0,A
INC 31H ;字形緩沖區(qū)加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 ;功能鍵 散轉(zhuǎn)處理
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
;===================== 硬件實(shí)驗(yàn)四 工業(yè)順序控制 ========================
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 ;保護(hù)現(xiàn)場(chǎng)
PO17: MOV P1,#7FH ;關(guān)輸出
MOV 20H,#0A0H ;振蕩次數(shù)
PO18: SETB P1.7 ;振蕩
ACALL PO1A ;延時(shí)
CLR P1.7 ;停振
ACALL PO1A ;延時(shí)
DJNZ 20H,PO18 ;不為0轉(zhuǎn)
CLR P1.7
ACALL PO1A ;停振
JNB P3.3,PO17 ;故障消除嗎?
MOV R2,B ;恢復(fù)現(xiàn)場(chǎng)
RETI
PO19: MOV R2,#10H
ACALL DELY ;延時(shí)1
RET
PO1A: MOV R2,#06H
ACALL DELY ;延時(shí)2
RET
PO1B: MOV R2,#30H
ACALL DELY ;延時(shí)3
RET
;---------------------
ORG 0213H
DELY: PUSH 02H
DEL2: PUSH 02H
DEL3: PUSH 02H ;延時(shí)
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 ;關(guān)打印機(jī)
MOVX @DPTR,A
DOE1: MOVX A,@DPTR
JB ACC.4,DOE1 ;打印機(jī)忙嗎?
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR ;取數(shù)
INC DPTR
MOV R0,DPL
MOV R1,DPH ;DPTR加1
MOV DPTR,#0FFD8H
MOVX @DPTR,A ;送打印機(jī)
MOV DPTR,#0FFDAH
MOV A,#00H
MOVX @DPTR,A
MOV A,#01H
MOVX @DPTR,A ;開始打印
DJNZ R2,DOE1
DJNZ R3,DOE1 ;字節(jié)打完嗎?
SJMP $
;================= 硬件實(shí)驗(yàn)十三 微型打印機(jī)打印字符/曲線/漢字 =============
ORG 0280H
D1E0: MOV SP,#53H
MOV DPTR,#0FFDBH
MOV A,#88H
MOVX @DPTR,A ;8255初始化.A.B口輸出,.C口輸入
ACALL D1E2 ;打印空格和#號(hào)
ACALL D1E3 ;換行
MOV R6,#0A6H ;取代碼偏移量
MOV R7,#0DH ;13個(gè)代碼
D1E1: MOV A,R6
MOVC A,@A+PC ;取代碼
ACALL D1E4 ;打印
INC R6
DJNZ R7,D1E1 ;未完繼續(xù)
ACALL D1E3
ACALL D1E2 ;再打印一行#和空格
ACALL D1E3
ACALL D1EA ;設(shè)置行間距子程序
ACALL D1E5 ;圖形打印命令子程序
MOV R6,#68H
ACALL D1E6 ;取代碼偏移量
ACALL D1E5 ;打印上部圖形
MOV R6,#8CH
ACALL D1E6 ;打印下部圖形
ACALL D1E7
ACALL D1E7 ;回車換行
MOV DPTR,#2000H ;曲線數(shù)據(jù)存放首址
MOV R6,#14H
ACALL D1E8 ;取曲線數(shù)據(jù)
MOV R7,#0DH ;行數(shù)
D1E9: MOV R6,#09H ;列數(shù)
ACALL D1E8
DJNZ R7,D1E9 ;取曲線數(shù)據(jù)
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個(gè)圖形代碼送打印機(jī)
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
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個(gè)#號(hào)和空格
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 ;打印機(jī)忙嗎?
POP ACC
MOV DPTR,#0FFD8H
MOVX @DPTR,A ;送打印機(jī)
MOV DPTR,#0FFDBH
MOV A,#00H
MOVX @DPTR,A
MOV A,#01H
MOVX @DPTR,A ;產(chǎn)生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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -