中北大学2010届毕业设计说明书
开始 初始化 A绿灯 B红灯 延时55s 绿灯闪3次 延时2s A红灯 B绿灯 延时25s B绿灯闪烁3次 B黄灯 A红灯 延时2s 图3.10 主程序框图 4.3.2 主程序设计
ORG 0000H;
LJMP MAIN ;转向主程序 ORG 0003H
LJMP INTTO ;转向紧急车辆终端中断服务程序
第 21 页 共 36 页
中北大学2010届毕业设计说明书
ORG 0013H
主程序为:
MAIN:MOV SP,#30H ;设定堆栈指针
SETB PX0 ;置外部中断0为高优先级中断 MOV TCON,#00H ;置外部中断0,1为电平触发 MOV TMOD,#10H MOV IE,#85H LOOP:MOV P1,#0F3H MOV R1,#110 DIP1:ACALL DELAY DJNZ R1,DIP1 MOV R1,#06 WAN1:CPL P1.2 ACALL DELAY
DJNZ R1,WAN1 MOV P1,#0F5H MOV R1,#04H YL1:ACALL DELAY
DJNZ R1,YL1 MOV P1,#0DEH MOV R1,#32H DIP2:ACALL DELAY
DJNZ R1,DIP2 MOV P1,#06H
WAN2:CPL P1.5 ACALL DELAY DJNZ R1,WAN2
MOV P1,#02EH MOV R1,#04H
;置定时器1为方式1
CPU中断,开外中断0,1中断 ;A道绿灯放行,B道红灯禁止 ;置0.5s循环次数(0.5X110=55s)
;调用0.5s延时子程序
;55s不到继续循环 ;置A绿灯闪烁循环次数
;A绿灯闪烁
;闪烁次数未到继续循环 ;A黄灯警告,B红灯禁止 ;置0.5s循环次数(1.5X4=2s)
;2s未到继续循环 ;A红灯,B绿灯
;置0.5s循环次数(0.5X50=25s)
;25s未到继续循环 ;B绿灯闪烁
;A红灯,B黄灯 第 22 页 共 36 页
;开中北大学2010届毕业设计说明书
YL2:ACALL DELAY
DJNZ R1,YL2
AJMP LOOP ;循环执行主程序
DELAY:MOV R3,#0AH ;0.5s子程序(50msX10=0.5s)
MOV TH1,#3CH ;置50ms初值x=3CB0H MOV TL1,#0B0H
SETB TR1 ;启动T1 LP1:JBC TF1,LP2 ;查寻计数溢出
SJMP LP1
LP2:MOV TH1,#3CH ;置50ms初值x=3CB0H
MOV TL1,#0B0H DJNZ R3,LP1 RET
4.3.3 中断程序框图
中断子程序的主要任务是:当有紧急车辆通过时,中断服务程序也需要保护现场,调用延时子程序和P1口,但是不需要关中断,因为其为高优先级中断,然后执行相应的中断服务,每0.5mS定时器中断发生,程序跳转到中断服务程序INTT0开始执行。中断服务程序一次将定时器中断计数变量减1,当定时器中断中数值变量为0时,0.5S定时时间到,将位变量SECOND_FLAG置1。定时器中断服务通过RETI指令返回,程序将跳转到中断前断点继续执行。待交通信号出现后延时20s,确保紧急车辆通过交叉路口,然后恢复现场,返回继续执行主程序[25]。
第 23 页 共 36 页
中北大学2010届毕业设计说明书
中断响应 保护现场 CPU检测是否为低电平 A红灯,B红灯 恢复现场 返回 图4.2 中断程序框图 4.3.4 中断子程序设计
INTT0:PUSH P1 ;P1口数据压栈保护
PUSH TH1 ;TH1压栈保护 PUSH TL1 ;TL1压栈保护 MOV P1,#0F6H ;A,B道均为红灯
MOV R2,#40 ;置0.5s循环初值(20s)DEY0:ACALL DELAY
DJNZ R2,DEY0 ;20s未到继续循环 POP TL1 ;弹栈恢复现场 POP TH1 POP P1
RETI ;返回主程序
第 24 页 共 36 页
中北大学2010届毕业设计说明书
4.3.5 中断绍及使用
所谓中断,是指在计算机执行程序过程中,当出现某种情况,如发生紧急事件或其他情况时,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前后程序的执行,而转去执行相应的处理程序,待处理程序完成之后,再返回来继续执行原来被中断的程序。外部中断有两个:INT0和INT1,分电平触发和边沿触发两种形式,由特殊功能计数器TCON中的IT0、IT1控制。TCON既与中断控制有关,又与定时器控制有关。
特殊功能寄存器TCON的地址为88H,可位寻址,每一位有相应的位地址,其格式如表4.1示:
表4.1 TCON位置位格式
TCON(88H) D7 D6 D5 D4 D3 D2 D1 D0 位地址 功能 8FH TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0
当IT0=0(IT1=1)时,INT0(INT1)为低电平触发方式。CPU在每个机器周期对
INT0(INT1)采样,一旦在P3.2引脚上检测到低电平时,则认为有中断请求,使IE0
(IE1)置“1”,向CPU申请中断。本设计采用的是外部中断0,即INT0. 4.3.6定时器/计数器的介绍
单片机的定时器/计数器模块是由定时器0、定时器1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。定时器0和定时器1实际上是两个16位的加法计数器,分别由两个8位的特殊功能寄存器组成。定时器/计数器T0的输入脉冲周期与机器周期一样,为振荡频率的1/12,本设计的时钟频率为12MHZ,现要采用中断方法去实现0.5S延时,要在定时器0中设置一个时间常数,使其每隔0.5S产生一次中断,CPU响应中断后将R0中计数值减一,令R0=0AH,即实现0.5S延时。
若将T0的工作方式设定为工作方式1,则T0的初值为3CB0H,即利用MOV TH0,#3CH和MOV TL0,#0B0H指令赋初值。
第 25 页 共 36 页