设计分享|51单片机交通灯(汇编)

2022-07-27 18:44:43 浏览数 (1)

具体实现功能:

(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可选。

设计思路

文献研究法:搜集整理相关单片机智能手环系统相关研究资料,认真阅读文献,为研究做准备;

调查研究法:通过调查、分析、具体试用等方法,发现单片机智能手环系统的现状、存在问题和解决办法;

比较分析法:比较不同单片机智能手环系统的具体原理,以及同一类传感器性能的区别,分析单片机智能手环系统的研究现状与发展前景;

软硬件设计法:通过软硬件设计实现具体硬件实物,最后测试各项功能是否满足要求。

设计内容

01

仿真实现

本设计利用protues8.7软件实现仿真设计,具体如图。

Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。另外,protues还能实现PCB的设计,在仿真中也可以与KEIL实现联调,便于程序的调试,且支持多种平台,使用简单便捷。

02

汇编程序

本设计由汇编语言编写,主代码具体如下:

代码语言:javascript复制
         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

0 人点赞