📄 tch0674.asm.txt
字号:
;===========================================
; MCS51-1.asm
; 2003.5.21
; 由田春华与傅传波共同完成
;===========================================
WR273 EQU 0C000H
RD244 EQU 0C000H
ORG 0000H
LJMP START
ORG 001BH
LJMP INT01
ORG 0100H
START: LCALL CLS
LCALL HELLO
LCALL KEY
MOV A,7FH
START1: CJNE A,#0AH,START2 ;显示P001
LCALL TESTKEY
LJMP START
START2: CJNE A,#0BH,START3 ;串口输出
LCALL OUTCOM
LJMP START
START3: CJNE A,#0CH,START4 ;串口输入
LCALL INCOM
LJMP START
START4: CJNE A,#0EH,START5 ;时钟调用
LCALL CLK
LJMP START
START5: CJNE A,#0DH,START7 ;频率计
LCALL PINGLV
START7: LJMP START
;===================
;键盘测试子程序
;===================
TESTKEY:MOV 70H,#41H
MOV 71H,#30H
MOV 72H,#30H
MOV 73H,#31H
TESTK0: LCALL PRINT
LCALL KEY
MOV A,7FH
CLR C
SUBB A,#30H
JNC TESTK1
RET
TESTK1: MOV 70H,71H
MOV 71H,72H
MOV 72H,73H
MOV 73H,7FH
LJMP TESTK0
;--------------------------
SET232: MOV SCON,#0DAH
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
RET
;----------------------------
INPUT: JNB 98H,$
CLR 98H
MOV A,SBUF
RET
;-----------------------------
OUTPUT: JNB 99H,$
CLR 99H
MOV SBUF,A
LCALL TIM0
RET
;-----------------------------------
OUTCOM: LCALL SET232
MOV 70H,#41H
MOV 71H,#32H
MOV 72H,#33H
MOV 73H,#32H ;PRINT"P232"
LCALL PRINT
LCALL KEY
MOV 70H,#42H
MOV 71H,#42H
MOV 72H,#42H
MOV 73H,#42H ;PRINT"-----"
OUTCO1: LCALL PRINT
LCALL KEY
MOV A,7FH
CJNE A,#0FH,OUTCO3
LJMP OUTCO2
OUTCO3: CLR C
SUBB A,#30H
JC OUTCO1
MOV 70H,71H
MOV 71H,72H
MOV 72H,73H
MOV 73H,7FH
SJMP OUTCO1
OUTCO2: MOV A,70H
LCALL OUTPUT
MOV A,71H
LCALL OUTPUT
MOV A,72H
LCALL OUTPUT
MOV A,73H
LCALL OUTPUT
RET
;------------------------------------
INCOM: LCALL SET232
MOV 70H,#32H
MOV 71H,#33H
MOV 72H,#32H
MOV 73H,#3CH
LCALL PRINT
LCALL INPUT
MOV 70H,A
LCALL INPUT
MOV 71H,A
LCALL INPUT
MOV 72H,A
LCALL INPUT
MOV 73H,A
LCALL PRINT
LCALL KEY
RET
;===========
;键盘子程序
;===========
KEY: MOV R7,#00H
MOV A,#00H
MOV B,#0EH
KEY1: NOP
ORL A,B
MOV DPTR,#WR273
MOVX @DPTR,A
NOP
NOP
NOP
NOP
MOV DPTR,#RD244
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0FH,KEY2
INC R7
SETB C
MOV A,B
RLC A
ANL A,#0FH
CJNE A,#0FH,KEY0
MOV A,#0EH
MOV R7,#00H
KEY0: MOV B,A
SJMP KEY1
KEY2: CPL A
ANL A,#0FH
JNB ACC.0,KEY6
MOV A,#00H
SJMP KEY9
KEY6: JNB ACC.1,KEY7
MOV A,#01H
SJMP KEY9
KEY7: JNB ACC.2,KEY8
MOV A,#02H
SJMP KEY9
KEY8: MOV A,#03H
KEY9: XCH A,R7
MOV B,#04H
MUL AB
ADD A,R7
MOV DPTR,#KTAB1
MOVC A,@A+DPTR
;MOV DPTR,#KKKK
;MOVX @DPTR,A
MOV 7FH,A
LCALL SOUND
KEYUP: MOV DPTR,#RD244
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0FH,KEYUP
RET
KTAB1: DB 34H,0FH,0DH,0EH
DB 33H,0BH,0CH,0AH
DB 32H,30H,39H,38H
DB 31H,36H,37H,35H
;---------------------------------
KTAB0: DB 00H,01H,02H,03H
DB 04H,05H,06H,07H
DB 08H,09H,0AH,0BH
DB 0CH,0DH,0EH,0FH
;------------------------------------
;---------------------------------
TIM0: MOV R7,#40H
TIME1: MOV R6,#00H
TIME2: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TIME2
DJNZ R7,TIME1
RET
;--------------------------------------------
SOUND: NOP
LCALL TIM0
RET
;------------------------------------
CLS: MOV A,#0FFH
MOV DPTR,#8000H
MOVX @DPTR,A
MOV DPTR,#9000H
MOVX @DPTR,A
MOV DPTR,#0A000H
MOVX @DPTR,A
MOV DPTR,#0B000H
MOVX @DPTR,A
RET
;------------------------------------
DISP: MOV A,70H
MOV DPTR,#8000H
MOVX @DPTR,A
MOV A,71H
MOV DPTR,#9000H
MOVX @DPTR,A
MOV A,72H
MOV DPTR,#0A000H
MOVX @DPTR,A
MOV A,73H
MOV DPTR,#0B000H
MOVX @DPTR,A
RET
;=============
;显示子程序
;=============
PRINT: MOV A,70H
SUBB A,#30H
MOV DPTR,#TABLED
MOVC A,@A+DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
MOV A,71H
SUBB A,#30H
MOV DPTR,#TABLED
MOVC A,@A+DPTR
MOV DPTR,#0A000H
MOVX @DPTR,A
MOV A,72H
SUBB A,#30H
MOV DPTR,#TABLED1
MOVC A,@A+DPTR
MOV DPTR,#9000H
MOVX @DPTR,A
MOV A,73H
SUBB A,#30H
MOV DPTR,#TABLED
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
RET
TABLED: DB 0C0H,0F9H,0A4H,0B0H, 99H,92H,82H,0F8H, 80H;0-8
DB 90H, 88H, 83H,0C6H,0A1H,86H,84H,0FFH, 8CH;9 A B,C,D E F P
DB 0BFH ;42:"-"
; 待
DB 040H,79H,24H,30H, 19H,12H,02H,78H, 00H;0-8,
DB 10H ;9; ADD A POT AT THE END OF EACH WORD
TABLED1: DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H;0-8
DB 58H,48H,43H,0C6H,61H,46H,4EH,0FFH,4CH;9 A B C D E F
DB 7FH;"- "
DB 80H,0B9H,24H,30H,19H,12H,02H,0B8H,00H,18H ;;;;;;;;;;; 21H
;-----------------------------------
HELLO: MOV A,#89H
MOV DPTR,#0B000H
MOVX @DPTR,A
MOV A,#86H
MOV DPTR,#0A000H
MOVX @DPTR,A
MOV A,#0C7H
MOV DPTR,#9000H
MOVX @DPTR,A
MOV A,#0C7H
MOV DPTR,#8000H
MOVX @DPTR,A
RET
;===================
;时钟子程序
;===================
CLK: NOP
LCALL CLS
MOV TMOD ,#10H
MOV TH1,#0DCH
MOV TL1,#06H
SETB EA
SETB ET1
LCALL SETTIME
MOV R0,#64H
SETB TR1
HALT: CLR C
LCALL PRINT
SJMP HALT
;=============
;T1中断子程序
;=============
INT01:
DJNZ R0,NEXT
LCALL TIMESKIP
MOV R0,#64H
NEXT: MOV TH1,#0DCH
MOV TL1,#06H
RETI
;----------------------
;时钟设置子程序
;----------------------
SETTIME:
LCALL KEY
CLR C
MOV A,7FH
SUBB A,#30H
JC SETTIME
MOV A,7FH
SUBB A,#33H
JNC SETTIME
MOV 70H,7FH
MOV 71H,#42H
MOV 72H,#42H
MOV 73H,#42H
CLR C
LCALL PRINT
SET1:
LCALL KEY
CLR C
MOV A,7FH
SUBB A,#30H
JC SET1
MOV A,70H
CJNE A,#32H,NEXT1
MOV A,7FH
SUBB A,#34H
JNC SET1
NEXT1:
MOV A,#13H
ADD A,7FH
MOV 71H,A
LCALL PRINT
SET2:
LCALL KEY
CLR C
MOV A,7FH
SUBB A,#30H
JC SET2
MOV A,7FH
SUBB A,#36H
JNC SET2
CLR C
MOV A,#13H
ADD A,7FH
MOV 72H,A
LCALL PRINT
SET3:
LCALL KEY
CLR C
MOV A,7FH
SUBB A,#30H
JC SET3
MOV 73H,7FH
LCALL PRINT
MOV 75H,#30H
MOV 74H,#30H
RET
;----------------
;时钟跳动子程序
;----------------
TIMESKIP:
MOV A,#39H
SUBB A,75H
JZ SKIP00
INC 75H
SJMP EXITOUT
SKIP00:
MOV 75H,#30H
MOV A,#35H
SUBB A,74H
JZ SKIP01
INC 74H
SJMP EXITOUT
SKIP01:
MOV 74H,#30H
MOV A,#39H
SUBB A,73H
JZ SKIP1
INC 73H
SJMP EXITOUT
SKIP1: MOV 73H,#30H
MOV A,#48H
SUBB A, 72H
JZ SKIP2
INC 72H
SJMP EXITOUT
SKIP2: MOV 72H,#43H
MOV A,#32H
CJNE A,70H,SKIP3
MOV A,#46H
SUBB A,71H
JZ SKIP4
SKIP3:
MOV A,#4CH
SUBB A,71H
JZ SKIP5
INC 71H
SJMP EXITOUT
SKIP4: MOV 70H,#30H
MOV 71H,#43H
MOV 72H,#43H;;;;;;;
MOV 73H,#30H
SJMP EXITOUT
SKIP5:
MOV 71H,#43H
MOV A,#32H
SUBB A,70H
JZ SKIP4
INC 70H
SJMP EXITOUT
EXITOUT:
RET
;-------------------
;频率计子程序
;-------------------
PINGLV:
MOV TMOD,#05H
TCH: MOV TH0,#00H
MOV TL0,#00H
SETB EA
SETB ET0
MOV R1,#64H
SETB TR0
LOOP3:MOV R3,#0AH
LOOP2:MOV R2,#64H
LOOP1:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R2,LOOP1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;18
DJNZ R3,LOOP2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;12
DJNZ R1,LOOP3
CLR TR0
MOV R5,TH0
MOV R4,TL0
MOV R7,#03H
MOV R6,#0E8H
LCALL DV
MOV 70H,R0
MOV R7,#00H
MOV R6,#64H
LCALL DV
MOV 71H,R0
MOV R7,#00H
MOV R6,#0AH
LCALL DV
MOV 72H,R0
MOV R7,#00H
MOV R6,#01H
LCALL DV
MOV 73H,R0
CLR C
LCALL PRINT
SJMP TCH
RET
;===========
;取位子程序
;===========
DV: MOV R0,#30H
LOOP:
CLR C
MOV A,R4
SUBB A,R6
MOV R2,A
MOV A,R5
SUBB A,R7
JC EXIT
INC R0
MOV R5,A
MOV A,R2
MOV R4,A
SJMP LOOP
EXIT:
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -