【微机原理作业】从0开始设计RTC系统(一)
上一篇确定了使用的仿真元件,以及元件的工作方式。
接下来编写汇编程序,程序编写在 emu8086 上进行。
软件设计
流程图:
中断向量和8253、8255初始化
START:
; 数据段设置
MOV AX, DATA
MOV DS, AX
MOV ES, AX
; NMI中断向量初始化
PUSH ES
XOR AX, AX
MOV ES, AX
MOV AL, 02H
XOR AH, AH
SHL AX, 1
SHL AX, 1
MOV SI, AX
MOV AX, OFFSET NMI_SERVICE
MOV ES: [SI], AX
INC SI
INC SI
MOV BX, CS
MOV ES: [SI], BX
POP ES
; 初始化8253
MOV AL, 00110101B ; T0 读写16位 方式2 BCD计数
MOV DX, TIME_CTR
OUT DX, AL
MOV DX, TIME0
MOV AX, CNTVAL ; 1000分频
OUT DX, AL
MOV AL, AH
OUT DX, AL
MOV AL, 01110111B ; T1 读写16位 方式3 BCD计数
MOV DX, TIME_CTR
OUT DX, AL
MOV DX, TIME1
MOV AX, CNTVAL ; 1000分频
OUT DX, AL
MOV AL, AH
OUT DX, AL
; 初始化8255
MOV AL, 81H ; A、B输出,C上部输出,下部输入
OUT PORT_CTR, AL
中断服务
NMI_SERVICE:
; 中断服务
PUSH AX
MOV AL, SEC
ADD AL, 1
DAA ; 校正BCD数加法
MOV SEC, AL
CMP SEC, 60H
JB EXIT ; 若秒数大于60则转移
MOV SEC, 0
MOV AL, MIN
ADD AL, 1
DAA
MOV MIN, AL
CMP MIN, 60H
JB EXIT
MOV MIN, 0
MOV AL, HOU
ADD AL, 1
DAA
MOV HOU, AL
CMP HOU, 24H
JB EXIT
MOV HOU, 0
DAA
显示
DISP PROC
; 数码管显示子程序
; 秒个位
MOV AL, 0FFH ; 为防止重叠,每次显示之前要清零
MOV DX, PORTB
OUT DX, AL ; 位选信号接到8255A的PB口
MOV AL, 0FEH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV BL, SEC
AND BX, 000FH
MOV SI, BX
MOV AL, LED[SI] ; 段选码
MOV DX, PORTA
OUT DX, AL ; 段选信号接到8255A的PA口
CALL DELAY
; 秒十位
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 0FDH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV BL, SEC
AND BX, 00F0H
MOV CL, 4
SHR BX, CL
MOV SI, BX
MOV AL, LED[SI] ; 段选码
MOV DX, PORTA
OUT DX, AL
CALL DELAY
; "-"
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 0FBH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV AL, 40H ; 段选码
MOV DX, PORTA
OUT DX, AL
CALL DELAY
; 分个位
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 0F7H ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV BL, MIN
AND BX, 000FH
MOV SI, BX
MOV AL, LED[SI] ; 段选码
MOV DX, PORTA
OUT DX, AL
CALL DELAY
; 分十位
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 0EFH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV BL, MIN
AND BX, 00F0H
MOV CL, 4
SHR BX, CL
MOV SI, BX
MOV AL, LED[SI] ; 段选码
MOV DX, PORTA
OUT DX, AL
CALL DELAY
; "-"
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 0DFH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV AL, 40H ; 段选码
AND DX, PORTA
OUT DX, AL
CALL DELAY
; 时个位
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 0BFH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV BL, HOU
AND BX, 000FH
MOV SI, BX
MOV AL, LED[SI] ; 段选码
MOV DX, PORTA
OUT DX, AL
CALL DELAY
; 时十位
MOV AL, 0FFH
MOV DX, PORTB
OUT DX, AL
MOV AL, 07FH ; 位选码
MOV DX, PORTB
OUT DX, AL
MOV BL, HOU
AND BX, 00F0H
MOV CL, 4
SHR BX, CL
MOV SI, BX
MOV AL, LED[SI] ; 段选码
MOV DX, PORTA
OUT DX, AL
CALL DELAY
RET
DISP ENDP
延时
DELAY PROC
; 延时子程序
PUSH BX
PUSH CX
MOV BX, 1
LP1: MOV CX, 1200
LP2: LOOP LP2
DEC BX
JNZ LP1
POP CX
POP BX
RET
DELAY ENDP
效果
参考:《微机原理与接口技术实验-基于proteus仿真》