微机实验-带数码管倒计时的交通指示灯设计

该实验基于8253和8255A,通过1MHz时钟分频实现1s精确计时,控制交通指示灯和数码管倒计时。8253的CLK0接时钟源,OUT0连接8255B口,用于数码管显示剩余时间。8255的PA口控制路口灯,PB口连接七段数码管,PC口控制片选。汇编程序中包含精确延时子函数,显示剩余时间,并在主函数中设置绿灯60s,黄灯3s,红灯63s的周期。

一、实验原理

使用8253对1MHz时钟进行1M分频,从而实现1s精确定时。

使用8255A口控制指示灯,8255B口控制数码管倒计时,8255C口0-1控制数码管片选,7口对1s时钟进行读取。

二、连线

8253的CLK0接1MHz时钟源,OUT0接CLK1,OUT1接8255的PC7,GATE0、GATE1接电源+5V。

8255的PA0、PA1、PA2分别接路口1的绿、黄、红灯,PA5、PA6、PA7分别接路口2的绿、黄、红灯,

PB0-PB6接七段数码管的a-g口,PC0、PC1分别接数码管高、低位片选。

8253片选接280h,8255片选接288h。

三、汇编程序

1.精确延时子函数

在调用该delay子函数时,传入参数cx为需要延时的时间,单位秒。在延时过程中,使用数码管显示距离延时结束剩余的时间。该函数应该放在code段里,以下为函数代码:

delay proc near
	push ax
	push bx
	push dx
cont:	mov ax,cx
	push cx
	mov bx,10
	div bl
	mov bl,al
	mov dx,io8255c
	mov al,1
	out dx,al
	mov al,[bx]
	mov dx,io8255b
	out dx,al
	mov cx,0ffffh
d1:	loop d1
	mov cx,0ffffh
d2:	loop d2

	mov bl,ah
	mov dx,io8255c
	mov al,2
	out dx,al
	mov al,[bx]
	mov dx,io8255b
	out dx,al
	mov cx,0ffffh
d3:	loop d3
	mov cx,0ffffh
d4:	loop d4
	pop cx

	mov dx,io8255c
	in al,dx
	and al,80h
	mov ah,temp
	mov temp,al
	cmp ah,al
	jz cont
	cmp ah,80h
	jnz cont
	loop cont
	pop dx
	pop bx
	pop ax
	ret
delay endp

2.主函数

绿灯时间60s,黄灯时间3s,红灯时间63s。

data segment
ioport equ 0ff00h-0280h
io8253a equ ioport+280h
io8253b equ ioport+281h
io8253c equ ioport+282h
io8253d equ ioport+283h
io8255a equ ioport+288h
io8255b equ ioport+289h
io8255c equ ioport+28ah
io8255d equ ioport+28bh
ta	db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
temp db 0
data ends

code segment
assume ds:data,cs:code
start: mov ax,data
	mov ds,ax
	mov dx,io8253d
	mov al,36h
	out dx,al
	mov dx,io8253a
	mov al,50h
	out dx,al
	mov al,0c3h
	out dx,al
	mov dx,io8253d
	mov al,56h
	out dx,al
	mov dx,io8253b
	mov al,20
	out dx,al
	mov dx,io8255d
	mov al,88h
	out dx,al

	mov dx,io8255a
lo:	mov al,24h
	out dx,al
	mov cx,60
	call delay
	mov al,44h
	out dx,al
	mov cx,3
	call delay
	mov al,81h
	out dx,al
	mov cx,60
	call delay
	mov al,82h
	out dx,al
	mov cx,3
	call delay
	jmp lo
code ends
end start
评论 24
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值