ORG 0000H ;初始值
LJMP BEGIN ;长转移到BEGIN
ORG 0003H :外部中断0入口地址
LJMP WINT0 ;长转移到
、
ORG 000BH ;计数器T0的中断服务程序入口地址
LJMP COUNTERO ;T0对定时器T1的溢出进行计数
ORG 0013H ;外部中断1入口地址
LJMP WINT1
ORG 001BH ;定时器T1的中断服务程序入口地址
LJMP TIMER1 ;定时器1输出100ms的时基信号
ORG 0030H 外部中断0入口地址
BEGIN: CLR IT0 ;设置外部中断为低电平触发
CLR IT1 ;设置外部中断为低电平触发
MOV TMOD,#16H ;T1定时,工作方式1;T0计数,工作方式2
MOV TL1,#0B0H ;设置T1定时100ms,作为时基信号
MOV TH1,#3CH 互相传递 高8位 TMOD;定时器
MOV TL0,#9CH ;T0对时基信号计数100次
MOV TH0,#9CH
SETB TR1 将TR置1
SETB TR0
SETB EA ;打开中断允许
SETB ET0 允许计数器T0中断,否则禁止中断
SETB ET1
SETB EX0 允许外部中断0中断,否则禁止中断
SETB EX1
SETB PX0;将外部中断0的优先级设置为最高
FLAG BIT 00H ;设置10S时间到标志位
CLR FLAG 清楚标志
;水滴形点亮方案
WATER: JBC FLAG,FLASH ;10s时间到,转下一状态 JBC:直接位为1转移并清0该位
MOV 00H,#08H 硬控位
MOV R2,#00000000B ;使到底的灯保称常亮
START: MOV R1,00H ;使亮灯的循环次数逐次减少
MOV A,#10000000B
LOOP: MOV R3,A
ORL A,R2 A或R2=A
CPL A 取反A
MOV P1,A
LCALL DELAY 延时 LCALL:长子程序调用
MOV A,R3
RR A 右移一位,改变显示模式字
DJNZ R1,LOOP R1工作寄存器内容减1不为0转移
SETB PSW.7 设置标志位PSW.7 =1
MOV A,R2
RLC A RLC:带进位循环左移
MOV R2,A
DJNZ 00H,START DJNZ:直接字节减1不为0转移
MOV P1,#0FFH
LCALL DELAY
SJMP WATER 转移到最上面的 WATER
;拉幕型点亮方案
FLASH: JBC FLAG,FLASH_SLOW ;10s时间到,转下一状态
MOV R1,#00H
MOV DPTR,#TABLE 设数据指针 DPTR指向存储区的首地址TABLE
标号 LOOP1: MOV A,R1
MOVC A,@A+DPTR
CPL A 进位位取反
MOV P1,A
LCALL DELAY 延时
INC R1
CJNE R1,#08H,LOOP1 CJNE:立即数与寄存器相比,不相等则转移
SJMP FLASH
;慢闪方案
FLASH_SLOW:JBC FLAG,FLASH_FAST ;10s时间到,转下一状态
MOV A,#0FFH
MOV P1,A
LCALL LONG_DELAY
CPL A
MOV P1,A
LCALL LONG_DELAY
SJMP FLASH_SLOW
;快闪方案
FLASH_FAST: JBC FLAG,WATER ;10s时间到,回到第一个状态
MOV A,#0FFH
MOV P1,A
LCALL SHORT_DELAY
CPL A
MOV P1,A
LCALL SHORT_DELAY
JNB FLAG,FLASH_FAST
SJMP FLASH_FAST
DELAY: MOV R4,#64H
LP1: MOV R5,#64H
LP2: NOP
NOP
NOP
NOP
DJNZ R5,LP2
DJNZ R4,LP1
RET
LONG_DELAY: MOV R4,#0F0H
LP3: MOV R5,#0A8H
LP4: NOP
NOP
NOP
NOP
DJNZ R5,LP4
DJNZ R4,LP3
RET
SHORT_DELAY: MOV R4,#30H
LP5: MOV R5,#80H
LP6: NOP
NOP
NOP
NOP
DJNZ R5,LP6
DJNZ R4,LP5
RET
COUNTERO: SETB FLAG ;计数器T0的中断服务程序,计数器计数到100次,时间达到10S,标志位置1
RETI
TIMER1: SETB P3.4 ;定时器T1的中断服务程序,在计数器T0的计数引脚上产生计数信号
CLR P3.4
MOV TL1,#0B0H ;重新装入初始值,T1定时100ms
MOV TH1,#3CH
RETI
WINT1: MOV A,#10101010B ;外部中断1,使1、3、5、7只发光二极管以1Hz的频率点亮
MOV P1,A
LCALL DELAY500ms
MOV P1,#0FFH
LCALL DELAY500ms
SJMP WINT1
WINT0: MOV A,#01010101B ;外部中断0,使2、4、6、8只发光二极管以10Hz的频率点亮
MOV P1,A
LCALL DELAY50ms
MOV P1,#0FFH
LCALL DELAY50ms
SJMP WINT0
;延时0.5s子程序
DELAY500ms: MOV 3FH,#05H
LP7: JNB TF1,$
CLR TF1
DJNZ 3FH,LP7
RET
;延时0.05s子程序
DELAY50ms: MOV TH1,#9EH ;重新装入初始值
MOV TL1,#58H
JNB TF1,$
CLR TF1
RET
TABLE:DB 81H,0C3H,0E7H,0FFH,0E7H,0C3H,81H,00H ;拉幕型点亮的显示码
END
LJMP BEGIN ;长转移到BEGIN
ORG 0003H :外部中断0入口地址
LJMP WINT0 ;长转移到
、
ORG 000BH ;计数器T0的中断服务程序入口地址
LJMP COUNTERO ;T0对定时器T1的溢出进行计数
ORG 0013H ;外部中断1入口地址
LJMP WINT1
ORG 001BH ;定时器T1的中断服务程序入口地址
LJMP TIMER1 ;定时器1输出100ms的时基信号
ORG 0030H 外部中断0入口地址
BEGIN: CLR IT0 ;设置外部中断为低电平触发
CLR IT1 ;设置外部中断为低电平触发
MOV TMOD,#16H ;T1定时,工作方式1;T0计数,工作方式2
MOV TL1,#0B0H ;设置T1定时100ms,作为时基信号
MOV TH1,#3CH 互相传递 高8位 TMOD;定时器
MOV TL0,#9CH ;T0对时基信号计数100次
MOV TH0,#9CH
SETB TR1 将TR置1
SETB TR0
SETB EA ;打开中断允许
SETB ET0 允许计数器T0中断,否则禁止中断
SETB ET1
SETB EX0 允许外部中断0中断,否则禁止中断
SETB EX1
SETB PX0;将外部中断0的优先级设置为最高
FLAG BIT 00H ;设置10S时间到标志位
CLR FLAG 清楚标志
;水滴形点亮方案
WATER: JBC FLAG,FLASH ;10s时间到,转下一状态 JBC:直接位为1转移并清0该位
MOV 00H,#08H 硬控位
MOV R2,#00000000B ;使到底的灯保称常亮
START: MOV R1,00H ;使亮灯的循环次数逐次减少
MOV A,#10000000B
LOOP: MOV R3,A
ORL A,R2 A或R2=A
CPL A 取反A
MOV P1,A
LCALL DELAY 延时 LCALL:长子程序调用
MOV A,R3
RR A 右移一位,改变显示模式字
DJNZ R1,LOOP R1工作寄存器内容减1不为0转移
SETB PSW.7 设置标志位PSW.7 =1
MOV A,R2
RLC A RLC:带进位循环左移
MOV R2,A
DJNZ 00H,START DJNZ:直接字节减1不为0转移
MOV P1,#0FFH
LCALL DELAY
SJMP WATER 转移到最上面的 WATER
;拉幕型点亮方案
FLASH: JBC FLAG,FLASH_SLOW ;10s时间到,转下一状态
MOV R1,#00H
MOV DPTR,#TABLE 设数据指针 DPTR指向存储区的首地址TABLE
标号 LOOP1: MOV A,R1
MOVC A,@A+DPTR
CPL A 进位位取反
MOV P1,A
LCALL DELAY 延时
INC R1
CJNE R1,#08H,LOOP1 CJNE:立即数与寄存器相比,不相等则转移
SJMP FLASH
;慢闪方案
FLASH_SLOW:JBC FLAG,FLASH_FAST ;10s时间到,转下一状态
MOV A,#0FFH
MOV P1,A
LCALL LONG_DELAY
CPL A
MOV P1,A
LCALL LONG_DELAY
SJMP FLASH_SLOW
;快闪方案
FLASH_FAST: JBC FLAG,WATER ;10s时间到,回到第一个状态
MOV A,#0FFH
MOV P1,A
LCALL SHORT_DELAY
CPL A
MOV P1,A
LCALL SHORT_DELAY
JNB FLAG,FLASH_FAST
SJMP FLASH_FAST
DELAY: MOV R4,#64H
LP1: MOV R5,#64H
LP2: NOP
NOP
NOP
NOP
DJNZ R5,LP2
DJNZ R4,LP1
RET
LONG_DELAY: MOV R4,#0F0H
LP3: MOV R5,#0A8H
LP4: NOP
NOP
NOP
NOP
DJNZ R5,LP4
DJNZ R4,LP3
RET
SHORT_DELAY: MOV R4,#30H
LP5: MOV R5,#80H
LP6: NOP
NOP
NOP
NOP
DJNZ R5,LP6
DJNZ R4,LP5
RET
COUNTERO: SETB FLAG ;计数器T0的中断服务程序,计数器计数到100次,时间达到10S,标志位置1
RETI
TIMER1: SETB P3.4 ;定时器T1的中断服务程序,在计数器T0的计数引脚上产生计数信号
CLR P3.4
MOV TL1,#0B0H ;重新装入初始值,T1定时100ms
MOV TH1,#3CH
RETI
WINT1: MOV A,#10101010B ;外部中断1,使1、3、5、7只发光二极管以1Hz的频率点亮
MOV P1,A
LCALL DELAY500ms
MOV P1,#0FFH
LCALL DELAY500ms
SJMP WINT1
WINT0: MOV A,#01010101B ;外部中断0,使2、4、6、8只发光二极管以10Hz的频率点亮
MOV P1,A
LCALL DELAY50ms
MOV P1,#0FFH
LCALL DELAY50ms
SJMP WINT0
;延时0.5s子程序
DELAY500ms: MOV 3FH,#05H
LP7: JNB TF1,$
CLR TF1
DJNZ 3FH,LP7
RET
;延时0.05s子程序
DELAY50ms: MOV TH1,#9EH ;重新装入初始值
MOV TL1,#58H
JNB TF1,$
CLR TF1
RET
TABLE:DB 81H,0C3H,0E7H,0FFH,0E7H,0C3H,81H,00H ;拉幕型点亮的显示码
END