;------------单元赋值--------------------
T2CON EQU 0C8H ;T2CON定时/计数控制寄存器
T2MOD EQU 0C9H ;T2MOD控制寄存器
RCAP2L EQU 0CAH;捕获缓冲寄存器低
RCAP2H EQU 0CBH;捕获缓冲寄存器高
TL2 EQU 0CCH ;16位计数储存低位
TH2 EQU 0CDH ;16位计数储存高位
TR2 BIT 0C8H.2;启动T2
TF2 BIT 0C8H.7 ;溢出标志
ET2 BIT IE.5 ;中断允许
EXF2 BIT 0C8H.6 ;外部中断标志
;-------------------------------------------------------
;-----------程序---------------------
ORG 00H
SJMP ABC ;主程序
ORG 2BH ;中断入口
SJMP T2MAIN ;
ABC:
MOV T2CON,#02H ;设置16自动重装计数
MOV R0,#0C9H
MOV A,#0FFH
MOV @R0, A
MOV T2MOD,#0FFH ;设置可递减计数
MOV P3,0C9H ;我刚才检测T2MOD,对不对
MOV TH2,#0FFH ;送人计数初始值
MOV TL2,#0F5H
MOV RCAP2L,#0F5H ;自动重装值
MOV RCAP2H,#0FFH
SETB EA ;开启中断
SETB ET2 ;允许T2中断
CLR P0.0
;CLR P1.1 ;我刚调试用的
SETB TR2 ;启动计数2
SSS:
MOV P2,TL2 ;捕获16位计数地位数值
LCALL YS1S ;延时1s
SJMP SSS ;重新捕获
T2MAIN: ;T2中断服务
CLR TF2
CLR EXF2 ;软清零
MOV A,TH1 ;判断重新装载数值
CJNE A,#0FFH,T2MAIN1 ;判断是递加?还是递减?
CLR P0.1 ;递减帮p0.1清零
SJMP T2END
T2MAIN1:
CLR P0.2 ;递加p0.2清零
T2END:
RETI ;返回中断服务断点开始
YS1S: ;延时1s
MOV R6,#04H
DL0:
MOV R5,#0F8H
DJNZ R5,$
DJNZ R6,DL0
NOP
RET
END
|