本设计使用8086主控模块、8253定时/计数模块、8位LED循环模块实现了流水灯功能。
硬件设计:
1.8086主控模块:
包括一片8086,三片74ls273和一片74154。在例程的基础上增加了74154译码电路作为I/O输出
2.8253定时/计数模块:
去掉了例程中的喇叭等元器件,改成利用定时/计数器0将输入时钟的100khz分频成1khz,并作为定时/计数器2的时钟,使定时/计数器2每隔1s产生一个中断。
3.8位LED循环模块:
用一片74ls273输出接口控制8只LED灯,实现每隔一秒循环点亮功能。
4.去掉了例程中的74LS238和或门电路
软件设计:
软件分为三个模块:NMI中断向量初始化模块、可编程定时/计数器8253初始化模块以及中断服务子程序。与例程相比增加了中断向量和中断子程序两个模块。
代码:
.MODEL SMALL
.8086
.STACK
.CODE
.STARTUP
;NMI中断向量初始化
NMI_INIT: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,00110111B ;T0 16位 方式3
MOV DX,0406H ;控制口地址
OUT DX,AL
MOV DX,0400H ;T0地址
MOV AX,0100H ;将100khz分频成1khz
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,10110001B ;T2 16位 方式3
MOV DX,0406H
OUT DX,AL
MOV DX,0404H
MOV AX,1000H ;将1khz分频成1hz
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV BL,0FEH ;LED初始状态
MOV DX,0200H ;8位LED模块74ls273地址
MOV AL,BL
OUT DX,AL
JMP $
;中断服务子程序
NMI_SERVICE: ROL BL,1 ;循环左移
MOV AL,BL
MOV DX,0200H ;74ls273地址
OUT DX,AL
MOV DX,0404H
MOV AX,1000H ;将1khz分频成1hz
OUT DX,AL ;重新装入初值
MOV AL,AH
OUT DX,AL
EXIT: IRET
.DATA
END
|