找回密码
 快速注册

QQ登录

只需一步,快速开始

文理人 首页 资源共享 查看内容

单片机P1口数据输出实验汇编程序(交通灯控制实验)

2010-10-22 22:06| 发布者: 眼镜蛇| 查看: 1953| 评论: 2

摘要: 【设计一】要做一个交通灯的实验,希望大家能帮我,需要程序,汇编语言的。能和图对版的,要求如下: 数码管要用来计时,时间到后灯转换状态 ----------------------------------------------------------------- ...
【设计一】要做一个交通灯的实验,希望大家能帮我,需要程序,汇编语言的。能和图对版的,要求如下:
数码管要用来计时,时间到后灯转换状态

------------------------------------------------------------------------------------
采用51单片机作为系统的MCU,基本完成控制两组交通指示灯交替亮
每个街口有左拐、直行及行人三种指示灯。直行灯每个灯有红、黄、绿三种颜色。自行车与汽车共用左拐和直行灯。
首先东西向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒(同时南北向红灯亮95秒),然后东西向红灯亮95秒钟(同时首先南北向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒),然后东西向的绿灯亮,依次类推。
每次绿灯亮的时候,对应的行人灯亮。
60S/30S/5S/60S/30S/5S
东西道
绿和行人/左转/黄/红/红/红
南北道
红/红/红/绿和行人/左转/黄
行人灯亮的时候有声音提示盲人能通过。
突发交通事故的时候能够紧急全红灯。
在有重要人物通过的时候能手动改为绿灯。
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

本文内容由 眼镜蛇 提供


头晕

不解

扯淡

搞笑

难过

超赞

支持

欠扁
发表评论

最新评论

引用 眼镜蛇 2010-5-21 13:29
【设计二】
2. 基本要求:
在MCS-51单片机实验开发系统DP-51PROC上,在规定的时间内编程实现题目功能。
3. 创新要求
在完成基本要求后,进行创新设计,优化程序功能,如根据用户,由数码显示器显示设定的红绿灯时间和剩余时间等。
三、设计方法和基本原理
1. 问题描述:
在MCS-51单片机实验开发系统DP-51PROC上,设计完成交通灯的控制。用实验系统上的发光二极管表示红绿灯。要求由用户设定红绿灯的时间,以秒为单位,存放在程序存储器的某个单元中。
2. 问题的解决方案:
根据问题描述,可以将问题解决分为三步:
(1) 由定时器实现最小定时。
(2) 根据用户设定的红绿灯时间,进行红绿灯切换,及黄灯的显示。

-------------------------------------------------------------------------------------------


设计说明
1. 因为本设计是交通灯控制设计,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯,然后转状态l南北绿灯通车,东西红灯;过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时3秒,东西仍然红灯;再转状态3,东西绿灯通车,南北红灯;过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时3秒,南北仍然红灯;然后在循环至状态1,依次类推。
2. 中断服务程序的关键是:(1)保护进入中断时的状态,并在退出中断之前恢复进入时的状态。(2)必须在中断程序中设定是否允许中断重入。




ORG 0000H
AJMP MAIN
ORG 0003H
LJMP INT
ORG 0040H
MAIN:MOV SP,#60H
     SETB EA
     SETB EX0
     SETB PX0
     SETB IT0
    MOV P1,#09H
    ACALL DELAY1S
ABC:MOV R0,#3
     MOV R1,#3
    MOV P1,#0CH
    ACALL DELAY1S
DEF:
   
    CLR P1.2
    ACALL DELAY2S
   
    SETB P1.2
    ACALL DELAY2S
    DJNZ R0,DEF
    MOV P1,#0AH
    ACALL DELAY1S
    MOV P1,#11H
    ACALL DELAY1S
    MOV P1,#21H
    ACALL DELAY1S
GHI:CLR P1.5
    ACALL DELAY2S
    SETB P1.5
    ACALL DELAY2S
    DJNZ R1,GHI
    MOV P1,#11H
    AJMP ABC
         
INT: CLR EA
     PUSH PSW
     PUSH ACC
    PUSH 05H
     PUSH 06H
     PUSH 07H
     PUSH P1
     SETB EA
     MOV P1,#09H
     ACALL DELAY1S
     CLR EA
     POP P1
     POP 07H
     POP 06H
     POP 05H
     POP ACC
     POP PSW
     SETB EA
     RETI
DELAY1S:MOV R7,#5
     DEL:MOV R6,#255
     DE:MOV R5,#255
        DJNZ R5,$;FOSC=6MHZ
        DJNZ R6,DE
        DJNZ R7,DEL
        RET
DELAY2S:MOV R4,#250
     DELL:MOV R3,#250
        DJNZ R3,$;FOSC=6MHZ
        DJNZ R4,DELL
        RET
        END
引用 眼镜蛇 2010-5-21 13:33
【设计三】
设计任务
( 按下时依次红灯全亮,同时数码管显示15S的到计时;东西绿灯亮,南北红灯亮,同时数码管显示30S的到计时;计闪次数8次。。。。。。。。。。。。)

-------------------------------------------------------------------------

汇编程序
       MIAO EQU 30H
ORG 0000H
LJMP START
ORG 000BH
LJMP INTET0
START: LACALL  JS1
MOV P1,#0F6H                             ;点亮四个红灯
MOV P3,#0DEH
LCALL  DE15S                             ;延时15S
LLL: MOV P1,#0DBH                    ;东西绿灯亮,南北红灯亮
MOV P3,#0DEH
LCALL   DE30S                             ;延时30S
MOV P1,#0FFH                             ;东西绿灯灭,南北红灯亮
MOV P3,#0DEH
MOV R1,#08H                                ; 计闪次数8次
DDD: MOV P1,#0EDH                    ; 东西黄灯亮,南北红灯亮
MOV P3,#0DEH
ACALL DE02S
MOV P1,#0FFH                              ; 东西黄灯灭,南北红灯亮
DE6S: MOV R5,#60                        ;延时6S  
SJMP DE1
DE02S: MOV R5,#02H                    ; 延时0.2S
DE1: MOV R6,#200
DE2: MOV R7,#126
DE3: DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
JS1: MOV TMOD,#01H                ; 50MS定时常数
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#20                                      ; 1S定时常数
SETB EA
SETB ET0
RET
DE30S: MOV MIAO,#00H
NEXT: MOV A,MIAO
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV    P2,A  
LCALL DELY1S
INC MIAO
MOV A,MIAO
DEC  MIAO
MOV A,MIAO
CJNE A,#30,NEXT
LJMP DE30S
DE15S: MOV MIAO,#00H
NEXT: MOV A,MIAO
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
LCALL DELY1S
INC MIAO
MOV A,MIAO
DEC  MIAO
MOV A,MIAO
CJNE A,#15,NEXT
LJMP DE15S
DELY1S: MOV R5,#100
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

查看全部评论(2)

返回顶部