| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1742 人关注过本帖
标题:[求助]谁有交通灯模拟系统的汇编代码
只看楼主 加入收藏
大猪小猪
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-4-18
收藏
 问题点数:0 回复次数:4 
[求助]谁有交通灯模拟系统的汇编代码
谁能帮忙给一个交通灯模拟系统的汇编代码?老师要求是用汇编和接口技术来写,其他的无所谓,越简单越好
非常感谢!
搜索更多相关主题的帖子: 交通灯 汇编代码 模拟系统 接口 
2007-08-27 10:49
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
回复:(大猪小猪)[求助]谁有交通灯模拟系统的汇编代...
我这有好多,就是不给你呵呵哼

“运行正确”的程序不见得是高质量的程序
2007-08-28 15:42
nmgzjz04
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-9
收藏
得分:0 

/*
-----------------------------------------------------------------
简单交通灯程序

存储地址说明:
延时函数: R6,R7
显示函数:
显示段码: 20H 21H 22H 23H
南北交通灯状态: 2fH
倒计时: 25H 26H
查表:R0
中断函数:
红绿灯状态:R1,R2
定时一秒中断次数:R3
-----------------------------------------------------------------
*/


/*
--------------------------------------------
程序主函数
主函数只做初始化,数码管和交通灯的显示
--------------------------------------------
*/
org 0000h
ljmp main
org 000bh
ljmp time0_interrupt

org 00ffh
main:
lcall sys_init ;//调用系统初始化程序
loop:
lcall led_disp
ljmp loop

/*
----------------------------------------------
延时函数
用于显示时的延时,可调节延时时间
使用了:R6,R7
----------------------------------------------
*/
delay:
mov r6,#04h
de_loop:
mov r7,#0ffh
djnz r7,$
djnz r6,de_loop
ret

/*
---------------------------------------------
显示函数
显示分两部分:
一部分为数码管显示
另一部分为交通灯显示
使用了:R0, R4,R5
---------------------------------------------
*/
led_disp:
mov r4,#04h
mov r0 ,#20h
mov dptr,#led_table
mov r5,#01h
disp:
mov a,@r0
movc a,@a+dptr ;//查表得到显示段码
mov p0,a
mov a,r5
mov p2,a
lcall delay
inc r0
mov a,r5
rl a
mov r5,a
mov p2,#00h
djnz r4,disp ;//循环4次
mov a,2fh ;//显示红绿灯状态
mov p1,a
ret

sys_init:

/*
--------------------------------------------------------
定时器0初始化
--------------------------------------------------------
*/
time0:
mov TMOD,#01H ;//定时器0方式为1
mov th0,#3ch ;//定时时间为50ms
mov tl0,#0afh
setb tr0 ;//启动定时器0
setb et0 ;//开定时器0中断
setb ea ;//开总中断

/*
---------------------------------------------------------
初始化寄存器:
20H,21H,22,23H为显示BCD码
2fH为红绿灯显示
25H,26H为东西南北的倒计时
---------------------------------------------------------
*/
register:
mov a,#00h ;//数码管显示初始化为0
mov 20h,a
mov a,#00h
mov 21h,a
mov a,#00h
mov 22h,a
mov a,#00h
mov 23h,a
mov a,#12h ;//交通灯从黄灯开始
mov 2fh,a
mov a,#05h ;//所以显示初始值为5
mov 25h,a
mov a,#05h
mov 26h,a
mov a,#00h ;//先对显示进行消影
mov p2,a
mov r3,#14h ;//定时器定时时间为50ms,要20次才到1s
mov r2,#03h ;//R1,R2分别是红绿灯的状态寄存器,由于硬件接法不一样所以才导致两者的值一样
mov r1,#03h
ret

/*
--------------------------------------------------------
定时中断0函数
用于时间的调整
使用了:R3,R2,R1
--------------------------------------------------------
*/

time0_interrupt:
push acc
push psw
mov th0,#3ch
mov tl0,#0afh
djnz r3,tt ;//等待1S
sjmp ii
tt:
ljmp out ;//不到1S跳出中断
ii:
mov r3,#14h
;//开始检查南北是否倒计数到
mov a,25h
dec a
mov 25h,a
cjne a,#0ffh,next1 ;//已减到0
sjmp next3 ;//
next1:
mov b,#0ah ;//进行除法运算,得到BCD码用于查表
div ab
mov 20h,a
mov 21h,b
;//开始检查东西是否倒计数到
yy:
mov a,26h
dec a
mov 26h,a
cjne a,#0ffh,next2 ;//同上
sjmp next4
next2:
mov b,#0ah
div ab
mov 22h,a
mov 23h,b
sjmp out
;//南北红绿灯控制
next3:
cjne r1,#00h,light1 ;//原先状态是否为红灯,下一个为黄灯
mov 25h,#05h
inc r1
clr 78h
setb 79h
sjmp yy
light1:
cjne r1,#01h,light2 ;//原先的状态是否为黄灯,下一个为绿灯
mov 25h,#19h
inc r1
clr 79h
setb 7ah
sjmp yy
light2:
cjne r1,#02h,light3 ;// 原先的状态是否为绿灯,下一个是黄灯
mov 25h,#05h
inc r1
clr 7ah
setb 79h
sjmp yy
light3:
cjne r1,#03h,light4 ;// 原来的状态是否为黄灯,下一个是红灯
mov 25h,#19h
mov r1,#00h
clr 79h
setb 78h
light4:
sjmp yy

;//东西交通灯

next4 :

cjne r2,#00h,light11 ;//原先状态是否为红灯,下一个为黄灯
mov 26h,#05h ; //对黄灯付倒计数值
inc r2 ; //变换到下一个状态
clr 7bh ;//操作红绿灯的相应位,采用位寻址
setb 7ch
sjmp out ; //跳出
light11:
cjne r2,#01h,light21 ;//原先的状态是否为黄灯,下一个为绿灯
mov 26h,#19h ;同上
inc r2
clr 7ch
setb 7dh
sjmp out
light21:
cjne r2,#02h,light31 ;// 原先的状态是否为绿灯,下一个是黄灯
mov 26h,#05h
inc r2
clr 7dh
setb 7ch
sjmp out
light31:
cjne r2,#03h,light41 ;// 原来的状态是否为黄灯,下一个是红灯
mov 26h,#19h
mov r2,#00h
clr 7ch
setb 7bh
light41:
sjmp out
out: ;// 中断结束,恢复堆栈中的值
pop psw
pop acc
reti

/*
--------------------------------------
数码管段码表
从0到9
--------------------------------------
*/

led_table:
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh

end

2007-08-28 22:30
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
谢谢了可惜能不能给我一个能看懂的用汇编写的不是单片机的呀

“运行正确”的程序不见得是高质量的程序
2007-08-30 19:09
大猪小猪
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-4-18
收藏
得分:0 
谢谢大哥了,能用到8255和8253用硬件延时和软件延时最好
2007-08-30 19:12
快速回复:[求助]谁有交通灯模拟系统的汇编代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014509 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved