/****************************************************************************
--程序名:内部中断TC0应用
--功能:利用定时器TC0中断自动重装实现P2.0LED闪烁
--时间:2017.8.13 22:00
****************************************************************************/
CHIP SN8P2501B
//{{SONIX_CODE_OPTION
.Code_Option LVD LVD_H ; 2.4V Reset Enable LVD36 bit of PFLAG for 3.6V Low Voltage Indicator
.Code_Option Reset_Pin Reset
.Code_Option Watch_Dog Disable
.Code_Option High_Clk 4M_X'tal ; Crystal/Resonator: 2Mhz~10Mhz
.Code_Option Fcpu #2 ; Fcpu = Fosc/4
.Code_Option Security Disable
.Code_Option Noise_Filter Disable
//}}SONIX_CODE_OPTION
.DATA
ACC_BUF DS 1
INT_COUNT DS 1
INT_FLAG DS 1
.CONST
INTCOUNT EQU 10
.CODE
ORG 0000H
JMP RESET
ORG 0008H
JMP INT_SERVE
ORG 0009H
RESET: B0BSET FP20M
B0BSET FP20
MOV A,#INTCOUNT
MOV INT_COUNT,A
MOV A,#04H//设置定时器TC0工作模式TC0CKS为0定时开启定时器TC0自动重装
MOV TC0M,A
MOV A,#3DH//赋初始值
MOV TC0C,A
B0BCLR FTC0IRQ//TC0标志位清零
B0BSET FTC0ENB//开启定时器
B0BSET FTC0IEN//开启定时器TC0中断
B0BSET FGIE//开总中断
START: B0BTS1 INT_FLAG.0
JMP START
BCLR INT_FLAG.0//中断标志位清零
DECMS INT_COUNT//中断次数减去1
JMP START
MOV A,#INTCOUNT
MOV INT_COUNT,A
MOV A,#0FFH
XOR P2,A
MOV A,#0FEH
OR P2,A
JMP START
/****************************************************************************
--程序名:INT_SERVE
--功能:50MS进入中断一次自动重装
****************************************************************************/
INT_SERVE:XCH A,ACC_BUF//保存ACC中的内容
PUSH //将系统工作寄存器0x80-0x87压入堆栈
B0BTS1 FTC0IEN//TC0中断源是否允许中断
JMP INT_EXIT
B0BTS1 FTC0IRQ//TC0中断标志位是否置位
JMP INT_EXIT
INT_EXIT:B0BCLR FTC0IRQ//清除中断标志位
BSET INT_FLAG.0//中断次数标志位置位
POP//将系统工作寄存器0X80-0X87从堆栈中恢复
XCH A,ACC_BUF
RETI
ENDP
|