📄 test3.asm
字号:
;/* 名称:基于AT89S52控制6路led--走马灯和依次亮起(速度可调)
;/* 程序概述:单片机AT89S52,晶振24.000MHz。从P1口的输出,高电平有效
;/*************************************************************************/
SX_F BIT 07H ;time0延时标志位,time0
DL_Z DATA 38H
DL_J DATA 45H ;TIME0中断内计数暂存
XSBU3 DATA 50H
;=====================================================
ORG 0000H
LJMP MAIN
ORG 000BH ;Timer0 interrupt enter address
LJMP DLT0
ORG 0030H
;=====================================================
;定时器timer0中断服务程序,定时10ms,晶振24.000MHz
;=====================================================
DLT0: MOV TH0,#0B1H ;0xB1DFH=(65535-20000)=45535
MOV TL0,#0DFH
CLR TR0
MOV XSBU3,#1
DT0: DJNZ DL_J,DT0BM_M
MOV DL_J,DL_Z ;计数次
SETB SX_F ;TIME0延时标志位置1
DT0BM_M: ;慢速判断
JB P3.5,DT0BM_F
INC XSBU3
MOV DL_Z,#200 ;延时2s
DT0BM_F: ;快速判断
JB P3.4,DT0_0V
INC XSBU3
MOV DL_Z,#30 ;延时0.3s
DT0_0V: MOV A,XSBU3 ;常规速度判断
CJNE A,#1,DT0_0VER
MOV DL_Z,#100 ;延时1s
DT0_0VER: SETB TR0
NOP
NOP
NOP
RETI
;=====================================================
;主程序
;=====================================================
MAIN:
// MOV P1,#0FFH
// MOV TALL,#191 ;PWM控制数,最大值255,灰度级别控制
MOV DL_Z,#100 ;time0延时计数(延时定时使用)T=2S
MOV DL_J,DL_Z
MOV SP,#60H
MOV TMOD,#11H ;手动
MOV TH0,#0B1H ;10MS定时控制
MOV TL0,#0DFH
SETB EA
SETB ET0
CLR TR0
CLR SX_F ;time0延时标志位(延时定时使用)
;=====================================================
;LED单个亮起和依次亮起程序
;=====================================================
START: MOV P1,#10000000B
ACALL ZDLT0
MOV P1,#01000000B
ACALL ZDLT0
MOV P1,#00100000B
ACALL ZDLT0
MOV P1,#00010000B
ACALL ZDLT0
MOV P1,#00001000B
ACALL ZDLT0
MOV P1,#00000100B
ACALL ZDLT0
MOV P1,#10000000B
ACALL ZDLT0
MOV P1,#11000000B
ACALL ZDLT0
MOV P1,#11100000B
ACALL ZDLT0
MOV P1,#11110000B
ACALL ZDLT0
MOV P1,#11111000B
ACALL ZDLT0
MOV P1,#11111100B
ACALL DEL
AJMP START
;=====================================================
;time0延时控制,
;=====================================================
ZDLT0: MOV DL_J,DL_Z
CLR SX_F
SETB TR0
ZDLT0_1: JB SX_F,ZDLT0_ED ;计数由DL_J控制,基本t为10ms
AJMP ZDLT0_1
ZDLT0_ED:
CLR SX_F
CLR TR0
RET
/*延时2.5s子程序*/
DEL: MOV R5,#28H
DEL1: MOV R6,#0FFH
DEL2: MOV R7,#0FFH
DEL3: DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -