单片机交通灯程序每条代码的意思

单片机交通灯程序每条代码的意思,第1张

ORG

0000H

LJMP

MAIN

ORG

000BH

中断程序入口地址

LJMP

TIME_0

ORG

0040H

MAIN:

MOV

IE,#82H

MOV

TCON

,

#10H

MOV

TH0,

#3CH

MOV

TL0,#0AFH

定时器T0初始帆模老化

MOV

R1,#20

定时累积

RED:

MOV

R2,#30

R2为时间设定

LOOP1:

MOV

A,R2

JZ

GREEN

R2为0时转到GREEN处,改态升变亮灯状态

CALL

SHOW

调用显示子程码培序,显示30s

MOV

P3,#0

SETB

P3.0

LJMP

LOOP1

GREEN:

MOV

R2,#20

LOOP2:

MOV

A,R2

JZ

YELLOW

R2为0时转到YELLOW

处,改变亮灯状态

CALL

SHOW

调用显示子程序,显示20s

MOV

P3,#0

SETB

P3.1

LJMP

LOOP2

YELLOW:

MOV

R2,

#3

3s时间设定

MOV

R0,

#6

MOV

P3,

#00H

SETB

P3.2

闪烁位

LOOP3:

MOV

A,

R2

JZ

RED

MOV

A,

R0

JZ

SHAN

dec

R0

CALL

SHOW

LJMP

LOOP3

SHAN:

MOV

R0,

#6

CPL

P3.2

LJMP

LOOP3

SHOW:

MOV

A,R2

MOV

B,#10

DIV

AB

二进制转十进制

MOV

DPTR

,#TABL

MOVC

A,@A+DPTR

查表

MOV

P1,#0FFH

MOV

P1,A

MOV

P2,#00H

SETB

P2.1

CALL

DELY

MOV

A,B

MOV

DPTR,

#TABL

MOVC

A,

@A+DPTR

MOV

P1,

#0FFH

MOV

P1,

A

MOV

P2,

#00H

SETB

P2.2

CALL

DELY

RET

DELY:

延时子程序

D3:

MOV

R6,

#100

D2:

MOV

R7,

#10

D1:

DJNZ

R7,

D1

DJNZ

R6,

D2

RET

TIME_0:

PUSH

ACC

保护现场

PUSH

PSW

MOV

TH0,

#3CH

MOV

TL0,

#0AFH

定时器T0初始化,定时50ms

DJNZ

R1,

OUT_T0

计时1s后做如下工作

MOV

R1,

#20

DEC

R2

OUT_T0:

POP

PSW

POP

ACC

RETI

TABL:DB

0C0H,

0F9H,

0A4H,

0B0H,

99H,

92H,

82H,

0F8H,

80H,

90H

END

这个是我以前单片机课程设计上我做的程序,希望对你有一定帮助。

要求:根据TD-PIT-B实验箱现有的实验电路,设计电路并编写程序使六个灯按照交通灯变化规律亮、灭或者闪烁。十字路口交通灯的变化规律要求:

(6) 南北路口的歼旦绿灯,东西路口的红灯同时亮30秒。

(7) 南北路口的黄灯闪烁3次,同时东西路口的红灯继续亮。

(8) 南北路口的红灯,东西路口的绿灯同时亮30秒。

(9) 南北路口的红灯继续亮,同时东西路口的黄灯闪烁3次。

(10) 转(11)重复。

当时我们采用的只是二极管p7~p0

东西交通灯我采用的是P7P6P5分别代表红黄绿灯

南北交通灯我采用的是P2P1P0分别代表红黄绿灯,中间的P3P4我空起没用)

LED方面的自己去摸索哈!

实验代码如下:

M8255COUNTB EQU 0D061H

M8255COUNTC EQU 0D062H

M8255MODEEQU 0D063H

M8254COUNT0 EQU 0D040H

M8254MODEEQU 0D043H

CODE SEGMENT

ASSUME CS:CODE

START:MOV DX,M8255MODE 初始化8255

MOV AL,81H工作方式是B口输出,方式0

OUT DX,AL

MOV DX,M8255COUNTB

MOV AL,00H初始状态,灯全亮

OUT DX,AL

CALL DELAY

CALL L00 第一个状态,即南北绿灯亮,东西红灯亮

CALL L01 第二个谨败状态,即南北黄灯闪,东西红灯亮

CALL L02 第三个状态,即南北红灯亮,东西绿灯亮

CALL L03 第四个状态,即南北红灯亮,东西黄灯闪

CALL L04 返回状态一

MOV AX,4C00H 结束返回DOS

INT 21H

L00 PROC NEAR

MOV DX,M8255COUNTB

MOV AL,10000001B 第一个状态,即南北绿灯亮,东西红灯亮

OUT DX,AL

CALL DELAY

CALL GGG 延时30S

RET 返回

L00 ENDP

L01 PROC NEAR 第二个状态,即南祥改颤北黄灯闪,东西红灯亮

PUSH CX

MOV CX,3

STA1:MOV DX,M8255COUNTB

MOV AL,10000010B 南北黄灯亮,东西红灯亮

OUT DX,AL

CALL DELAY

CALL YYY延时1S

MOV DX,M8255COUNTB

MOV AL,10000000B南北黄灯灭,东西红灯亮

OUT DX,AL

CALL DELAY

CALL YYY

LOOP STA1

POP CX

RET

L01 ENDP

L02 PROC NEAR 第三个状态

MOV DX,M8255COUNTB

MOV AL,00100100B 即南北红灯亮,东西绿灯亮

OUT DX,AL

CALL DELAY

CALL GGG延时30S

RET

L02 ENDP

L03 PROC NEAR 第四个状态,即南北红灯亮,东西黄灯闪

PUSH CX

MOV CX,3

STA3:MOV DX,M8255COUNTB

MOV AL,01000100B 南北红灯亮,东西黄灯亮

OUT DX,AL

CALL DELAY

CALL YYY

MOV DX,M8255COUNTB

MOV AL,00000100B 南北红灯亮,东西黄灯灭

OUT DX,AL

CALL DELAY

CALL YYY

LOOP STA3循环STA3

POP CX

RET

L03 ENDP

L04 PROC NEAR 回状态一

MOV DX,M8255COUNTB

MOV AL,10000001B 南北绿灯亮,东西红灯亮

OUT DX,AL

CALL DELAY

RET

L04 ENDP

DELAY PROC NEAR

PUSH CX

MOV CX,0FFH

L3:LOOP L3

POP CX

RET

DELAY ENDP

YYY PROC NEAR

MOV DX,M8254MODE

MOV AL,15H 采用0号计数器,写入低8位,高8位置0

OUT DX,AL

MOV DX,M8254COUNT0

MOV AL,10H

OUT DX,AL

L2: CALL BREAK

MOV DX,M8255COUNTC

INAL,DX

TEST AL,02H测试PC1位

JNZ L2

RET

YYY ENDP

GGG PROC NEAR

MOV DX,M8254MODE

MOV AL,25H写入高8位,低8位置0

OUT DX,AL

MOV DX,M8254COUNT0

MOV AL,03H 计数时间30s

OUT DX,AL

L1: CALL BREAK

MOV DX,M8255COUNTC

IN AL,DX

TEST AL,02H 测试PC1位

JNZ L1

RET

GGG ENDP

BREAK PROC NEAR 防止进入死循环

MOV AH,06H

MOV DL,0FFH

INT 21H

JE RETURN

RETURN: RET

BREAK ENDP

CODE ENDS

END START


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存