具体实现功能
具体实现功能:
(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
更多资料欢迎关注“电子工程师成长日记”
|