1个回答
展开全部
电路设计的思路:
1、计时功能实现逻辑:
通过8253计数器0和计数器1级联实现准确定时;用8255的A口低六位控制东西、南北路口交通灯的状态;灯的亮灭可直接由8086输出0,1控制。用8259A管理可屏蔽中断即开机初始化。
采用两个计数器级联的方式, 并且计数器0工作于方式3用于产生方波信号,计数器1工作方式0,计数到时高电平信号。计数器1的输出端OUT1接入8255芯片的PC0口,通过查询8255的C口的值,以完成计时功能。将计数器0的输出OUT0接到计数器1的输入端CLK1,而CLK0的输入采用1.19MHZ的时钟频率, 计数器0计数初值为59499=0E86BH,则OUT0=20HZ, 即计数器1的时钟频率为20HZ。
当计数器1的记数初值为9时,0.5S后OUT1输出一高电平。8086通过读取8255C口的值,来决定对A口写入的数据。因此每隔0.5秒8086变换灯的状态,持续6次即完成3秒的闪烁功能。
当计数器1的记数初值为899时,45S后OUT1输出一高电平。通过查询8255的C口PC0的状态改变,达到延时45秒的作用。同理计数器1的计数初值分别为59、799时,分别为3、40秒的延时。
2、 译码电路设计
通过分析8259、8253、8255各端口地址,设计合理的地址译码电路。8259的地址为20H、21H,8253的地址为40H、41H、42H、43H,8255的端口地址为0F0H、0F1H、0F2H、0F3H。故芯片的地址只与8086的地址的低8位有联系,不妨设高十二为全为1将它们相与后作为38译码器的始能信号E3。再分析发现8259、8253、8255各端口地址的低八位其中D2、D3均为0,将8086的地址总线的D2、D3作为38译码器的始能信号E1、E2。将8086的地址总线的D0、D1分别与8253和8255的A0、A1连接,利用D4、D5、D6、D7构成译码电路。将8086的地址总线的D0与8259的A0连接,利用D2、D4、D5、D6、D7通过38译码器构成译码电路。
程序代码:
*****************************************************************
MY8259_ICW1 EQU 20H ;实验系统中 8259的ICW1端口地址
MY8259_ICW2 EQU 21H ;实验系统中8259的ICW2端口地址
MY8259_ICW3 EQU 21H ;实验系统中8259的ICW3端口地址
MY8259_ICW4 EQU 21H ;实验系统中8259的ICW4端口地址
MY8259_OCW1 EQU 21H ;实验系统中8259的OCW1端口地址
MY8259_OCW2 EQU 20H ;实验系统中8259的OCW2端口地址
MY8259_OCW3 EQU 20H ;实验系统中8259的OCW3端口地址
MY8253_COUNT0 EQU 40H ;实验系统中8253计数器0端口地址
MY8253_COUNT1 EQU 41H ;实验系统中8253计数器1端口地址
MY8253_COUNT2 EQU 42H ;实验系统中8253计数器2端口地址
MY8253_MODE EQU 43H ;实验系统中8253控制寄存器端口地址
MY8255_A EQU 0F0H ;实验系统中8255的A口地址
MY8255_B EQU 0F1H ;实验系统中8255的B口地址
MY8255_C EQU 0F2H ;实验系统中8255的C口地址
MY8255_MODE EQU 0F3H ;实验系统中8255的控制寄存器地址
*****************************************************************
DATA SEGMENT
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,3508H
INT 21H
MOV IP_BAK, ES ;保存INTR原中断处理程序入口偏移地址
MOV CS_BAK, BX ;保存INTR原中断处理程序入口段地址
MOV AX,SEG INITIAL
MOV DS,AX
MOV DX,OFFSET INITIAL
MOV AX,2508H
INT 21H ;设置中断向量
MOV DX,MY8259_ICW1 ; 初始化实验系统中8259的ICW1
MOV AL,13H ;边沿触发、单片8259、需要ICW4
OUT DX,AL
MOV DX, MY8259_ICW2 ;初始化实验系统中8259的ICW2
MOV AL,08H ;IR0中断类型号
OUT DX,AL
MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4
MOV AL,03H ;自动结束EOI
OUT DX,AL
MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1
MOV AL,0FEH ;打开IR0的屏蔽位
OUT DX,AL
MOV AL,00H
MOV DX, MY8259_OCW2 ;初始化实验系统中8259的OCW2,完成8259的初始化
OUT DX,AL
QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令
MOV AL,0CH
OUT DX,AL
IN AL,DX ;读出查询字
TEST AL,80H ;判断中断是否已响应
JZ QUERY ;没有响应则继续查询
AND AL,01H
CMP AL,00H
JNE QUERY ;若不是IR0请求,继续查询
L4: INT 08H ;调用08H中断程序
CALL DELAY3S ;延时3秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,12H
OUT DX,AL ; L2、L5亮
CALL DELAY45S ;延时45秒
MOV CX, 03H ;周期1S,循环三次完成灯闪烁
L2: MOV DX,MY8255_A ;写8255的A口
MOV AL,02H
OUT DX,AL ; L2亮 、L5灭
CALL DELAYHALFS ;延时0.5秒
MOV DX,MY8255_A
MOV AL,12H
OUT DX,AL ; L2、L5亮
CALL DELAYHALFS ;延时0.5秒
DEC CX
JNZ L2 ;L2亮,L5闪烁
MOV DX,MY8255_A ;写8255的A口
MOV AL,06H
OUT DX,AL ; L2、L3亮
CALL DELAY3S ;延时3秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,21H
OUT DX,AL ; L1、L6亮
CALL DELAY45S ;延时40秒
MOV CX,03H ;周期1S,循环三次完成灯闪烁
L3: MOV DX,MY8255_A ;写8255的A口
MOV AL,01H
OUT DX,AL ; L1亮 、L6灭
CALL DELAYHALFS ;延时0.5秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,21H
OUT DX,AL ; L1、L6亮
CALL DELAYHALFS ;延时0.5秒
DEC CX ;L1亮,L6闪烁
JNZ L3
MOV DX,MY8255_A ;写8255的A口
MOV AL,09H
OUT DX,AL ; L1、L4亮
CALL DELAY3S ;延时3秒
JMP L4 ;循环一次完成,跳到L4重新开始循环
MOV AH,4CH
INT 21H ;返回DOS
INITIAL PROC ;中断类型号08H的中断子程序
MOV DX,MY8253_MODE ;对8253初始化
MOV AL,36H
OUT DX,AL
MOV AX, 0E86BH
MOV DX,MY8253_COUNT0
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器0工作方式3 ,OUT0为频率20HZ的方波
MOV DX, MY8255_MODE
MOV AL,89H
OUT DX,AL ;8255初始化完成 A口输出,C口输入
MOV DX,MY8255_A
MOV AL,03H
OUT DX,AL ;两个红灯L1、L2亮,灯初始化完成
IRET
INITIAL ENDP ;开机初始化完成
DELAY3S PROC ;延时3S子程序
MOV AL,51H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AL,59H
MOV DX,MY8253_COUNT1
OUT DX,AL ;计数器1工作方式0 ,计数初值为59
L1: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L1
RET
DELAY3S ENDP
DELAY45S PROC ;延时45S子程序
MOV AL,71H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AX,0899H
MOV DX,MY8253_COUNT1
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器1工作方式0 ,计数初值为899
L5: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L5
RET
DELAY45S ENDP
DELAYHALFS PROC ;延时0.5S子程序
MOV AL,51H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AL,09H
MOV DX,MY8253_COUNT1
OUT DX,AL ;计数器1工作方式0 ,计数初值为9
L6: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L6
RET
DELAYHALFS ENDP
DELAY40S PROC ;延时40S子程序
MOV AL,71H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AX,0799H
MOV DX,MY8253_COUNT1
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器1工作方式0 ,计数初值为799
L7: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L7
RET
DELAY40S ENDP
CODE ENDS
END START
1、计时功能实现逻辑:
通过8253计数器0和计数器1级联实现准确定时;用8255的A口低六位控制东西、南北路口交通灯的状态;灯的亮灭可直接由8086输出0,1控制。用8259A管理可屏蔽中断即开机初始化。
采用两个计数器级联的方式, 并且计数器0工作于方式3用于产生方波信号,计数器1工作方式0,计数到时高电平信号。计数器1的输出端OUT1接入8255芯片的PC0口,通过查询8255的C口的值,以完成计时功能。将计数器0的输出OUT0接到计数器1的输入端CLK1,而CLK0的输入采用1.19MHZ的时钟频率, 计数器0计数初值为59499=0E86BH,则OUT0=20HZ, 即计数器1的时钟频率为20HZ。
当计数器1的记数初值为9时,0.5S后OUT1输出一高电平。8086通过读取8255C口的值,来决定对A口写入的数据。因此每隔0.5秒8086变换灯的状态,持续6次即完成3秒的闪烁功能。
当计数器1的记数初值为899时,45S后OUT1输出一高电平。通过查询8255的C口PC0的状态改变,达到延时45秒的作用。同理计数器1的计数初值分别为59、799时,分别为3、40秒的延时。
2、 译码电路设计
通过分析8259、8253、8255各端口地址,设计合理的地址译码电路。8259的地址为20H、21H,8253的地址为40H、41H、42H、43H,8255的端口地址为0F0H、0F1H、0F2H、0F3H。故芯片的地址只与8086的地址的低8位有联系,不妨设高十二为全为1将它们相与后作为38译码器的始能信号E3。再分析发现8259、8253、8255各端口地址的低八位其中D2、D3均为0,将8086的地址总线的D2、D3作为38译码器的始能信号E1、E2。将8086的地址总线的D0、D1分别与8253和8255的A0、A1连接,利用D4、D5、D6、D7构成译码电路。将8086的地址总线的D0与8259的A0连接,利用D2、D4、D5、D6、D7通过38译码器构成译码电路。
程序代码:
*****************************************************************
MY8259_ICW1 EQU 20H ;实验系统中 8259的ICW1端口地址
MY8259_ICW2 EQU 21H ;实验系统中8259的ICW2端口地址
MY8259_ICW3 EQU 21H ;实验系统中8259的ICW3端口地址
MY8259_ICW4 EQU 21H ;实验系统中8259的ICW4端口地址
MY8259_OCW1 EQU 21H ;实验系统中8259的OCW1端口地址
MY8259_OCW2 EQU 20H ;实验系统中8259的OCW2端口地址
MY8259_OCW3 EQU 20H ;实验系统中8259的OCW3端口地址
MY8253_COUNT0 EQU 40H ;实验系统中8253计数器0端口地址
MY8253_COUNT1 EQU 41H ;实验系统中8253计数器1端口地址
MY8253_COUNT2 EQU 42H ;实验系统中8253计数器2端口地址
MY8253_MODE EQU 43H ;实验系统中8253控制寄存器端口地址
MY8255_A EQU 0F0H ;实验系统中8255的A口地址
MY8255_B EQU 0F1H ;实验系统中8255的B口地址
MY8255_C EQU 0F2H ;实验系统中8255的C口地址
MY8255_MODE EQU 0F3H ;实验系统中8255的控制寄存器地址
*****************************************************************
DATA SEGMENT
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,3508H
INT 21H
MOV IP_BAK, ES ;保存INTR原中断处理程序入口偏移地址
MOV CS_BAK, BX ;保存INTR原中断处理程序入口段地址
MOV AX,SEG INITIAL
MOV DS,AX
MOV DX,OFFSET INITIAL
MOV AX,2508H
INT 21H ;设置中断向量
MOV DX,MY8259_ICW1 ; 初始化实验系统中8259的ICW1
MOV AL,13H ;边沿触发、单片8259、需要ICW4
OUT DX,AL
MOV DX, MY8259_ICW2 ;初始化实验系统中8259的ICW2
MOV AL,08H ;IR0中断类型号
OUT DX,AL
MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4
MOV AL,03H ;自动结束EOI
OUT DX,AL
MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1
MOV AL,0FEH ;打开IR0的屏蔽位
OUT DX,AL
MOV AL,00H
MOV DX, MY8259_OCW2 ;初始化实验系统中8259的OCW2,完成8259的初始化
OUT DX,AL
QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令
MOV AL,0CH
OUT DX,AL
IN AL,DX ;读出查询字
TEST AL,80H ;判断中断是否已响应
JZ QUERY ;没有响应则继续查询
AND AL,01H
CMP AL,00H
JNE QUERY ;若不是IR0请求,继续查询
L4: INT 08H ;调用08H中断程序
CALL DELAY3S ;延时3秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,12H
OUT DX,AL ; L2、L5亮
CALL DELAY45S ;延时45秒
MOV CX, 03H ;周期1S,循环三次完成灯闪烁
L2: MOV DX,MY8255_A ;写8255的A口
MOV AL,02H
OUT DX,AL ; L2亮 、L5灭
CALL DELAYHALFS ;延时0.5秒
MOV DX,MY8255_A
MOV AL,12H
OUT DX,AL ; L2、L5亮
CALL DELAYHALFS ;延时0.5秒
DEC CX
JNZ L2 ;L2亮,L5闪烁
MOV DX,MY8255_A ;写8255的A口
MOV AL,06H
OUT DX,AL ; L2、L3亮
CALL DELAY3S ;延时3秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,21H
OUT DX,AL ; L1、L6亮
CALL DELAY45S ;延时40秒
MOV CX,03H ;周期1S,循环三次完成灯闪烁
L3: MOV DX,MY8255_A ;写8255的A口
MOV AL,01H
OUT DX,AL ; L1亮 、L6灭
CALL DELAYHALFS ;延时0.5秒
MOV DX,MY8255_A ;写8255的A口
MOV AL,21H
OUT DX,AL ; L1、L6亮
CALL DELAYHALFS ;延时0.5秒
DEC CX ;L1亮,L6闪烁
JNZ L3
MOV DX,MY8255_A ;写8255的A口
MOV AL,09H
OUT DX,AL ; L1、L4亮
CALL DELAY3S ;延时3秒
JMP L4 ;循环一次完成,跳到L4重新开始循环
MOV AH,4CH
INT 21H ;返回DOS
INITIAL PROC ;中断类型号08H的中断子程序
MOV DX,MY8253_MODE ;对8253初始化
MOV AL,36H
OUT DX,AL
MOV AX, 0E86BH
MOV DX,MY8253_COUNT0
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器0工作方式3 ,OUT0为频率20HZ的方波
MOV DX, MY8255_MODE
MOV AL,89H
OUT DX,AL ;8255初始化完成 A口输出,C口输入
MOV DX,MY8255_A
MOV AL,03H
OUT DX,AL ;两个红灯L1、L2亮,灯初始化完成
IRET
INITIAL ENDP ;开机初始化完成
DELAY3S PROC ;延时3S子程序
MOV AL,51H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AL,59H
MOV DX,MY8253_COUNT1
OUT DX,AL ;计数器1工作方式0 ,计数初值为59
L1: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L1
RET
DELAY3S ENDP
DELAY45S PROC ;延时45S子程序
MOV AL,71H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AX,0899H
MOV DX,MY8253_COUNT1
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器1工作方式0 ,计数初值为899
L5: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L5
RET
DELAY45S ENDP
DELAYHALFS PROC ;延时0.5S子程序
MOV AL,51H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AL,09H
MOV DX,MY8253_COUNT1
OUT DX,AL ;计数器1工作方式0 ,计数初值为9
L6: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L6
RET
DELAYHALFS ENDP
DELAY40S PROC ;延时40S子程序
MOV AL,71H
MOV DX,MY8253_MODE
OUT DX,AL
MOV AX,0799H
MOV DX,MY8253_COUNT1
OUT DX,AL
MOV AL,AH
OUT DX,AL ;计数器1工作方式0 ,计数初值为799
L7: MOV DX, MY8255_C
IN AL,DX
CMP AL,01H
LOOPNZ L7
RET
DELAY40S ENDP
CODE ENDS
END START
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询