📄 timer.asm
字号:
.mmregs
.include "c5xx.inc" ;"init54x.inc"
.def MAIN_START
.def timer0_rev
STACK .usect "STACK",20h
.data
TIM0 .set 0024h ;定时器0的TIM 寄存器地址
PRD0 .set 0025h ;定时器0的PRD 寄存器地址
TCR0 .set 0026h ;定时器0的TCR 寄存器地址
t0_flag .set 0060h ;定义输出判别标志
t0_counter .usect "vars", 1 ;定义计数长度变量
SWCR .set 2BH
.text
MAIN_START:
STM #0000h,SWWSR
STM #0010h,TCR0 ; TCR TSS=1 ,关断定时器0
STM #39999,TIM0 ;TIM0赋初值
STM #39999,PRD0 ;PRD0赋初值
ST #0,t0_flag
STM #0269h,TCR0 ;ON TIM0 in TCR TSS=0
STM #0008h,IFR ;TINT0=1 ,清除未处理完的定时器中断
STM #0008h,IMR ; TINT0=1 ,开放(允许)定时器中断
RSBX INTM ;开放全部中断
;jj:
; NOP
; NOP
; NOP
; B jj
RET
; 定时器0中断服务子程序.其功能是:每定时中断一次计数器减1,这样减100次就延时1s,并改变一次XF的值,使XF高低电平各持续1s,形成2s周期.
timer0_rev:
PSHM TRN
PSHM T
PSHM ST0
PSHM ST1
RSBX CPL ;复位CPL,选用页指针DP的直接寻址方式
ADDM #-1,*(t0_counter) ;计数器减1
CMPM *(t0_counter),#0 ;判断计数器是否减至0: 如果t0_counter=0,则TC=1 ,否则TC=0
BC wait ,NTC ;如果没有减至0,即TC=0,则执行wait程序段
;如果减至0,即TC=1,计数器重新开始计数
ST #100,*(t0_counter)
BITF t0_flag,#1
BC xf_out,NTC ;TC=0时,执行xf_out程序段
SSBX XF ;TC=1时
ST #0,t0_flag ;t0_flag=0,为下次XF变低电平作准备
B wait
xf_out:
RSBX XF
ST #1,t0_flag ;t0_flag=1,为下次XF变高电平作准备
wait:
POPM ST1
POPM ST0
POPM T
POPM TRN
RETE
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -