📄 th25(8255).asm
字号:
;8255
OUTBIT equ 7FFDH ; 位控制B 口
OUTSEG equ 7FFCH ; 段控制A口
;P1 键盘读入口
HasRcv equ 20h.0 ; 接收标志位
LEDBuf equ 40h ; 显示缓冲
RCVBuf equ 50H ; 接收缓冲
ORG 0000H
LJMP START
; 串行口中断程序 =========================
ORG 0023H
JNB TI,S0_R
CLR TI
NOP
SJMP S0_RET
S0_R: ; 接收数据
CLR RI
MOV RCVBUF,SBUF ; 保存数据
SETB HasRcv ; 提示收到数据
NOP
S0_RET:
RETI ;==============================
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h ,00h
Delay: ; 延时子程序
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
DisplayLED:
mov r0, #LEDBuf
MOV DPTR, #LEDMAP
MOV A, @R0
MOVC A, @A+DPTR
MOV DPTR, #OUTSEG
MOVX @DPTR,A
MOV R2, #01H
MOV A, R2
mov DPTR, #OUTBIT
MOVX @DPTR,A
MOV R6, #1
ACALL DELAY
ret
;*********************************** BVB
TestKey:MOV P1, #0FH
MOV A, P1 ; 读入键状态
cpl a
anl a, #0fh ; 高四位不用
ret
KeyTable:DB 0EEH,0DEH,0BEH,07EH
DB 0EDH,0DDH,0BDH,07DH
DB 0EBH,0DBH,0BBH,07BH
DB 0E7H,0D7H,0B7H,077H ; 键码定义
GetKey: MOV R6,#10
ACALL DELAY
MOV P1, #0FH
MOV A, P1
CJNE A, #0FH, K12
LJMP MLOOP
K12: MOV B,A
MOV P1, #0EFH ;
MOV A, P1
CJNE A, #0EFH,K13 ;
MOV P1, #0DFH
MOV A, P1
CJNE A, #0DFH,K13 ;
MOV P1, #0BFH
MOV A, P1
CJNE A, #0BFH,K13;
MOV P1, #7FH
MOV A, P1
CJNE A, #7FH, K13;
LJMP MLOOP
K13: ANL A, #0F0H;
ORL A, B
MOV B, A
MOV R1, #16
MOV R2, #0
MOV DPTR,#KEYTABLE
K14: MOV A, R2
MOVC A, @A+DPTR
CJNE A, B, K16
MOV P1, #0FH;
K15: MOV A, P1
CJNE A, #0FH, K15;
MOV R6, #10
ACALL DELAY
MOV A, R2
RET
K16: INC R2
DJNZ R1, K14
LJMP MLOOP
;#########################
START:
MOV SP, #60H
MOV IE, #0 ; DISABLE ALL INTERRUPT
MOV TMOD,#020H ; 定时器1工作于方式2 (8位重装)
MOV TH1, #0F9H ; 波特率
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -