logo资料库

红绿灯系统程序(汇编语言).pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
实验源程序:
实验源程序: ;-------------------内存分配--------------------------; TWINKLE TIME_500MS TIME_1S OUTPUT EQU EQU EQU EQU 20H 25H 30H P0 ;闪烁标志 ;500ms 计时标志 ;1s 计时标志 ;P0 输出口标志 ;-----------------------------------------------------; ORG 0000H SJMP MAIN ORG 000BH LJMP TIMEOUT ORG LJMP EMERGENCY0 ORG LJMP EMERGENCY1 ORG 0003H 0013H 0030H MAIN: MOV MOV CLR CLR CLR MOV MOV MOV MOV SETB P1,#0FFH P2,#0 TWINKLE TIME_500MS TIME_1S TMOD,#01H TH0,#3CH TL0,#0B0H IE,#87H TR0 ;定时器中断 ;外部中断 0 ;外部中断 1 ;初始化 I\O 口 ;初始化各标志位 ;定义定时器 T0 工作于模式 1 ;定时器定时 50ms ;开定时器 T0 与外部 0\1 中断 ;启动定时器 ;-------------状态一:南北禁行,东西直行------------------; STATE1: MOV MOV MOV CLR CLR CALL MOV CJNE P1,#0FFH R6,#50 R7,#25 P1.7 P1.0 DISPLAY A,R7 A,#0,LOOP1 LOOP1: ;送南北红灯 50s 倒计时 ;送东西直行绿灯 25s 倒计时 ;南北红灯亮 ;东西直行绿灯亮 ;调用数码管显示程序 ;倒计时剩余时间数送 A ;时间是否到,到则进状态二,未到则循环显示 ;-------------状态二:南北禁行,东西左转-----------------; STATE2: P1,#0FFH MOV
MOV MOV CLR CLR CALL MOV CJNE R6,#25 R7,#20 P1.7 P1.1 DISPLAY A,R7 A,#0,LOOP2 LOOP2: 显示 ;南北红灯剩余 25S ;送东西左转绿灯 20s 倒计时 ;南北红灯亮 ;东西左转绿灯亮 ;调用数码管显示程序 ;时间是否到,到则进状态三,未到则循环 ;-------------状态三:南北禁行,东西黄灯闪烁-------------; STATE3: LOOP3: MOV P1,#0FFH MOV MOV CLR CLR JNB CLR AJMP SETB NEXT: SHAKING: CALL MOV CJNE CLR R6,#5 R7,#5 P1.7 P1.2 TWINKLE,NEXT P1.2 SHAKING P1.2 DISPLAY A,R6 A,#0,LOOP3 TWINKLE ;南北红灯剩余 5s ;送东西黄灯闪烁倒计时 5s ;南北红灯亮 ;东西黄灯亮 ;判断闪烁标志位,为 0 转移 ;标志位为 1 时,点亮黄灯 ;标志位为 0 时,熄灭黄灯 ;判断 5s 时间是否到 ;定时到则清闪烁标志位,进入状态四 ;--------------状态四:东西禁行,南北直行-----------------; STATE4: MOV MOV MOV CLR CLR CALL MOV CJNE MOV MOV MOV CLR CLR CALL MOV CJNE P1,#0FFH R6,#25 R7,#50 P1.4 P1.3 DISPLAY A,R6 A,#0,LOOP4 P1,#0FFH R6,#20 R7,#25 P1.3 P1.5 DISPLAY A,R6 A,#0,LOOP5 LOOP4: LOOP5: 显示 ;--------------状态五:东西禁行,南北左转弯----------------; STATE5: ;送南北直行 25s 倒计时 ;送东西禁行 50s 倒计时 ;点亮南北直行绿灯 ;点亮东西禁行红灯 ;时间是否到,到则进状态五,未到则循环显示 ;送南北左转弯倒计时 20s ;东西禁行时间剩余 25s ;点亮东西禁行红灯 ;点亮南北左转绿灯 ;时间是否到,到则进状态六,未到则循环
;--------------状态六:东西禁行,南北黄灯闪烁---------------; STATE6: LOOP6: P1,#0FFH R6,#5 R7,#5 P1.3 P1.6 MOV MOV MOV CLR CLR JNB TWINKLE,NEXT1 CLR SJMP SETB NEXT1: SHAKING1:CALL MOV CJNE CLR LJMP P1.6 SHAKING1 P1.6 DISPLAY A,R6 A,#0,LOOP6 TWINKLE MAIN ;送南北黄灯闪烁 5s 倒计时 ;东西红灯剩余 5s ;点亮东西禁行红灯 ;点亮南北黄灯 ;判断闪烁标志位,为 0 转移 ;标志位为 1 时,点亮黄灯 ;标志位为 0 时,熄灭黄灯 ;判断 5s 时间是否到 ;定时到则清闪烁标志位 ;状态六执行完毕后,跳回主程序开始位置 ;--------------紧急情况一:南北方向紧急通行,东西红灯常亮-----------; EMERGENCY0: MOV MOV MOV MOV CLR CLR AJMP P1,#0FFH P2,#00H R6,#0 R7,#0 P1.3 P1.4 $ ;停留在紧急状态中,按复位按钮退出 ;--------------紧急情况二:南北红灯常亮,东西方向紧急通行-----------; EMERGENCY1: MOV MOV MOV MOV CLR CLR AJMP $ P1,#0FFH P2,#00H R6,#0 R7,#0 P1.0 P1.7 ;停留在紧急状态中,按复位按钮退出 ;--------------------50ms 定时器中断---------------------------------; TIMEOUT: CLR MOV MOV INC INC MOV EA TH0,#3CH TL0,#0B0H TIME_500MS TIME_1S A,TIME_500MS ;关中断,防止计时紊乱 ;重新置 50ms 计时初值 ;500ms 计时单元加一 ;1s 计时单元加一
CJNE A,#0AH,NEXT3 ;判断 500ms 计时是否到:未到则跳转 NEXT3 MOV CPL TIME_500MS,#0 TWINKLE ;到则使 500ms 计时单元清 0 ;500ms 到一次,则闪烁位取反一次,该指 令用于控制黄灯的 0.5s 闪烁 NEXT3: A,TIME_1S A,#20,QUIT MOV CJNE 则中断返回主程序 MOV DEC DEC SETB RETI QUIT: TIME_1S,#0 R7 R6 EA ;到则使 1s 计时单元清 0 ;倒计时过一秒则减一 ;中断返回前开中断 ;判断 1s 计时是否到:20*50=1000。未到 ;东西倒计时值送 A ;B 取值 10 ;利用除法分离倒计时的个位与十位 ;查表,DPTR 存 TAB 表的首地址 ;查表,获得东西方向十位上的显示段码 ;显示段码输出到显示端口 ;选通东西数码管十位数显口 ;-----------------数码管显示子程序:用于显示倒计时值-----------------; DISPLAY: MOV A,R7 MOV B,#0AH DIV AB MOV DPTR,#TAB MOVC A,@A+DPTR MOV OUTPUT,A CLR P2.4 CALL DELAY_1MS SETB P2.4 MOV A,B MOV DPTR,#TAB MOVC A,@A+DPTR MOV CLR CALL SETB OUTPUT,A P2.5 DELAY_1MS P2.5 ;延时 1ms ;关闭十位位选 ;个位 ;关闭个位位选 ;查表,获得东西方向个位上的显示段码 ;选通东西数码管个位数显口 ;南北倒计时送 A ;查表,获得南北方向十位上的显示段码 ;选通南北数码管十位数显口 MOV A,R6 MOV B,#0AH DIV AB MOV DPTR,#TAB MOVC A,@A+DPTR MOV CLR CALL SETB MOV MOV OUTPUT,A P2.6 DELAY_1MS P2.6 A,B DPTR,#TAB
MOVC A,@A+DPTR MOV CLR CALL SETB RET OUTPUT,A P2.7 DELAY_1MS P2.7 ;查表,获得南北方向个位上的显示段码 ;选通东西数码管个位数显口 ;子程序返回 ;-------------------延时子程序:1ms-------------------------; DELAY_1MS: MOV MOV DJNZ DJNZ RET R1,#2 R2,#248 R2,NEXT4 R1,NEXT4 ;2 ;2 ;2*248=496 ;496*2=992 NEXT4: ;-----------------TAB 表:共阴极段选码-----------------------; TAB: 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB END
分享到:
收藏