/****************************************************************************
--程序名:利用定时器T0应用
--功能:利用定时器T0实现P2.0口的LED灯闪烁
--时间:2017.8.10 18:27
****************************************************************************/
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
TIME DS 1//定时器溢出次数变量存储
.CONST
TIME_COUNT EQU 10//定时器溢出次数一次是50MS
.CODE
ORG 0000H
JMP RESET
ORG 0009H
JMP START
RESET: MOV A,#0FFH
B0MOV P2M,A//设置工作在输出模式
MOV A,#0FEH//设置P2口的初始值
B0MOV P2,A
MOV A,#TIME_COUNT//定时器溢出次数
MOV TIME,A
MOV A,#00H//设置定时器分频比为Fcpu/256,并工作在定时模式
B0MOV T0M,A
MOV A,#3DH//给定时器赋初始值 定时器T0的周期*(256-T0的初始值)=定时器溢出时间
B0MOV T0C,A
B0BCLR INTRQ.4//清楚溢出标志位避免误动作
B0BSET T0M.7//启动定时器
START: B0BTS1 INTRQ.4//如果溢出标志位为1则跳过下条指令
JMP START
B0BCLR INTRQ.4//清除溢出标志位
MOV A,#3DH//给定时器赋初始值
B0MOV T0C,A
DECMS TIME//定时器溢出次数减一为0则跳过下条指令
JMP START
MOV A,#TIME_COUNT//重新赋值定时器溢出次数
MOV TIME,A
MOV A,#0FFH//利用异或取反P2口
XOR P2,A
MOV A,#0FEH//保留P2.0位数据
OR P2,A
JMP START |