logo资料库

微机原理8255 8259 8253控制交通灯.doc

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
一、概述
二、设计目的
三、设计要求
四、设计内容
五、设计报告要求
六、人员分组情况
目 录 一、方案说明 …………………………………………………………… 3 1.1、硬件方面…………………………………………………………… 3 1.2、硬件连接图 ……………………………………………………… 3 1.3、接线说明 …………………………………………………………… 4 1.4、软件方面 …………………………………………………………… 4 1.5、流程图 ……………………………………………………………… 5 二、源程序代码 ……………………………………………………… 6 三、调试现象 ……………………………………………………………11 四、心得体会 ……………………………………………………………13 五、参考文献 ……………………………………………………………14
一、方案说明 1.1 硬件方面: 8253 的 CLK0 口由于输入一个 2MHZ 的脉冲所以要求采用串联 的方式 OUT0 与 CLK1 连接,GATE0 与 GATE1 一起连接到 5V 的电 源上,最终使 OUT1 口产生 1HZ 的方波,脉冲输入到 8259 的 IR1 端,产生中断,调中断服务子程序。在加入紧急车道后,单脉冲连 到 8259 的 IRO 端,产生一个优先级为高一级的中断请求信号。 1.2 硬件连接图 OUT0 GATE0 8253 CLK0 OUT1 GATE1 CLK1 5V 8259 IR1 IR0 8255 PA7 PA0 PB7 PB0 PC7 PC0 C B . . . . . . 8 位数码管 5V 2
1.3 连线说明: ———— ———— ———— C5 区:CS、A0、A1 ———— C5 区:OUT0 ———— C5 区:OUT1 C5 区:GATE0 C5 区:GATE0 C5 区:CLK0 B3 区:CS、A0 ———— B3 区:INT、INTA ———— B3 区:IR0 ———— B4 区:CS、A0、A1 ———— B4 区:PA 口、PB 口 ———— B4 区:PC 口 ———— ———— A3 区:CS3、A0、A1 C5 区:CLK1 B3 区:IR1 C5 区:GATE1 C1 区:VCC B2 区:2MHZ A3 区:CS2、A0 ES8688:INTR、INTA B2 区:单脉冲( ) A3 区:CS1、A0、A1 G5 区:C 口、B 口 G6 区:JP65(LED 灯) 1.4 软件方面: 主程序先对各个硬件初始化,在开 CPU 中断,然后空操作,等待 中断。执行低级中断(IR1)时,8255 的 PA 口负责选数码管,PB 口负责显示数字,通过查表法查出 0~9 的数码管编码。 采用循环扫描方法,人眼即可看到连续的二位数。当倒计时减到零 时,对红绿灯取反。若手动上下拨动单脉冲一次,则产生一个优先 级高一级的中断(IR0),程序转而执行此中断处理程序,处理完后 返回继续执行低级中断(IR1)。 3
1.5 流程图 开始 8255 初始化 4 盏红灯闪烁 CX=0? Y 8253 初始化 N 调 8259 初始化程序 调类型号 n=9 的程序 东西方向绿灯亮 南北方向红灯亮 主程序 数码管显示 60 CPU 开中断 是否有 IR1 N Y 计数器自减 1 数码管显示 0? Y 红绿灯取反输出 N 4
紧急通行程序 主程序 循环值入栈 是否是 IR0 中断 4 盏红灯闪烁 结束中断服务程序 继续执行主程序 循环值出栈 继 续 处 理 未 完 成 的 低级中断 二、源程序代码 DATA SEGMENT IO8259_0 EQU 0E000H IO8259_1 EQU 0E001H K8255A EQU 0F000H K8255B EQU 0F001H K8255C EQU 0F002H K8255K EQU 0F003H ADD8253_0 EQU 0D000H ADD8253_1 EQU 0D001H ADD8253_2 EQU 0D002H ADD8253_C EQU 0D003H COUNTER RED_ON EQU CCH RED_OFF EQU 0FFH E_W EQU 066H TAB2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH COUNT DB ? SCAN DW 485 DATA ENDS STCK SEGMENT STACK EQU 60H ;8259 地址 ;8255 地址 ;8253 地址 ;倒计时数 ;红灯亮 ;红灯灭 ;东西方向通行 ;扫描次数 DW 64 DUP(?) STCK ENDS CODE SEGMENT 5
ASSUME CS:CODE , DS:DATA,SS:STCK START:MOV AX,DATA MOV DS,AX MOV ES,AX NOP MOV DX,K8255K MOV AL,80H OUT DX,AL ;写 8255 控制字,A,B,C 均为输出,方式 0 START1: MOV DX,K8255C ;C 口输出,控制灯 MOV CX,4 FLASH: MOV AL,RED_ON ;红灯亮 OUT DX,AL CALL DELAY MOV AL,RED_OFF OUT DX,AL CALL DELAY LOOP FLASH START2: MOV DX,D003H MOV AL,35H OUT DX,AL MOV AX,2000H MOV DX,D000H OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,D003H MOV AL,75H MOV DX,AL MOV AX,1000H MOV DX,D000H OUT DX,AL MOV AL,AH MOV DX,AL CALL Init8259 CALL WriIntver_8 CALL WriIntver_9 MOV CL,E_W MOV AL,CL MOV DX,K8255C OUT DX,AL MOV COUNT,COUNTER STI NOP JMP $ START3: ;调延时 ;红灯灭 ;写 8253 控制字 ;0#,方式 2,BCD ;写计数初值,根据输入设定,方波频率 1HZ ;写 8253 控制字 ;1#,方式 2,BCD ;调 8259 初始化子程序 ;调写中断向量表子程序 ;调写中断向量表子程序 ;写计数值(红绿灯变换的间隔时间) ;给出中断以外 CPU 的工作 6
Init8259 PROC NEAR MOV DX,IO8259_0 MOV AL,13H OUT DX,AL MOV DX,IO8259_1 MOV AL,08H OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,0FCH OUT DX,AL RET Init8259 ENDP WriIntver_9 PROC NEAR PUSH ES MOV AX,0 MOV ES,AX MOV DI,24H LEA AX,INT_9 STOSW MOV AX,CS STOSW POP ES RET ;8259 初始化子程序 ;写 ICW1,边沿触发,单片,需写 ICW4 ;写 ICW2,确定中断类型号 ;写 ICW4 ;写 OCW1,除 IR0、IR1 全屏蔽 ;写中断向量表子程序 ;中断类型号 9,对应 24H,25H,26H,27H 四个单元 ;取中断服务程序 IP ;取中段服务程序 CS WriIntver_9 ENDP WriIntver_8 PROC NEAR ;写中断向量表子程序 PUSH ES MOV AX,0 MOV ES,AX MOV DI,20H LEA AX,INT_8 STOSW MOV AX,CS STOSW POP ES RET WriIntver_8 ENDP INT_9:MOV AL,COUNT SUB AL,01H DAS MOV COUNT,AL PUSH AX PUSH DX ;中断类型号 8,对应 20H,21H,22H,23H 四个单元 ;取中断服务程序 IP ;取中段服务程序 CS ;中断服务程序 7
PUSH BX PUSH CX PUSH SCAN LOO: MOV AL,55H ;保护循环值,否则取数码管显示会破坏 ;选高位数码管 ;暂存 AH ;十进制转数码管编码 ;调延时 ;显数 ;清除 ;选低位数码管 ;十进制转数码管编码 ;显数 ;清除 ;循环扫描 MOV DX, K8255A OUT DX,AL MOV AL,COUNT MOV AH,AL MOV CL,4 SHR AL,CL LEA BX,TAB2 XLAT MOV DX, K8255B OUT DX,AL CALL DL1ms MOV AL,0 OUT DX,AL MOV AL,0AAH MOV DX, K8255A OUT DX,AL MOV AL,AH SHL AL,CL SHR AL,CL XLAT MOV DX, K8255B OUT DX,AL CALL DL1ms MOV AL,0 OUT DX,AL DEC SCAN CMP SCAN,0 JNZ LOO POP SCAN POP CX CMP COUNT,0 JNZ STOP MOV COUNT,COUNTER NOT CL MOV AL,CL MOV DX,K8255C OUT DX,AL ;计数到零则重新置数,并将灯取反,未到零则直接结束中断子程序 STOP: MOV DX,IO8259_0 ;结束中断服务,写 OCW2,给 8259 送 EOI 命令,LSR1 清零 MOV AL,20H OUT DX,AL 8
分享到:
收藏