1. 程式人生 > >微機實驗-帶數碼管倒計時的交通指示燈設計

微機實驗-帶數碼管倒計時的交通指示燈設計

一、實驗原理

使用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