附录一 交通灯控制程序清单.docx

上传人:b****5 文档编号:28756139 上传时间:2023-07-19 格式:DOCX 页数:13 大小:18.11KB
下载 相关 举报
附录一 交通灯控制程序清单.docx_第1页
第1页 / 共13页
附录一 交通灯控制程序清单.docx_第2页
第2页 / 共13页
附录一 交通灯控制程序清单.docx_第3页
第3页 / 共13页
附录一 交通灯控制程序清单.docx_第4页
第4页 / 共13页
附录一 交通灯控制程序清单.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

附录一 交通灯控制程序清单.docx

《附录一 交通灯控制程序清单.docx》由会员分享,可在线阅读,更多相关《附录一 交通灯控制程序清单.docx(13页珍藏版)》请在冰豆网上搜索。

附录一 交通灯控制程序清单.docx

附录一交通灯控制程序清单

附录一交通灯控制程序清单

基于单片机的交通灯控制系统程序清单

;************************************************;

;         交通灯控制系统程序     ;

;************************************************;

;******************初始化部分********************

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模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1