单片机交通灯的汇编程序

单片机交通灯的汇编程序,第1张

NAMET3I/O口扩展实验一

PORTEQU 0CFA0H 片选地址CS0

CSEG AT 0000H

LJMP START

CSEG AT 4100H

START: MOVA,#11H 两个红灯亮,黄灯、绿灯灭

ACALL DISP 调用273显示单元(以下雷同)

ACALL DE3S延时3秒

LLL:MOVA,#12H 东西路口绿灯亮南北路口红灯亮

ACALL DISP

ACALL DE10S 延时10秒

MOVA,#10H 东西路口绿灯灭南北路口红灯亮

ACALL DISP

MOVR2,#05H R2中的值为黄灯闪烁次数

TTT:MOVA,#14H 东西路口黄灯亮南北路口红灯亮

ACALL DISP

ACALL DE02S 延时0.2秒

MOVA,#10H 东西路口黄灯灭南北路口红灯亮

ACALL DISP

ACALL DE02S 延时0.2秒

DJNZ R2,TTT 返回TTT,使东西路口黄灯闪烁五次

MOVA,#11H 两个红灯亮,黄灯、绿灯灭

ACALL DISP

ACALL DE02S 延时0.2秒

MOVA,#21H 东西路口红灯亮南北路口绿灯亮

ACALL DISP

ACALL DE10S 延时10秒

MOVA,#01H 东西路口红灯亮南北路口绿灯灭

ACALL DISP

MOVR2,#05H 黄灯闪烁五次

GGG:MOVA,#41H 东西路口红灯亮南北路口黄灯亮

ACALL DISP

ACALL DE02S 延时0.2秒

MOVA,#01H 东西路口红灯亮南北路口黄灯灭

ACALL DISP

ACALL DE02S 延时0.2秒

DJNZ R2,GGG 返回GGG,使南北路口黄灯闪烁五次

MOVA,#03H 两个红灯亮,黄灯、绿灯灭

ACALL DISP

ACALL DE02S 延时0.2秒

JMPLLL 转LLL循环

DE10S: MOVR5,#100 延时10秒

JMPDE1

DE3S: MOVR5,#30 延时3秒

JMPDE1

DE02S: MOVR5,#02 延时0.2秒

DE1:MOVR6,#200

DE2:MOVR7,#126

DE3:DJNZ R7,DE3

DJNZ R6,DE2

DJNZ R5,DE1

RET

DISP: MOVDPTR,#PORT 273显示单元

CPLA

MOVX @DPTR,A

RET

END

你看看行不行 如果不行你自己再稍微改一下吧 反正大概就这些了

希望对你能有所帮助。

// 51单片机控制交通灯要求用汇编语言,仿真实例,可以参考一下

SNF   EQU  00H             南北通行标志位

EWF   EQU  01H            东西通行标志位

URF   EQU  02H             紧急事件标志位

ORG   0000H

LJMP  MAIN                 上电转主程序

ORG   000BH                定时中断入口

LJMP  DSZD                  

ORG   0003H                紧急中断入口

LJMP  URZD

ORG   0030H

MAIN: LCALL INIT           调用初始化子程序

LOOP: LCALL DIS            循环执行显示子程序

AJMP  LOOP

*** *** ***   初始化程序

INIT: SETB   SNF            

SETB   EWF        

SETB   URF        

MOV   R2,#20              定时器中断20次为1s

MOV   TMOD,#01H      初始化定时器

MOV   TL0,#0B0H

MOV   TH0,#3CH

SETB  EA                      开定时中断与紧急中断

SETB  ET0

SETB  TR0

SETB  EX0

SETB  IT0                    设置中断程控方式

MOV   DPTR,#TAB      数值首地址放入DPTR中

MOV   40H,#40           东南西北通行时间设置

MOV   41H,#40

MOV   30H,#40           通行时间初始化

MOV   31H,#60

MOV   P0,#4CH        初始化时南北通行并把交通灯状态分别放在32H和33H中

MOV   32H,#4CH

MOV   P2,#15H

MOV   33H,#15H

RET

*** *** ***   显示子程序

DIS:  MOV   P3,#0DFH       选中南北方向的十位数码管

MOV   A,30H               把显示数据送人数码管显示

MOV   B,#10

DIV   AB

MOVC  A,@A+DPTR

MOV   P1,A                

LCALL D1MS

MOV   P3,#0EFH         选中南北方向的个位数码管

MOV   A,B                  送入数码管显示

MOVC  A,@A+DPTR    

MOV   P1,A

LCALL D1MS

MOV   P3,#7FH        选中第东西方向的十位数码管

MOV   A,31H            送入数码管显示

MOV   B,#10

DIV   AB

MOVC  A,@A+DPTR

MOV   P1,A

LCALL D1MS

MOV   P3,#0BFH       选中第东西方向的个位数码管

MOV   A,B

MOVC  A,@A+DPTR

MOV   P1,A

LCALL D1MS

SETB  P3.0

SETB  P3.1

JNB   P3.0,DIS_S     查询是否第一个按键按下

JNB   P3.1,DIS_E     查询是否第二个按键按下

AJMP  DIS_R          没有键按下则返回

DIS_S:LCALL D5MS           按键去抖

JNB   P3.0,DIS_SN

AJMP  DIS_R

DIS_SN:MOV   40H,#50       对通行时间从新分配,南北通行时间加长

MOV   41H,#30

AJMP  DIS_R

DIS_E:LCALL D5MS              按键去抖

JNB   P3.1,DIS_EW

AJMP  DIS_R

DIS_EW:MOV   40H,#30       东西通行时间加长

MOV   41H,#50

DIS_R:RET                

*** *** ***   定时中断处理程序

DS_C: LJMP  DS_R            接力跳转

DSZD: PUSH  ACC            保护现场

PUSH  PSW

CLR   TR0                   关定时器及中断标志位并重新赋值

CLR   TF0

MOV   TL0,#0B0H

MOV   TH0,#3CH

DJNZ  R2,DS_C           判断1m时间是否到达

MOV   R2,#20            到达重新赋值

DEC   30H                  南北方向通行时间减一

MOV   A,30H             把减一后的时间送入显示存储单元

*** *** ***   南北通行到达最后4秒时黄灯闪烁

DS_10:CJNE  A,#4,DS_11     如果通行时间剩余4秒

JNB   SNF,DS_11           判断是否是南北通行

MOV   P0,#8AH      

MOV   32H, #8AH         把交通灯状态存入存储单元(后面类似)

DS_11:CJNE  A,#3,DS_12      不是剩余3秒,返回

JNB   SNF,DS_12            不是南北通行时间,返回

MOV   P0,#88H

MOV   32H, #88H

DS_12:CJNE  A,#2,DS_13

JNB   SNF,DS_13

MOV   P0,#8AH

MOV   32H, #8AH

DS_13:CJNE  A,#1,DS_14

JNB   SNF,DS_14

MOV   P0,#88H

MOV   32H, #88H

*** *** ***

DS_14:JNZ   DS_NE          通行时间没有结束转向改变东西方向的数码管

CPL   SNF                  如果通行时间结束则对标志位取反

JNB   SNF,DS_1          判断是否南北通行

MOV   30H,40H          是,点亮相应的交通灯

MOV   P0,#4CH

MOV   32H,#4CH       存储交通灯状态

MOV   P2,#15H

MOV   33H, #15H      存储交通灯状态

DS_NE:DEC   31H             东西方向通行时间减一

MOV   A,31H             把通行剩余时间送入显示存储单元

*** *** ***   东西方向通行时间剩余4秒钟黄灯闪烁(程序注释与南北方向类似 略)

DS_20:CJNE  A,#4,DS_21  

JB    EWF,DS_21

MOV   P0,#51H

MOV   32H, #51H

DS_21:CJNE  A,#3,DS_22

JB    EWF,DS_22

MOV   P0,#41H

MOV   32H, #41H

DS_22:CJNE  A,#2,DS_23

JB    EWF,DS_23

MOV   P0,#51H

MOV   32H, #51H

DS_23:CJNE  A,#1,DS_24

JB    EWF,DS_24

MOV   P0,#41H

MOV   32H, #41H

*** *** ***

DS_24:JNZ   DS_R             东西方向时间没有结束,返回

CPL   EWF                  对通行状态取反

JNB   EWF,DS_2         东西方向通行时间到来,跳转

MOV   31H,#80          东西方向通行结束,重新显示时间

MOV   P0,#89H          点亮相应的交通灯

MOV   32H, #89H

MOV   P2,#29H

MOV   33H, #29H

AJMP  DS_R  

DS_1: MOV   30H,#80          南北通行时间结束,重新对显示存储单元赋值  

MOV   P0,#89H             执行转弯状态1

MOV   32H, #89H

MOV   P2,#26H

MOV   33H, #26H

AJMP  DS_NE          

DS_2: MOV   31H,41H         东西方向开始通行,赋值予显示存储单元

MOV   P0,#61H            点亮相应的交通灯

MOV   32H, #61H

MOV   P2,#15H

MOV   33H, #15H

DS_R: SETB  TR0

POP   PSW                  恢复现场

POP   ACC

RETI

*** *** ***   紧急中断处理程序

URZD: PUSH  ACC             保护现场

PUSH  PSW

CLR   IE0                     清除中断标志位

CLR   TR0                    关定时器

CPL   URF                   紧急事件标志位

JB    URF,UR_CON       紧急结束;跳转

MOV   P0,#49H           各路口灯全显示红灯亮

MOV   P2,#15H

AJMP  UR_R

UR_CON:SETB  TR0            恢复正常交通

MOV   A,32H

MOV   P0,A

MOV   A,33H

MOV   P2,A

UR_R: POP   PSW             恢复现场

POP   ACC

RETI    

*** *** ***   查表指令0,1,2,3,4,5,6,7,8,9

TAB:  DB  3FH,  06H,  5BH,  4FH,  66H,  6DH

DB  7DH,  07H,  7FH,  6FH

*** *** ***   延时5ms与1ms

D5MS:  MOV    R7,#5

D1MS:  MOV    R7,#10

MOV    R6,#50

L1:    DJNZ   R6,$

DJNZ   R7,L1

RET

END

额。。你的要求我做不出来。。不过我这里有一个简单的交通灯。。你可以参考参考 CODE SEGMENT

ASSUME CS:CODE

DENGPROC FAR

CMP BL,0FHJUDGE BL

JC LIANG

SUB BL,0FH

LIANG: MOV AL,81H

CMP BL,04H

JC GO

MOV AL,41H

CMP BL,07H

JC GO

MOV AL,24H

CMP BL,0CH

JC GO

MOV AL ,22H

GO: MOV DX,292H XIANSHI

OUT DX,AL

RET

DENGENDP

START: MOV DX,283H INIT 8253

MOV AL,00010100B

OUT DX,AL

MOV DX,280H

MOV AL,00H

OUT DX,AL

MOV DX,283H

MOV AL,01010100B

OUT DX,AL

MOV DX,281H

MOV AL,10H

OUT DX,AL OUTPUT 1 SIGNAL PER SECOND

MOV DX,293H INIT 8255A

MOV AL,10010000B

OUT DX,AL

MOV BL,00H SET ONE FIRST

LP: MOV AH,0BH SHUT OFF IF TYPE ANYKEY

INT 21H

CMP AL,0FFH

JZ EXT

MOV DX,290H

IN AL,DX

AND AL,01H

CMP AL,01H HERE IS 1 SECOND SIGNAL

JNZ LP

INC BL

CALL DENG

JMP LP

EXT:MOV AH,4CH

INT 21H

CODEENDS

END START


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7828841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存