定时器TC0自动重装程序····初学者可参考一起学习

[复制链接]
查看3469 | 回复0 | 2017-8-13 23:32:53 | 显示全部楼层 |阅读模式
/****************************************************************************
--程序名:内部中断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

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则