📄 t10.asm
字号:
NAME T10 ;8279显示实验一
PORT EQU 0CFE8H
BUF EQU 24H
SEC EQU 21H
CSEG AT 0000H
LJMP START
CSEG AT 400BH
LJMP CLOCK
CSEG AT 4100H
START: MOV DPTR,#PORT+1 ;8279显示RAM全部清零
MOV A,#0D1H
MOVX @DPTR,A
MOV TMOD,#01H ;定时器0设置为方式一
MOV TL0,#0AFH ;置时间常数,每0.1秒中断一次
MOV TH0,#3CH
MOV SEC,#00H
MOV BUF,#00H
SETB ET0
SETB EA
SETB TR0
LOOP: MOV DPTR,#PORT+1 ;写显示缓冲RAM命令
MOV A,#80H
MOVX @DPTR,A
MOV R1,#21H ;秒字节地址入R1
MOV DPTR,#PORT ;8279数据端口地址
DL0: MOV A,@R1 ;取相应的时间值
MOV R2,A ;存入R2中
SWAP A
ANL A,#0FH ;获取高半字节
ACALL TABLE
MOVX @DPTR,A ;送入缓冲区
MOV DPTR,#PORT+1 ;写显示缓冲RAM命令
MOV A,#81H
MOVX @DPTR,A
MOV DPTR,#PORT
MOV A,R2
ANL A,#0FH ;获取低半字节
ACALL TABLE
MOVX @DPTR,A
LJMP LOOP ;否则从头开始显示
TABLE: INC A ;取相应段显码
MOVC A,@A+PC
RET
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
CLOCK: MOV TL0,#0AFH ;重置时间常数
MOV TH0,#3CH
PUSH ACC
PUSH PSW
INC BUF ;计数值加一
MOV A,BUF
CJNE A,#0AH,ENDT ;到一秒了吗?没有则退到ENDT
MOV BUF,#00H ;到一秒了,计数值置零
MOV A,SEC
INC A ;秒值加一,经十进制调整
DA A
MOV SEC,A ;送回秒字节
CJNE A,#60H,ENDT ;秒值为60否?
MOV SEC,#00H ;是,清零
ENDT: POP PSW
POP ACC
RETI ;中断返回
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -