📄 timer.asm
字号:
**************************************************************************
* timer.asm
* 利用定时器timer0在XF脚产生周期2ms的的方波
**************************************************************************
.title "timer.asm"
.mmregs
.def CodeEntry ;程序入口
.def Tint0_ISR ;Timer0中断服务程序
STACK .usect "STACK",10H ;分配堆栈空间
;设定定时器0控制寄存器的内容
K_TCR_SOFT .set 0b<<11 ;TCR第11位soft=0
K_TCR_FREE .set 0b<<10 ;TCR第10位free=0
K_TCR_PSC .set 0b<<6 ;TCR第9-6位,可不设自动加载
K_TCR_TRB .set 1b<<5 ;TCR第5位TRB=1此位置1,PSC会自动加载
K_TCR_TSS .set 0b<<4 ;TCR第4位TSS=0
K_TCR_TDDR .set 1001b<<0 ;TCR第3-0位TDDR=1001b
K_TCR .set K_TCR_SOFT|K_TCR_FREE|K_TCR_PSC|K_TCR_TRB|K_TCR_TSS|K_TCR_TDDR
K_TCR_STOP .set 1b<<4 ;TSS=1时计数器停止
.data
DATA_DP: ;数据区指针
Flag: .word 1 ;当前XF的电平标志,如果Flag=1,则XF=1
**************************************************************************
*主程序:
**************************************************************************
.text
CodeEntry:
STM #STACK+10H,SP ;设堆栈指针SP
LD #DATA_DP,DP ;设数据地址DP
STM #Flag,AR2 ;AR指向XF标志
;设置中断向量表位置
V_IPTR .set 0080h ;指向0080H,默认是FF80
LDM PMST,A
AND #7FH,A ;保留低7位,清掉高位
OR #V_IPTR,A ;
STLM A,PMST
**************************************************************************
*初始化定时器0,f=50MHz,定时2ms时:
*
*根据定时器长度计算公式:Tt=T*(1+TDDR)*(1+PRD)
*给定TDDR=9,PRD=9999,CLKOUT主频f=40MHz,T=25ns
*Tt=20ns*(1+9)*(1+9999)=2000us=2ms
*f=100Mhz,定时最大是:10ns*2^4*2^16=10ms,
**************************************************************************
PERIOD .set 9999 ;定义计数周期
STM K_TCR_STOP,TCR ;停止计数器0
STM #PERIOD,TIM ;可设成跟PRD一样,也可不设自动加载
STM #PERIOD,PRD ;设定计数周期
STM #K_TCR,TCR ;开始Timer0
stm #0008h,IMR ;允许Timer0中断
STM #0008h,IFR ;清除挂起的中断
RSBX INTM ;开中断
end: NOP
B end
**************************************************************************
*Timer0中断服务程序:TIN0_ISR
**************************************************************************
Tint0_ISR:
PSHM ST0 ;本中断程序影响TC,位于ST0中
;判断当前XF状态并作电平变化
BITF *AR2,#1 ;IF XF_Flag=1 then TC=1 else TC=0
BC ResetXF,TC ;IF TC=1 then XF=0 else XF=1
SetXF:
SSBX XF ;置XF为高电平
ST #1,*AR2 ;相应修改标志
B Next
ResetXF:
RSBX XF ;置XF为高电平
ST #0,*AR2 ;相应修改标志
Next:
POPM ST0
RETE
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -