;在同一个应用程序中实现下述功能
;1.用定时器0的方式1定时,P1.7接发光二极管L7,使该发光二极管每秒钟
;闪烁5次,要求采用中断方式。尝试改变闪烁频率,观察闪烁效果。
;2.用定时器1的方式2计数,T1脚接单脉冲发生器输出,用(P1.0~P1.6连
;接7个发光二极管L0~L6)来显示计数值(不使用中断)。
代码
ORG 0000H
LJMP MAIN
ORG 000BH;T0中断入口
LJMP T0_INT
ORG 0100H
MAIN:
CLR A
MOV TL1, A
MOV TH1, A
MOV P1,A
MOV TMOD,#61H
MOV TL0,#15536 MOD 256
MOV TH0,#15536/256
SETB EA
SETB ET0
SETB TR0
SETB TR1
MOV R7,#10;存放T0中断次数,改为10便于观察闪烁次数
MOV R6,TL1
MOV R0, #10;闪烁5次共10次操作
LOOP:
CLR C
MOV A,TL1
SUBB A,R6;判断计数值是否变化
JZ LOOP;如果累加器为0则转移,相当于计数值没变
READ:
MOV A,TL1
MOV R6, TL1
CJNE A, TL1,READ;校验两次读到的TL1是否相同
MOV C,P1.7;保留最高位
MOV ACC.7,C;将最高位恢复到即将写入的数据
MOV P1,A
SJMP LOOP
T0_INT:
A1: DJNZ R7,BACK
CPL P1.7
MOV R7,#10
DJNZ R0, BACK
CLR TR0;5次闪烁共10次操作完毕,关闭定时器0
SJMP A2;返回主程序
BACK:
MOV TL0,#15536 MOD 256;给定时器0重装初值
MOV TH0,#15536/256
A2: RETI
END