;------------單元賦值--------------------
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
|