附录一 交通灯控制程序清单.docx
- 文档编号:28756139
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:13
- 大小:18.11KB
附录一 交通灯控制程序清单.docx
《附录一 交通灯控制程序清单.docx》由会员分享,可在线阅读,更多相关《附录一 交通灯控制程序清单.docx(13页珍藏版)》请在冰豆网上搜索。
附录一交通灯控制程序清单
附录一交通灯控制程序清单
基于单片机的交通灯控制系统程序清单
;************************************************;
; 交通灯控制系统程序 ;
;************************************************;
;******************初始化部分********************
TIMEEQU50H;秒计数用
TIMESFREQU51H;临时寄存器
CONR5EQU52H;T1秒定时计数用
TIMED0EQU55H;单向最大定时时间,直行开始,人行开
;始(120S)
TIMED1EQU56H;各路右拐开始时间(110S)
TIMED2EQU57H;前行结束提醒(70S)
TIMED3EQU58H;前行结束,人行结束,左拐开始(60S)
TIMED4EQU59H;左拐结束提醒
TIMED5EQU5AH;左拐结束
TIMED6EQU5BH
TIMED7EQU5CH
SNEQUP1;南北口
EWEQUP2;东西口
SCANEQUP3;扫描口
LEDOUTEQUP0;段码口
SNEWFLAGBIT09H;东西口与南北口转换标志
;*************中断入口程序********************
ORG0000H;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H;外中断0中断程序入口
RETI;外中断0中断返回
ORG000BH;定时器T0中断程序入口
LJMPINTT0;跳至INTT0执行
ORG0013H;外中断1中断程序入口
LJMPINT11;119﹑120中断
ORG001BH;定时器T1中断程序入口
LJMPINTT1
ORG0023H;串行中断程序程序返回
RETI
;****************主程序*********************
;P3.6所接S2开关打开,为120秒倒计时,合上,则为60秒倒计时
;P3.7所接S2开关打开,正常状态,合上,全红灯。
;定时器T0﹑T1溢出周期为50ms,T0为秒计数用
START:
MOVSP,#80H
MOVR0,#00H;清00H~8EH内存单元
MOVR7,#8FH
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOVTIMED0,#78H;单向最大定时时间,直行开始
;人行开始
MOVTIMED1,#6EH;各路右拐开始时间(110S)
MOVTIMED2,#46H;前行结束提醒(70S)
MOVTIMED3,#3CH;前行结束,人行结束,左拐开始
;(60S)
MOVTIMED4,#0AH;左拐结束提醒
CLRSNEWFLAG;南北先通行标志位
MOVTMOD,#01H;设T0,T1为16位定时器
MOVTL0,#0B0H;50ms定时初值(T0记时用)
MOVTH0,#3CH;50ms定时初值
MOVTL1,#0B0H;50ms定时初值
MOVTH1,#3CH;50ms定时初值
JBSCAN.6,SSST;120s管理
;以下为60s管理
LCALLDL1MS
LCALLDL1MS
LCALLDL1MS
JBSCAN.6,SSST;干扰
MOVTIMED0,#60;单向最大定时时间,直行开始
;人行开始
MOVTIMED1,#55;各路右拐开始时间(55S)
MOVTIMED2,#35;前行结束提醒(35S)
MOVTIMED3,#30;前行结束,人行结束,左拐开始(30S)
MOVTIMED4,#05;左拐结束提醒
SSST:
MOVTIME,TIMED0
LCALLTUNBCD
MOVSN,#99H
MOVEW,#0AAH
SETBEA;总中断开放
SETBPX1
SETBEX1
SETBET0;允许T0中断
SETBTR0;开启T0定时器
MOVR4,#14H;1S定时用初值(50ms×20)
MOVCONR5,#20
START1:
LCALLDISPLAY;调用显示子程序
JNBSCAN.7,KEYFUN;手动状态
SJMPSTART1;P3.7为1时跳回START1
KEYFUN:
LCALLDISPLAY
LCALLDISPLAY
JBSCAN.7,START1
CLRET0
CLRTR0
MOVSN,#0A9H;全车道停,行人通
MOVEW,#0A9H
MOVTIME,#00H;时间显示0
LCALLTUNBCD
KEYWAIT:
LCALLDISPLAY
JNBSCAN.7,KEYWAIT
KEYWAIT1:
LCALLDISPLAY
JNBSCAN.7,KEYWAIT1
MOVTIME,TIMED0;重新开始计时初值
LCALLTUNBCD
CLRSNEWFLAG;南北先通行标志位
SETBTR0
SETBET0
AJMPSTART1
;*****************1s计时程序(T0定时器中断服务子程序)*****************
INTT0:
PUSHACC;累加器入栈保护
PUSHPSW;状态字入栈保护
CLRET0;关T0中断允许
CLRTR0;关闭定时器T0
MOVA,#0B7H;中断响应时间同步修正
ADDA,TL0;低8位初值修正
MOVTL0,A;重装初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH0
MOVTH0,A;重装初值(高8位修正值)
SETBTR0;开启定时器T0
DJNZR4,OUTT00;20次中断到(1S),重赋初值
MOVR4,#14H
JBSNEWFLAG,INT22
DECTIME
MOVA,TIME
CJNEA,TIMED1,LOOP11;判断是否小于110S
LOOP11:
JCLOOP22;120-110
MOVSN,#99H
MOVEW,#0AAH
LJMPOUTT0;120-110
LOOP22:
MOVA,TIME
CJNEA,TIMED2,LOOP33;判断是否小于70S
LOOP33:
JCLOOP44;110-70
MOVSN,#95H
MOVEW,#0A6H
LJMPOUTT0;110-70
LOOP44:
MOVA,TIME
CJNEA,TIMED3,LOOP55;判断是否小于60S
LOOP55:
JCLOOP66;70-60
MOV20H,SN
CPL04H
CPL00H
MOVSN,20H
MOVEW,#0A6H
LJMPOUTT0;70-60
LOOP66:
MOVA,TIME
CJNEA,TIMED4,LOOP77;判断是否小于10S
LOOP77:
JCLOOP88;60-10
MOVSN,#66H
MOVEW,#0A6H
LJMPOUTT0;60-10
LOOP88:
MOVA,TIME
JZOUT88
MOV20H,SN
CPL06H
CPL02H
MOVSN,20H
MOV20H,EW
CPL02H
MOVEW,20H
LJMPOUTT0;70-60
OUT88:
MOVTIME,TIMED0;20初值
CPLSNEWFLAG
OUTT0:
LCALLTUNBCD
OUTT00:
POPPSW;恢复状态字(出栈)
POPACC;恢复累加器
SETBET0;开放T0中断
RETI;中断返回
INT22:
DECTIME
MOVA,TIME
CJNEA,TIMED1,LOOP111;判断是否小于110S
LOOP111:
JCLOOP221;120-110
MOVEW,#99H
MOVSN,#0AAH
LJMPOUTT01;120-110
LOOP221:
MOVA,TIME
CJNEA,TIMED2,LOOP331;判断是否小于70S
LOOP331:
JCLOOP441;110-70
MOVEW,#095H
MOVSN,#0A6H
LJMPOUTT01;110-70
LOOP441:
MOVA,TIME
CJNEA,TIMED3,LOOP551;判断是否小于60S
LOOP551:
JCLOOP661;70-60
MOV20H,EW
CPL04H
CPL00H
MOVEW,20H
MOVSN,#0A6H
LJMPOUTT01;70-60
LOOP661:
MOVA,TIME
CJNEA,TIMED4,LOOP771;判断是否小于10S
LOOP771:
JCLOOP881;60-10
MOVEW,#66H
MOVSN,#0A6H
LJMPOUTT01;60-10
LOOP881:
MOVA,TIME
JZOUT881
MOV20H,EW
CPL06H
CPL02H
MOVEW,20H
MOV20H,SN
CPL02H
MOVSN,20H
LJMPOUTT01;70-60
OUT881:
MOVTIME,TIMED0;120S初值
CPLSNEWFLAG
OUTT01:
LCALLTUNBCD
POPPSW;状态恢复字(出栈)
POPACC;恢复累加器
SETBET0;开放T0中断
RETI;中断返回
;**********************显示子程序******************
;显示数据在70H~72H单元内,用3位LED共阳数码管显示,LEDOUT口输出段
;码数据,
;P3(SCAN)口作扫描控制,每个LED数码管亮1ms再逐位循环
DISPLAY:
MOVR1,#70H;指向显示数据首址
MOVR5,#0FEH;扫描控制字初值
PLAY:
MOVA,R5;扫描字放入A
MOVSCAN,A;从SCAN口输出
MOVA,@R1;取显示表地址
MOVDPTR,#TAB;取段码表地址
MOVCA,@A+DPTR;查显示数据对应段码
MOVLEDOUT,A;段码放入LEDOUT口
LOOP6:
LCALLDL1MS;显示1ms
INCR1;指向下一地址
MOVA,R5;扫描控制字放入A
JNBACC.2,ENDOUT;ACC.2=0时,一次显示结束
RLA;A中数据循环左移
MOVR5,A;放回R5内
MOVLEDOUT,#0FFH
AJMPPLAY;跳回PLAY循环
ENDOUT:
MOVLEDOUT,#0FFH;一次显示结束,端口复位
MOVSCAN,#0FFH;端口复位
RET;子程序返回
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB0FFH,88H,0BFH
;共阳段码表"0","1","2","3","4","5","6","7","8","9"
;"不亮","A","-"
;***********************延时子程序*******************
;1ms延时程序,LED显示程序用
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;*******************十六进制转换为BCD码的子程序*******************
TUNBCD:
PUSHACC
PUSHPSW
PUSHB
MOVA,TIME
MOVB,#100
DIVAB
MOV72H,A
JNZJJ0
MOV72H,#0AH;最高位为0,不点亮
JJ0:
MOVA,B
MOVB,#10
DIVAB
MOV71H,A
JNZJJ1
MOVA,72H;次高位为0,先看最高位是否为不亮
SUBBA,#0AH
JNZJJ1
MOV71H,#0AH;最高位不亮,次高位也不亮
JJ1:
MOV70H,B
POPB
POPPSW
POPACC
RET
;*********************119,120特种车中断服务子程序****************
INT11:
PUSHACC
PUSHPSW
CLREX1
CLRET0
CLRTR0
MOVSN,#AAH;全红灯
MOVEW,#AAH
MOVTIMESFR,TIME;保存道口数据
MOVTIME,#0FH
MOVCONR5,#20
LCALLTUNBCD
SETBET1
SETBTR1
POPPSW
POPACC
RETI
;******************15s计时程序(T1中断服务程序)*********************
INTT1:
PUSHACC;累加器入栈保护
PUSHPSW;状态字入栈保护
CLRET1;关T1中断允许
CLRTR1;关闭定时器T1
MOVA,#0B7H;中断响应时间同步修正
ADDA,TL1;低8位初值修正
MOVTL1,A;重装初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH1
MOVTH1,A;重装初值(高8位修正值)
SETBTR1;开启定时器T1
DJNZCONR5,OUTT333;20次中断未到,中断退出
MOVCONR5,#14H;20次中断到(1S),重赋初值
DECTIME
LCALLTUNBCD
MOVA,TIME
JZOUT444
OUT333:
SETBET1
POPPSW
POPACC
RETI
OUT444:
CLRTR1
CLRET1
MOVTIME,TIMESFR
LCALLTUNBCD
SETBET0
SETBTR0
SETBEX1
POPPSW
POPACC
RETI
END;程序结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 附录一 交通灯控制程序清单 附录 交通灯 控制程序 清单