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