⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fangbo.asm

📁 基于DSP的fangbo.asm 利用定时器Timer0在XF脚产生周期1s的的方波 此程序采用100Mhz的时钟频率
💻 ASM
字号:
;==============================================
;	fangbo.asm
;	利用定时器Timer0在XF脚产生周期1s的的方波
;   此程序采用100Mhz的时钟频率,产生的方波
;==============================================
			.title	"fangbo.asm"
			.mmregs
			.def	CodeStart			;程序入口
			.def 	TINT0_ISR			;Timer0中断服务程序
			.ref	c54init							
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:
            CALL    c54init
			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	;定义计数次数,若为5416或者5410,改成99即可
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	
			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -