实验频率可编程的方波发生器(1)一、实验目的
1.掌握片内外设 - 定时器的初始化设置
2.掌握片内外设–中断控制系统的初始化设置
3.掌握根据给定条件计算定时器定时周期PRD
二、实验要求
1.利用定时器
2.利用中断系统,
3.利用通用I/O口---- XF
4. 画程序流程图
三、实验内容与步骤
1. 在CCS环境下建立方波发生器的工程项目
2. 编写方波发生器的.ASM主程序
3. 编写方波发生器的.ASM中断服务程序
4. 编写方波发生器的复位向量.ASM文件
5. 编写方波发生器的链接命令 .CMD文件
6.添加上述文件到方波发生器的工程项目中
7. 调试可编程的方波发生器(200ms)
8. 调试可编程的方波发生器(2s)
9. 利用CCS中的图形窗口显示方波发生器产生的波形
四、实验数据
主程序及中断程序代码:
.title "fangbo.asm"
.mmregs
.def CodeStart ;程序入口
.def TINT0_ISR ;Timer0中断服务程序
STACK .usect "STACK",10H ;分配堆栈空间
edata .usect "edata",100
K_TCR_SOFT .set 0B<<11 ;设置TCR定时器控制寄存器的内容;0左移11位K_TCR_FREE .set 0B<<10 ;TCR第10位free=0
K_TCR_PSC .set 0B<<6 ;TCR第9-6位,可设TDDR一样,也可不设自动加载
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: ;数据区指针
XF_Flag: .word 1 ;当前XF的电平标志,如果XF_Flag=1,则XF=1
.text ;程序区CodeStart:
STM #STACK+10H,SP ;设堆栈指针SP
LD #DATA_DP,DP ;设堆栈指针SP
STM #XF_Flag,AR2 ;标志地址
STM #edata,AR3 ;数据地址
K_IPTR .set 0080h ;设置中断向量地址LDM PMST,A
AND #7FH,A ;保留低7位,清掉高位
OR #K_IPTR,A
STLM A,PMST
CounterSet .set 4
PERIOD .set 3
.asg AR1,Counter
STM #CounterSet,Counter
STM K_TCR_STOP,TCR ;停止定时器
STM #PERIOD,TIM ;装载技术值
STM #PERIOD,PRD ;设定计数周期
STM #K_TCR,TCR ;开始Timer0
STM #0008h,IMR ;允许Timer0中断
STM #0008H,IFR ;清除挂起的中断
RSBX INTM ;开中断
end: nop
B end
TINT0_ISR:
PSHM ST0 ;本中断程序影响TC,位于ST0中
BANZ Next,*Counter-
STM #CounterSet,Counter
BITF *AR2,#1
BC ResetXF,TC
setXF:
ST #1,*AR2
SSBX XF ;置XF为高电平
ST #1,*AR3+
ST #1,*AR3+
ST #1,*AR3+
ST #1,*AR3+
ST #1,*AR3+
ST #1,*AR3+
;SSBX
B Next
ResetXF:
ST #0,*AR2
RSBX XF ;置XF为高电平
ST #0,*AR3+
ST #0,*AR3+
ST #0,*AR3+
ST #0,*AR3+
ST #0,*AR3+
ST #0,*AR3+
;RSBX
Next:
POPM ST0
RETE
.end
复位向量代码:
.title "fangbov.asm"
.ref TINT0_ISR
.sect ".TINT0_ISRv"
TINT: B TINT0_ISR
NOP
NOP
.ref CodeStart
.sect ".fangbov"
RESET: B CodeStart ; Reset中断向量,跳转到程序入口Nop ;用NOP填充表中其余空字
Nop ;B指令占了两个字,所以要填两个NOP
.end
链接命令程序代码:
fangbo.obj
fangbov.obj
-e CodeStart
-m map.map
-o fangbo.out
MEMORY
{
PAGE 0:
VECT: org=0080h len=4h
VECT1: org=00CCh len=4h
PARAM: org=0200h len=0F00h
PAGE 1:
DARAM: org=1000h len=1000h
}
SECTIONS
{
.text :> PARAM PAGE 0
.fangbov :> VECT PAGE 0
.TINT0_ISRv :> VECT1 PAGE 0
STACK :> DARAM PAGE 1
.data :> DARAM PAGE 1
edata :> DARAM PAGE 1
} 五、实验结果
流程图:
设TDDR=9,计算定时器定时周期PRD=199999。