2、使用8253,编写一个实时钟程序。
.MODEL TINY
COM_ADDR EQU 0263H
T0_ADDR EQU 0260H
T1_ADDR EQU 0261H
T2_ADDR EQU 0262H
.STACK 100
.CODE
START: MOV DX,COM_ADDR
MOV AL,00110101B
OUT DX,AL ;计数器T0,方式2,BCD码计数
MOV DX,T0_ADDR
MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL ;CLK0/1000
MOV DX,COM_ADDR
MOV AL,01110111B
OUT DX,AL ;计数器T1为模式3状态,输出方波,BCD码计数MOV DX,T1_ADDR
MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL ;CLK1/1000 ;OUT1接到LED灯
MOV DX,COM_ADDR
MOV AL,10010101B
OUT DX,AL ;计数器T2为模式2状态,输出方波,BCD码计数MOV DX,T2_ADDR
MOV AL,60H
OUT DX,AL ;CLK1/60
;OUT2输出60S的方波
END START
OUT2接到蜂鸣器
8255
思考题:
1:执行程序后,使发光二极管闪动。
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
MOV AL, 10000000B
OUT DX, AL
MOV BX, 8001H
AA1: MOV DX, 0270H
MOV AL, BH
OUT DX, AL
NOT BH
MOV AL, BH
OUT DX, AL
ROR BH, 1
MOV DX, 0271H
MOV AL, BL
OUT DX, AL
NOT BL
MOV AL, BL
OUT DX, AL
ROL BL, 1
CALL DELAY
CALL DELAY
JMP AA1
DELAY: PUSH CX
MOV CX, 0F00H
AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START
2:执行程序后,使发光二极管高八位和低八位亮灭相反。
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, 0273H
MOV AL, 10000000B
OUT DX, AL
MOV BX, 00FFH
AA1: MOV DX, 0270H
MOV AL, BH
OUT DX, AL
NOT BH
MOV AL, BH
OUT DX, AL
CALL DELAY
CALL DELAY
JMP AA1 DELAY: PUSH CX
MOV CX, 0F000H AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START。