(1)南北绿灯,东西红灯60S倒计时;
(2)60S将结束时,南北绿灯闪烁两次,转换为黄灯,南北黄灯与东西黄灯持续2S;
(3)南北红灯,东西绿灯30S倒计时。
51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。
文献研究法:搜集整理相关单片机智能手环系统相关研究资料,认真阅读文献,为研究做准备;
调查研究法:通过调查、分析、具体试用等方法,发现单片机智能手环系统的现状、存在问题和解决办法;
比较分析法:比较不同单片机智能手环系统的具体原理,以及同一类传感器性能的区别,分析单片机智能手环系统的研究现状与发展前景;
软硬件设计法:通过软硬件设计实现具体硬件实物,最后测试各项功能是否满足要求。
本设计利用protues8.7软件实现仿真设计,具体如图。
Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。另外,protues还能实现PCB的设计,在仿真中也可以与KEIL实现联调,便于程序的调试,且支持多种平台,使用简单便捷。
本设计由汇编语言编写,主代码具体如下:
ORG 0000H
LJMP MAIN ;转向主程序
ORG 0003H
LJMP INTT0 ;转向紧急车辆中断服务程序
ORG 0013H
LJMP INTT1 ;转向有车车道中断服务程序
ORG 0200H
MAIN:MOV SP,#30H
SETB PX0 ;置外部中断0为高优先级中断
MOV TCON,#00H ;置外部中断0、1为电平触发
MOV TMOD,#10H ;置定时器1为方式1
MOV IE,#85H ;开CPU中断,开外中断0、1中断
LOOP: MOV P1,#0F3H ;A道绿灯放行,B道红灯禁止
MOV R1,#90 ;置0.5秒循环次数(0.5×90=45S)
DIP1: ACALL DELAY ;调用0.5秒延时子程序
DJNZ R1,DIP1 ;45秒不到继续循环
MOV R1,#06 ;置A绿灯闪烁循环次数
WAN1: CPL P1.2 ;A绿灯闪烁
ACALL DELAY
DJNZ R1,WAN1 ;闪烁次数未到继续循环
MOV P1,#0F5H ;A黄灯警告,B红灯禁止
MOV R1,#04H ;置0.5秒循环次数(0.5×4=2S)
YL1:ACALL DELAY
DJNZ R1,YL1 ;2秒未到继续循环
MOV P1,#0DEH ;A红灯,B绿灯
MOV R1,#32H ;置0.5秒循环次数(0.5×50=25S)
DIP2: ACALL DELAY
DJNZ R1,DIP2 ;25秒未到继续循环
MOV R1,#06H
WAN2: CPL P1.5 ;B绿灯闪烁
ACALL DELAY
DJNZ R1,WAN2
MOV P1,#0EEH ;A红灯,B黄灯
MOV R1,#04H
YL2: ACALL DELAY
DJNZ R1,YL2
AJMP LOOP ;循环执行主程序
INTT0:PUSH P1 ;P1口数据压栈保护
PUSH ACC ;ACC寄存器压栈保护
PUSH TH1 ;TH1压栈保护
PUSH TL1 ;TL1压栈保护
MOV P1,#0F6H ;A、B道均为红灯
MOV R2,#40 ;置0.5秒循环初值(20S)
DEY0: ACALL DELAY
DJNZ R2,DEY0 ;15秒未到继续循环
POP TL1 ;弹栈恢复现场
POP TH1
POP ACC
POP P1
RETI ;返回主程序
INTT1: CLR EA ;关中断
PUSH P1 ;压栈保护现场
PUSH ACC
PUSH TH1
PUSH TL1
SETB EA ;开中断
JB P3.0,BOP ;A道无车转向B道
MOV P1,#0F3H ;A道绿灯,B道红灯
SJMP DEL1 ;转向15秒延时
BOP: JB P3.1,EXIT ;B道无车退出中断
MOV P1,#0DEH ;A红灯,B绿灯
DEL1: MOV R5,#30 ;置0.5秒循环初值(15S)
NEXT: ACALL DELAY
DJNZ R5,NEXT ;15秒未到继续循环
EXIT: CLR EA
POP TL1 ;弹栈恢复现场
POP TH1
POP ACC
POP P1
SETB EA
RETI
DELAY: MOV R3,#0AH ;0.5秒子程序(50ms×10=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
END
更多资料欢迎关注“电子工程师成长日记”