关寄存器等,以便保护中断前红绿灯的状态(保护现场),并且在退出前恢复原来红绿灯状态(恢复现场)。
根据以上软硬件资源的利用情况,制定出程序框图如下。 主程序框图:
开始 定时计数设定 开外中断 初始状态 东西绿灯亮,南北红灯亮,延时18秒 东西黄灯亮,南北红灯亮,延时2秒 东西红灯亮,南北绿灯亮,延时13秒 东西红灯亮,南北黄灯亮,延时2秒 图5.5 主程序图
- 17 -
中断框图:
- 18 -
T0中断 T0赋初值进行10ms计时 紧急情况按钮S1键按下否? Y 停止T0中断,保护P1口状态 N Y 流通按钮S0按下 红灯全亮,停止通行 N 10ms计时器+1 停止T0计数,保护P1口状态 解决紧急状态按钮S1松开否? Y 时间累计1S 主干绿灯亮,支干红灯亮 N 定时计数-1 数码管静态显示 Y S0开? 显示子程序 恢复P1口,启动T0 N 数码管静态显示 中断返回 中断返回 恢复P1口,启动T0 中断返回
图5.6 中断框图
- 19 -
5.2.3 汇编语言源程序 (1). 有关参数计算
本设计T0定时时间为10毫秒,计满10毫秒就响应一次中断,计满100次刚好为一秒。
T0定时器采用工作方式1,为16位计数器,晶振频率为6MHz(12MHz),则机器周期为:
12÷6MHz = 2微秒(1us)
定时值为10毫秒,计数值为10000÷2=5000(10000÷1=10000)
初值X0=M-计数值=65536–5000=60536=EC78H(X0=65536-10000=55536=D8F0H) 根据16位定时器的特性,初值应为;TH0=0ECH(0D8H),TL0=78H(0F0H) (2). 部分源程序 ORG 0000H
AJMP MAIN ;转主程序 ORG 000BH AJMP T0_INT
ORG 0030H
;转定时器T0服务子程序
MAIN: MOV SP, #50H
MOV TMOD, #01H ;T0,定时方式1
MOV TL0, #78H ;定时 10ms,晶振6MHZ MOV TH0, #0ECH
SETB EA ;开总中断 SETB ET0 ;允许T0中断
SETB TR0 ;启动定时器
MOV R3,#64H ;设定中断次数 LOP: MOV R4, #18 MOV R5, #20
LOP0: MOV P1,#0F3H ;东西绿灯亮,南北红灯亮 ACALL RIS CJNE R4,#00H,LOP0 MOV R4,#02
- 20 -
相关推荐: