8255 8253控制交通灯问题。小弟在线等。急!!!!!!!!!!

kq1000 2009-10-27 07:51:07
十字路口交通灯的变化规律要求:
(1) 南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5) 转(1)重复。
通过连接的 七段数码管动态显示绿灯剩余时间

本次试验环境为 tcp-usb实验板,清华大学出的板子。
已经有一部分代码了 ,但是似乎错误很多啊
该怎么改能够实现要求中的功能
哪位高手能不能帮忙解决下啊


*************************************************************

;data: 20:13 2009-9-8
;author: muzi
;@zzu
.model small
.stack
.data

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码
gewei word 8 ;存放要显示的个位和十位

shiwei word 8
counter byte 10

intoff word ? ;保存原中断服务程序的偏移地址
intseg word ? ;....................段基地址
.code

.startup


mov dx,28bh ;初始化 8255,设置a口,c口输出
mov al,80h
out dx,al

;初始化 8253,输出1HZ 的方波,作为中断输入
mov al,00110110b ;初始化计数器0,工作方式3,计数初值为1000
mov dx,283h
out dx,al
mov ax,1000
mov dx,280h
out dx,al
mov al,ah
out dx,al

mov al,01110110b ;初始化计数器1,工作方式3,计数初值为1000
mov dx,283h
out dx,al
mov ax,1000
mov dx,281h
out dx,al
mov al,ah
out dx,al

;设置中断,中断号 0bh
mov ax,350bh ;设置系统0b号中断
int 21h
mov intoff, bx
mov intseg, es
cli
push ds
mov dx,offset new0bh
mov ax,seg new0bh
mov ds,ax
mov ax,250bh
int 21h
pop ds

in al,21h ;读取imr
and al,0f7h ;允许irq3,其他不变
out 21h,al ;设置imr

sti
go:
mov counter,30 ;南北绿灯倒计时秒数
call greenn ;南北绿灯,东西黄灯,30s
go2:
call xianshi
mov al,counter
add al,2
cmp al,1
jb go1
jmp go2

go1:
cli ; 关中断
call yellown ; 南北黄灯闪
sti ;开中断
mov counter,30
call greene
go3:
call xianshi
mov al,counter
add al,2
cmp al,1
jb go4
jmp go3

go4:
cli
call yellowe
sti
jmp go
.exit

delay0 proc ; 延时子程序,控制数码管显示时间(亮度)
timer=2
push bx
push cx
mov bx,timer
delay1: xor cx,cx
delay2: loop delay2
dec bx
jnz delay1
pop cx
pop bx
ret
delay0 endp

closeled proc ;关闭数码管显示子程序
mov al,00000000b ;关闭数码管 pc0=0
mov dx,28bh
out dx,al
mov al,00000010b ;关闭数码管 pc1=0
mov dx,28bh
out dx,al
ret
closeled endp

new0bh proc
push bx
push ax
push cx
push si
push ds
mov ax,@data
mov ds,ax
mov bl,10
mov al,counter
mov ah,0
div bl
mov bx,ax
mov ah,0
mov shiwei,ax
mov bl,bh
mov bh,0
mov gewei,bx
dec counter
mov al,20h ;发送eoi命令
out 20h,al
pop ds
pop si
pop cx
pop ax
pop bx
iret
new0bh endp

xianshi proc

call closeled

mov ax,shiwei
mov si,offset led ;置led数码表偏移地址为SI
add si,ax
mov al,byte ptr [si] ;求出对应的led数码
mov dx,288h ;自8255A的口输出
out dx,al
mov al,00000011b ;使相应的数码管亮,显示十位 pc1=1
mov dx,28bh
out dx,al
call delay0

call closeled

mov ax,gewei
mov si,offset led ;置led数码表偏移地址为SI
add si,ax
mov al,byte ptr [si] ;求出对应的led数码
mov dx,288h ;自8255A的口输出
out dx,al

mov al,00000001b ;使相应的数码管亮,显示个位 pc0=1
mov dx,28bh
out dx,al
call delay0
ret
xianshi endp

greenn proc ;南北绿灯子程序
mov dx,28bh
mov al,10000000b
out dx,al
mov dx,28ah
mov al,00110000b
out dx,al
ret
greenn endp

greene proc ;东西绿灯子程序
mov dx,28bh
mov al,10000000b
out dx,al
mov dx,28ah
mov al,10000100b
out dx,al
ret
greene endp

yellown proc ;南北黄灯闪子程序
mov dx,28bh
mov al,10000000b
out dx,al
mov dx,28ah
time1=3
mov cx ,time1
abb:mov al,01010000b
out dx,al
call delay
mov al,00010000b
out dx,al
call delay
loop abb
ret
yellown endp

yellowe proc ;东西黄灯闪子程序
mov dx,28bh
mov al,10000000b
out dx,al
mov dx,28ah
time1=3
mov cx ,time1
abc:mov al,10001000b
out dx,al
call delay
mov al,10000000b
out dx,al
call delay
loop abc
ret
yellowe endp


delay proc ;延时子程序,控制黄灯闪烁
timer=250
push bx
push cx
mov bx,timer
delay11: xor cx,cx
delay22: loop delay22
dec bx
jnz delay11
pop cx
pop bx
ret
delay endp
end
...全文
548 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧