📄 timer_test.asm
字号:
;=================================================
; 定时器中断例子程序
; File name: INT0_test
; Author: xubing
; Date: 11/11/2004
;=================================================
.mmregs
.global _c_int00
.def TINT0_ISR
.bss StackBuffer,10h
K_TCR .set 0029h
K_TCR_STOP .set 0010h
;TCR定时器控制寄存器各位含义如下:
;RES SOFT FREE PSC TRB TSS(定时器停止状态寄存器) TDDR
;0000 0 0 0000 1 0 (TSS=1时停止定时) 1001
;;;;;;;定时器参数定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIM0 .set 24h ;Timer0 register
PRD0 .set 25h ;Timer0 period counter
TCR0 .set 26h ;Timer0 control register
PERIOD .set 9999 ;定时器周期
.text
;;;;;;;;;;;;;;;中断向量表;;;;;;;;;;;;;;;;;;;;;;
rs B _c_int00
NOP
NOP
nmi B INTRET
NOP
NOP
sint17 B INTRET
NOP
NOP
sint18 B INTRET
NOP
NOP
sint19 B INTRET
NOP
NOP
sint20 B INTRET
.word 0,0
sint21 B INTRET
.word 0,0
sint22 .word 01000h
.word 0,0,0
sint23 .word 0ff80h
.word 0,0,0
sint24 .word 01000h
.word 0,0,0
sint25 .word 0ff80h
.word 0,0,0
sint26 .word 01000h
.word 0,0,0
sint27 .word 0ff80h
.word 0,0,0
sint28 .word 01000h
.word 0,0,0
sint29 .word 0ff80h
.word 0,0,0
sint30 .word 01000h
.word 0,0,0
int0 B INTRET
NOP
NOP
int1 B INTRET
NOP
NOP
int2 B INTRET
NOP
NOP
tint B TINT0_ISR ;定时器中断
NOP
NOP
brint0 B INTRET
NOP
NOP
bxint0 B INTRET
NOP
NOP
trint B INTRET
NOP
NOP
txint B INTRET
NOP
NOP
int3 B INTRET
NOP
NOP
hpint B INTRET
NOP
NOP
q26 .word 0ff80h
.word 0,0,0
q27 .word 01000h
.word 0,0,0
q28 .word 0ff80h
.word 0,0,0
q29 .word 01000h
.word 0,0,0
q30 .word 0ff80h
.word 0,0,0
q31 .word 01000h
.word 0,0,0
_c_int00:
STM #3020h,PMST ;从定位中断向量表到3000h处.
SSBX INTM ;关中断
SSBX SXM
SSBX FRCT ;允许小数相乘
STM #StackBuffer+10h,SP ;设置堆栈
LD #0,DP ;数据页指针指向0页
STM #0008h,IMR ;允许定时器0中断
;允许定时器0中断,IMR寄存器各位含义如下:
; RES DMAC5 DMAC4 BXINT1 BRINT1 HINT INT3 TINT DMAC0 BXINT0 BRINT0 TINT0 INT2 INT1 INT0
; 00 0 0 0 0 0 0 0 0 0 0 1 0 0 0
STM #K_TCR_STOP,TCR ;停止定时器
STM #PERIOD,TIM ;设定定时器寄存器
STM #PERIOD,PRD ;设定定时器周期寄存器
STM #K_TCR,TCR ;启动定时器
STM #0008h,IMR ;允许Timer0中断
STM #0ffffh,IFR ;清中断
RSBX INTM ;开中断
WAIT: NOP ;循环,等待中断发生
B WAIT
;============================================
; Timer0中断程序:TINT0_ISR
;============================================
TINT0_ISR:
ADD #1,A ;A寄存器加1操作
;SSBX XF
stm #20, *ar2
stm #20, *ar1
aa:
ssbx xf ;XF引脚置高
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
banz aa,*ar1-
bb:
rsbx xf ;XF引脚置低
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
rpt #8000 ;重复8001次
nop ;等待
banz bb,*ar2-
RETE
;;;;;;;;;;;;;;;;;;中断返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTRET:
RETE
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -