详情请进入 湖南阳光电子学校 已关注:人 咨询电话:0731-85579057 微信号:yp941688, yp94168
图9程序流程图
5.5.2程序源代码
ORG0000H;主程序的入口地址
LJMPMAIN;跳转到主程序的开始处
ORG0003H;外部中断0的中断程序入口地址
ORG000BH;定时器0的中断程序入口地址
LJMPT0_INT;跳转到中断服务程序处
ORG0013H;外部中断1的中断程序入口地址
MAIN:MOVSP,#50H
MOVIE,#8EH;CPU开中断,允许T0中断,T1中断和外部中断1中断
MOVTMOD,#51H;设置T1为计数方式,T0为定时方式,且都工作于模式1
MOVTH1,#00H;T1计数器清零
MOVTL1,#00H
SETBTR1;启动T1计时器
SETBEX1;允许INT1中断
SETBIT1;选择边沿触发方式
MOVDPTR,#0003H
MOVA,#80H;给8255赋初值,8255工作于方式0
MOVX@DPTR,A
AGAIN:JBP3.1,N0;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1则跳转
MOVA,P1
JBP1.7,RED;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOVR0,#00H;R0清零
MOVR0,A;存入东西方向绿灯初始时间
MOVR3,A
LCALLDISP1
LCALLDELAY
AJMPAGAIN
RED:MOVA,P1
ANLA,#7FH;P1.7置0
MOVR7,#00H;R7清零
MOVR7,A;存入东西方向红灯初始时间
MOVR3,A
LCALLDISP1
LCALLDELAY
AJMPAGAIN
;-------------------------------------------
N0:SETBTR0;启动T0计时器
MOV76H,R7;红灯时间存入76H
N00:MOVA,76H;东西方向禁止,南北方向通行
MOVR3,A
MOVDPTR,#0000H;置8255A口,东西方向红灯亮,南北方向绿灯亮
MOVA,#0DDH
MOVX@DPTR,A
N01:JBP2.0,B0
N02:SETBP3.0
CJNER3,#00H,N01;比较R3中的值是否为0,不为0转到当前指令处执行
;------黄灯闪烁5秒程序------
N1:SETBP3.0
MOVR3,#05H
MOVDPTR,#0000H;置8255A口,东西,南北方向黄灯亮
MOVA,#0D4H
MOVX@DPTR,A
N11:MOVR4,#00H
N12:CJNER4,#7DH,$;黄灯持续亮0.5秒
N13:MOVDPTR,#0000H;置8255A口,南北方向黄灯灭
MOVA,#0DDH
MOVX@DPTR,A
N14:MOVR4,#00H
CJNER4,#7DH,$;黄灯持续灭0.5秒
CJNER3,#00H,N1;闪烁时间达5秒则退出
;------------------------------------------------------------
N2:MOVR7,#00H
MOVA,R0;东西通行,南北禁止
MOVR3,A
MOVDPTR,#0000H;置8255A口,东西方向绿灯亮,南北方向红灯亮
MOVA,#0EBH
MOVX@DPTR,A
N21:JBP2.0,T03
N22:CJNER3,#00H,N21
;------黄灯闪烁5秒程序------
N3:MOVR3,#05H
MOVDPTR,#0000H;置8255A口,东西,南北方向黄灯亮
MOVA,#0E2H
MOVX@DPTR,A
N31:MOVR4,#00H
CJNER4,#7DH,$;黄灯持续亮0.5秒
N32:MOVDPTR,#0000H;置8255A口,南北方向黄灯灭
MOVA,#0EBH
MOVX@DPTR,A
N33:MOVR4,#00H
CJNER4,#7DH,$;黄灯持续灭0.5秒
CJNER3,#00H,N3;闪烁时间达5秒则退出
SJMPN00
;------闯红灯报警程序------
B0:MOVR2,#03H;报警持续时间3秒
B01:MOVA,R3
JZN1;若倒计时完毕,不再报警
CLRP3.0;报警
CJNER2,#00H,B01;判断3秒是否结束
SJMPN02
;------1秒延时子程序-------
N7:RETI
T0_INT:MOVTL0,#9AH;给定时器T0送定时10ms的初值
MOVTH0,#0F1H
INCR4
INCR5
CJNER5,#0FAH,T01;判断延时是否够一秒,不够则调用显示子程序
MOVR5,#00H;R5清零
DECR3;倒计时初值减一
DECR2;报警初值减一
T01:ACALLDISP;调用显示子程序
RETI;中断返回
;------显示子程序------
DISP:JNBP2.4,T02
DISP1:MOVB,#0AH
MOVA,R3;R3中值二转十显示转换
DIVAB
MOV79H,A
MOV7AH,B
DIS:MOVA,79H;显示十位
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#0002H
MOVX@DPTR,A
MOVDPTR,#0001H
MOVA,#0F7H
MOVX@DPTR,A
LCALLDELAY
DS2:MOVA,7AH;显示个位
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#0002H
MOVX@DPTR,A
MOVDPTR,#0001H
MOVA,#0FBH
MOVX@DPTR,A
RET
;------东西方向车流量检测程序------
T03:MOVA,R3
SUBBA,#00H;若绿灯倒计时完毕,不再检测车流量
JZN3
JBP2.0,T03
INCR7
CJNER7,#64H,E1
MOVR7,#00H;中断到100次则清零
E1:SJMPN22
;------东西方向车流量显示程序------
T02:MOVB,#0AH
MOVA,R7;R7中值二转十显示转换
DIVAB
MOV79H,A
MOV7AH,B
DIS3:MOVA,79H;显示十位
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#0002H
MOVX@DPTR,A
MOVDPTR,#0001H
MOVA,#0F7H
MOVX@DPTR,A
LCALLDELAY
DS4:MOVA,7AH;显示个位
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#0002H
MOVX@DPTR,A
MOVDPTR,#0001H
MOVA,#0FBH
MOVX@DPTR,A
LJMPN7
;------延时4MS子程序----------
DELAY:MOVR1,#0AH
LOOP:MOVR6,#64H
NOP
LOOP1:DJNZR6,LOOP1
DJNZR1,LOOP
RET
;------字符表------
TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
6结论
本系统就是充分利用了8051和8255芯片的I/O引脚。系统统采用MSC-51系列单片机Intel8051和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8031芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。。系统不足之处不能控制车的左、右转、以及自动根据车流改变红绿灯时间等。这是由于本身地理位子以及车流量情况所定,如果有需要可以设计扩充原系统来实现。
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
责任编辑:lq
.(编辑:安龙电工培训学校)