定时器中断产生方波源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

①fangbo.asm。利用定时器Timer0在XF脚产生周期1s的的方波

.title "fangbo.asm"

.mmregs

.def CodeStart ;程序入口

.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位,可跟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 ;设数据地址DP

STM #XF_Flag,AR2 ;AR指向XF标志

;改变中断向量表位置

K_IPTR .set 0080h ;指向0080H,默认是FF80

LDM PMST,A

AND #7FH,A ;保留低7位,清掉高位

OR #K_IPTR,A ;

STLM A,PMST

;初始化定时器0

;f=100Mhz,定时最大是:10ns*2^4*2^16=10ms,

;要输出1s的方波,可定时5ms,再在中断程序中加个100计数器

;Tt=10ns*(1+9)*(1+49999)=5ms

;f=50M, Tt=20ns*(1+9)*(1+49999)=10ms

;再加50计数器

CounterSet .set 49 ;定义计数次数

PERIOD .set 49999 ;定义计数周期

.asg AR1,Counter ;AR1做计数指针,重新命名以便识别

STM #CounterSet,Counter ;设计数器初值

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中

BANZ Next,*Counter- ;判断不等于0时跳转,然后计数器减1

STM #CounterSet,Counter ;恢复初值

;判断当前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

②fangbo.cmd

-e CodeStart /* This is the entry point reset vector */

-m map.map

-o fangbo.out

MEMORY {

PAGE 0:

VECT: org=080h len=80h

PARAM: org=100h len=0F00h

PAGE 1:

DARAM: org=1000h len=1000h

}

SECTIONS {

.text :> PARAM PAGE 0

.vectors :>VECT PAGE 0

STACK :> DARAM PAGE1

.data :> DARAM PAGE 1

}

③vectors.asm。省略部分基本上同实验三。

.sect ".vectors" ;开始命名段.vecotrs

.global CodeStart ;引用程序入口的全局符号定义

.global TINT0_ISR

TINT: B TINT0_ISR ;Timer0中断

NOP

NOP

BRINT0: RETE ;McBSP #0 receive interrupt

相关文档
最新文档