原创 “简单交通灯程序”加注释版

2009-4-2 11:36 2018 4 4 分类: MCU/ 嵌入式

        这是前段时间用(51内核)汇编语言实现的简单交通灯的程序,拿出来作为参考,希望多提意见。


;简单交通灯程序
;南北向红灯时,东西向绿灯30s
;东西向红灯时,南北向红的30s
;中间黄灯过渡3s
;数码管实现倒计时功能
;由主程序、BCD转换子程序、延时子程序、中断服务子程序组成
;P1.0~P1.2为南北向红黄绿灯
;P1.3~P1.5为东西向红黄绿灯
;P2口为显示驱动
;P0.0~P0.1为显示位选信号
;主程序完成程序的初始化与灯的切换
;BCD转换子程序完成数制转换
;延时子程序完成延时1s
;中断服务子程序完成5ms动态显示
ORG 00H
AJMP START
ORG 0BH
AJMP INT_T0;跳转到中断服务程序
ORG 30H
START:MOV SP,#60H;置堆栈指针
MOV A,#00H
MOV P0,A
MOV P1,A
MOV P2,A;初始化端口
CLR 00H;显示标志位初始化
MOV DPTR,#TAB;装入显示表头
MOV TMOD,#01H;T0置方式1
MOV TH0,#HIGH(65535-5000)
MOV TL0,#LOW(65535-5000);装初值
MOV IE,#82H;中断允许
SETB TR0;中断运行
LOOP1:MOV R0,#30;南北红,东西绿
MOV P1,#00100001B
LOOP11:ACALL TO_BCD
ACALL DELAY
DJNZ R0,LOOP11
LOOP2:MOV R0,#3;黄灯亮
MOV P1,#00010010B
LOOP22:ACALL TO_BCD
ACALL DELAY
DJNZ R0,LOOP22
LOOP3:MOV R0,#30; 南北绿,东西红
MOV P1,#00001100B
LOOP33:ACALL TO_BCD
ACALL DELAY
DJNZ R0,LOOP33
LOOP4:MOV R0,#3;黄灯亮
MOV P1,#00010010B
LOOP44:ACALL TO_BCD
ACALL DELAY
DJNZ R0,LOOP44
AJMP LOOP1
INT_T0:PUSH ACC;中断服务子程序
MOV TH0,#HIGH(65535-5000)
MOV TL0,#LOW(65535-5000);装初值
LOW_DIS:JB 00H,HIGH_DIS;显示个位
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
SETB P0.0
CLR P0.1
CPL 00H
AJMP RETURN
HIGH_DIS:JNB 00H,LOW_DIS;显示十位
MOV A,R2
MOVC A,@A+DPTR
MOV P2,A
CLR P0.0
SETB P0.1
CPL 00H
RETURN:POP ACC
RETI
TO_BCD:MOV A,R0;BCD转换
MOV B,#10
DIV AB
MOV R1,B
MOV R2,A
RET
DELAY:MOV R7,#10;延时1s程序
DEL1:MOV R6,#200
DEL2:MOV R5,#248
DJNZ R5,$
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
ORG 300H
;LED显示数据
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,
DB 92H,82H,0F8H,80H,90H
ENDb.gif

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条