⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiaotongdeng.txt

📁 本系统就是充分利用了8051和8255芯片的I/O引脚。系统统采用MSC-51系列单片机Intel8051和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器
💻 TXT
字号:
(1)主程序 
定时器需定时50毫秒,故T0工作于方式1。 初值: 
TC=M-T/ T计数 =216 -50ms/1us=15536=3CBOH 
ORG 1000H 
START: MOV TMOD, #01H ; 令TO为定时器方式1 
MOV TH0, #3CH ;装入定时器初值 
MOV TL0, #BOH ; 
MOV IE, #82H ;开T0中断 
SEBT TRO ;启动T0计数器 
MOV RO, #14H ;软件计数器赋初值 
LOOP: SJMP $ ;等待中断 
(2)中断服务子程序 
ORG 000BH 
AJMP BRT0 
ORG 00BH 
BRTO:DJNZ R0,NEXT 
AJMP TIME ; 跳转到时间及信号灯显示子程序 
DJNZ:MOV RO,#14H ;恢复R0值 
MOV TH0, #3CH ;重装入定时器初值 
MOV TL0, #BOH ; 
MOV IE, #82H 
RET1 
END 
5.3 软件延时 
MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为6MHZ。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。 
具体的延时程序分析: 
DELAY:MOV R4,#08H 延时1秒子程序 
DE2:LCALL DELAY1 
DJNZ R4,DE2 
RET 

DELAY1:MOV R6,#0 延时125ms 子程序 
MOV R5,#0 
DE1: DJNZ R5,$ 
DJNZ R6,DE1 
RET 

MOV RN,#DATA 字节数数为2 机器周期数为1 
所以此指令的执行时间为2ms 
DELAY1 为一个双重循坏 循环次数为256*256=65536 所以延时时间=65536*2=131072us 约为125us 
DELAY R4设置的初值为8 主延时程序循环8次,所以125us*8= 1秒 
由于单片机的运行速度很快其他的指令执行时间可以忽略不计。 

5.4 时 


图9 程序流程图 
5.5.2 程序源代码 

ORG 0000H ;主程序的入口地址 
LJMP MAIN ;跳转到主程序的开始处 
ORG 0003H ;外部中断0的中断程序入口地址 
ORG 000BH ;定时器0的中断程序入口地址 
LJMP T0_INT ;跳转到中断服务程序处 
ORG 0013H ;外部中断1的中断程序入口地址 
MAIN : MOV SP,#50H 
MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断 
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1 
MOV TH1,#00H ;T1计数器清零 
MOV TL1,#00H 
SETB TR1 ;启动T1计时器 
SETB EX1 ;允许INT1中断 
SETB IT1 ;选择边沿触发方式 
MOV DPTR ,#0003H 
MOV A, #80H ;给8255赋初值,8255工作于方式0 
MOVX @DPTR, A 
AGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转 
MOV A,P1 
JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间 
MOV R0,#00H ;R0清零 
MOV R0,A ;存入东西方向绿灯初始时间 
MOV R3,A 
LCALL DISP1 
LCALL DELAY 
AJMP AGAIN 
RED: MOV A,P1 
ANL A,#7FH ;P1.7置0 
MOV R7,#00H ;R7清零 
MOV R7,A ;存入东西方向红灯初始时间 
MOV R3,A 
LCALL DISP1 
LCALL DELAY 
AJMP AGAIN 
;------------------------------------------- 
N0: SETB TR0 ;启动T0计时器 
MOV 76H,R7 ;红灯时间存入76H 
N00: MOV A,76H ;东西方向禁止,南北方向通行 
MOV R3,A 
MOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮 
MOV A,#0DDH 
MOVX @DPTR, A 
N01: JB P2.0,B0 
N02: SETB P3.0 
CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行 
;------黄灯闪烁5秒程序------ 
N1: SETB P3.0 
MOV R3,#05H 
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮 
MOV A,#0D4H 
MOVX @DPTR,A 
N11: MOV R4,#00H 
N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒 
N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭 
MOV A,#0DDH 
MOVX @DPTR,A 
N14: MOV R4,#00H 
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒 
CJNE R3,#00H,N1 ;闪烁时间达5秒则退出 
;------------------------------------------------------------ 
N2: MOV R7,#00H 
MOV A,R0 ;东西通行,南北禁止 
MOV R3,A 
MOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮 
MOV A,#0EBH 
MOVX @DPTR,A 
N21: JB P2.0,T03 

N22: CJNE R3,#00H,N21 
;------黄灯闪烁5秒程序------ 
N3: MOV R3,#05H 
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮 
MOV A,#0E2H 
MOVX @DPTR,A 
N31: MOV R4,#00H 
CJNE R4,#7DH,$ ;黄灯持续亮0.5秒 
N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭 
MOV A,#0EBH 
MOVX @DPTR,A 
N33: MOV R4,#00H 
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒 
CJNE R3,#00H,N3 ;闪烁时间达5秒则退出 
SJMP N00 
;------闯红灯报警程序------ 
B0: MOV R2,#03H ;报警持续时间3秒 
B01: MOV A,R3 
JZ N1 ;若倒计时完毕,不再报警 
CLR P3.0 ;报警 
CJNE R2,#00H,B01 ;判断3秒是否结束 
SJMP N02 
;------1秒延时子程序------- 
N7: RETI 
T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值 
MOV TH0,#0F1H 
INC R4 
INC R5 
CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序 
MOV R5,#00H ;R5清零 
DEC R3 ;倒计时初值减一 
DEC R2 ;报警初值减一 
T01: ACALL DISP ;调用显示子程序 
RETI ;中断返回 
;------显示子程序------ 
DISP: JNB P2.4,T02 
DISP1: MOV B,#0AH 
MOV A,R3 ;R3中值二转十显示转换 
DIV AB 
MOV 79H,A 
MOV 7AH,B 
DIS: MOV A,79H ;显示十位 
MOV DPTR,#TAB 
MOVC A,@A+DPTR 
MOV DPTR,#0002H 
MOVX @DPTR,A 
MOV DPTR,#0001H 
MOV A,#0F7H 
MOVX @DPTR,A 
LCALL DELAY 
DS2: MOV A,7AH ;显示个位 
MOV DPTR,#TAB 
MOVC A,@A+DPTR 
MOV DPTR,#0002H 
MOVX @DPTR,A 
MOV DPTR,#0001H 
MOV A,#0FBH 
MOVX @DPTR,A 
RET 
;------东西方向车流量检测程序------ 
T03: MOV A,R3 
SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量 
JZ N3 
JB P2.0,T03 
INC R7 
CJNE R7,#64H,E1 
MOV R7,#00H ;中断到100次则清零 
E1: SJMP N22 
;------东西方向车流量显示程序------ 
T02: MOV B,#0AH 
MOV A,R7 ;R7中值二转十显示转换 
DIV AB 
MOV 79H,A 
MOV 7AH,B 
DIS3: MOV A,79H ;显示十位 
MOV DPTR,#TAB 
MOVC A,@A+DPTR 
MOV DPTR,#0002H 
MOVX @DPTR,A 
MOV DPTR,#0001H 
MOV A,#0F7H 
MOVX @DPTR,A 
LCALL DELAY 
DS4: MOV A,7AH ;显示个位 
MOV DPTR,#TAB 
MOVC A,@A+DPTR 
MOV DPTR,#0002H 
MOVX @DPTR,A 
MOV DPTR,#0001H 
MOV A,#0FBH 
MOVX @DPTR,A 
LJMP N7 
;------延时4MS子程序---------- 
DELAY: MOV R1,#0AH 
LOOP: MOV R6,#64H 
NOP 
LOOP1: DJNZ R6,LOOP1 
DJNZ R1,LOOP 
RET 
;------字符表------ 
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 
END 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -