附录Ar
H_REDBITP21;定义IO端口r
H_GREENBITP22r
H_YELLOWBITP23r
L_REDBITP24r
L_GREENBITP25r
L_YELLOWBITP26r
;主程序,选择设置红绿灯时间模式或自动调整模式r
ORG0000Hr
LJMPMAINr
ORG0003H;中断入口r
LJMPINT0r
ORG0030Hr
MAINMOVR320;用于嵌套50ms软件方法计时1sr
MOVR020;预设值红绿灯时间r
MOVR120r
CLREX0r
K1MOVCP37;等待检测何种模式按键按下r
ANLCP32r
JBCK1r
JNBP37F;F键按下为自动模式,进入扫描r
K2JNBP32S;S键按下并等待计数次数r
SJMPK2r
FLCALLDELAYr
MOVR030r
MOVR130r
SETB00Hr
SETBEAr
SETBEX1r
SJMPSTARTr
SLCALLDELAYr
CJNZR040V1r
MOVR020r
V1INCR0r
JNBP01r
JNBP36J;J键按下并等待计数次数r
SJMPK2r
JLCALLDELAYr
CJNZR140V2r
MOVR120r
V2INCR1r
JNBP36r
JNBP37START;设置完毕为设定时间模式,进入扫描r
JNBP36Jr
MOVP20DDH;预设信号灯状态,时间和车向r
MOVR4R0r
SETB01Hr
SETBEX0r
;程序开始,进行每50ms扫描r
STARTMOVTMOD01Hr
MOVTH03CHr
MOVTL00B0Hr
CLRTF0r
SETBTR0;开始50ms计时r
DJNZR3Y;1s是否计时完毕r
MOVR320r
DJNZR4Y;本状态是否结束,并进行下一状态设置r
MOVAP2r
CJNZA0DDHD1r
MOVP2BDHr
MOVR45r
D1CJNZABDHD2r
MOVP2EDHr
MOVR4R1r
CLR01Hr
D2CJNZAEDHD3r
MOVP2E7Hr
MOVR45r
JNB00HD3r
LCALLDATAr
D3CJNZAE7HYr
MOVR2DDHr
MOVR4R0r
SETB01Hr
YMOVAR4;LED倒计时显示r
MOVB10r
DIVABr
MOBDPTRLEDMAPr
MOVCAADPTRr
MOVP1Ar
MOVABr
MOVCAADPTRr
MOVP0Ar
LEDMAPDBC0HF9HA4HB0H99H92H82HF8H80H90Hr
JNB00HWAIT;判断是否要计数车流量r
JBP33WAIT;判断是否有车经过r
WAITJNBTF0WAIT;50ms一次扫描完毕r
SJMPSTARTr
INT1JNB01HU;判断车向r
INCR5r
UINCR6r
RETIr
INT0SETBP34;中断服务子程序,闯红灯或紧停按键r
JBP37r
LCALLDELAYr
CLRP34r
RETIr
DATAMOVAR6;车流量数据处理及红绿灯时间调整r
MOVBR0r
MULABr
MOVR6Ar
MOVAR5r
MOVBR1r
MULABr
MOVB10r
MULABr
MOVBR6r
DIVABr
CJNZA7M1r
M2MOVR220r
MOVR140r
SJMPOUTr
M1JBCM2r
CJNZA15N1r
N2MOVR030r
MOVR130r
SJMPOUTr
N1JBCN2r
MOr