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

📄 pwm.asm

📁 dsp的
💻 ASM
字号:
;*******************************************************
; File Name:PWM.asm
;*******************************************************

		.title	"PWM"
	
		.include LF2407.inc
		.include CPU.inc
		.include GPIO.inc
;*******************************************************

TxdPtr:	.usect	"data", 8
RxdPtr:	.usect	"data", 8

		.data
counterValue	.byte	1
;*******************************************************
		.def	_c_int0
		.def	GIsr2
		
		.ref	Pvect
;*******************************************************
; 主程序开始
		.text
_c_int0:

		call	fSysInit
	
		ldp		#DP_PF2
		splk	#MCRAV, MCRA
		splk	#MCRBV, MCRB
		
		splk	#7f01h, PADATDIR
		splk	#0808h, PBDATDIR

;		splk	#80h, EVAIMRA
;		splk	#0ffffh, EVAIFRA
;		splk	#0, GPTCONA
;		splk	#177h, T1PR
;		splk	#0, T1CNT
;		splk	#0164ch, T1CON
		
;		clrc	INTM
;wait:
;		nop
;		b 		wait
		
	;	call 	fSciInit
	;	call	evaPwmInit
		
Main:
		ldp		#0000h
LoopMain:
	
		ldp		#00e1h
		
		call	StepMotor
		
		b		LoopMain
;*******************************************************
evaPwmInit:
	;
		ldp		#DP_PF2		; 指向 7080h~7100h
		lacl	MCRA
		or		#PWMMCR		; PA.1~PA.4配置为PWM输出
		sacl	MCRA
		ldp		#DP_EVA		; 
		splk	#0ffffh, EVAIFRA	; 清除EVA全部中断标志
		splk	#0666h, ACTRA		; PWM2、4低有效,PWM1、3高有效
		splk	#00h, DBTCONA		; 不使能死区控制
		splk	#10h, CMPR1			; 设置比较初值PWM1高电平占50/60,低电平上10/60
		splk	#20h, CMPR2			; 设置PWM3、4的比较寄存器
		splk	#60h, T1PR			; 设置定时器1周期寄存器,即PWM周期为60个CPU时钟周期
		splk	#0a600h, COMCONA	; 使能比较操作
		splk	#0, T1CNT
		splk	#41h, GPTCONA		; TCOMPOE=1, T1PIN=01
		splk	#080h, EVAIMRA		; 通用定时器1使能
		splk	#174eh, T1CON		; TMODE=10连续增计数模式,TPS=111预分频为128
									; TENABLE=1定时器计数使能,TCLKS=00内部时钟
									; TECMPR=1定时器1比较使能,SELT1PR=0
		clrc	INTM				; 开总中断
		
		ret
;*******************************************************
StepMotor:

		call	fDelay
		lacc	PADATDIR
		and		#STEPMASK
		or		#step1
		sacl	PADATDIR
		
		call	fDelay
		lacc	PADATDIR
		and		#STEPMASK
		or		#step2
		sacl	PADATDIR

		call	fDelay
		lacc	PADATDIR
		and		#STEPMASK
		or		#step3
		sacl	PADATDIR

		call	fDelay
		lacc	PADATDIR
		and		#STEPMASK
		or		#step4
		sacl	PADATDIR

		b		StepMotor
		
		ret
;*******************************************************
fSendChar:
	; 发送一个字符
		mar		AR2
		lacc	#'b'
		sacl	*			; 发送数据到SCITXBUF寄存器
LoopSendChar:
		ldp		#DP_PF1
		bit		SCICTL2, BIT7
		bcnd	LoopSendChar, NTC
		
		ret
;*******************************************************
; 系统初始化程序
fSysInit:

		setc	INTM			; 初始化期间禁止中断
		clrc	SXM				; 清符号扩展模式
		clrc	OVM				; 溢出模式复位
		clrc	CNF				; 配置B0块到数据存储区
		ldp		#DP_PF1			; 设置DP=E0H,则数据存储器地址为7000H~707FH
		splk	#81feh, SCSR1	; CLKOUT=CLKIN*4
	;	splk	#0041h, SCSR1	; CLKOUT=CLKIN*4
		splk	#00e8h, WDCR	; 不使能WDT
		ldp		#0
		splk	#0002h, IMR		; 不使能中断
		splk	#0ffffh, IFR	; 清除全部中断标志

		ret
;*******************************************************
; SCI接口初始化程序
fSciInit:

		ldp		#0e1h
		lacl	MCRB
		or		#18h
		sacl	MCRB			; 配置串行口引脚为特殊功能:TXD、RXD
		ldp		#DP_PF1
		splk	#00fh, SCICCR	; 地址位唤醒模式,N,8,1
		splk	#007h, SCICTL1	; 接收、发送、内部时钟使能,SLEEP=1
		splk	#002h, SCICTL2	; 接收中断使能
		splk	#(BRR/256), SCIHBAUD
		splk	#(BRR & 0ffh), SCILBAUD	; 设置波特率寄存器
		splk	#023h, SCICTL1	; 串口初始化完成
		lar		ar1, #SCIRXBUF	; 接收缓冲寄存器地址
		lar 	ar2, #SCITXBUF	; 发送缓冲寄存器地址
		lar 	ar3, #RxdPtr	; 接收的数据指针
		lar 	ar4, #TxdPtr	; 发送的数据指针
		ldp		#0
		splk	#0001h, IMR		; 允许INT1中断
		splk	#0ffffh, IFR	; 清所有中断标志
		clrc	INTM			; 开总中断
		
		ret
;*******************************************************
GIsr1:
	; 优先级INT1中断入口
	
		ldp		#0e0h
		lacc	PIVR, 1			; 读取外设中断向量寄存器,并左移一位
		add		#Pvect			; 加上外设中断入口地址
		bacc					; 跳到相应的中断服务子程序
		
ExitGIsr1:
		; 恢复现场
		clrc	INTM		; 开中总断,因为一进中断就自动关闭总中断
		
		ret
;*******************************************************
RxInt:
	; SCI接收中断服务程序
		ldp		#DP_PF1
		mar		*, AR1
		bit		SCICTL1, BIT2

		b 		ExitGIsr1
;*******************************************************
GIsr2:
	; 优先级INT2中断入口
	
		ldp		#DP_PF1
		lacc	PIVR, 1
		add		#Pvect
		bacc
		
ExitGIsr2:
		; 恢复现场
		clrc	INTM		; 开中总断,因为一进中断就自动关闭总中断
		
		ret
;*******************************************************
T1PInt:
	; 通用定时器1中断入口
		ldp		#DP_EVA
		splk	#0, T1CNT
		
		b 		ExitGIsr2
;*******************************************************
; 延时程序
fDelay:

		mar		*, ar4
		lar		ar4, #02ffeh
		lar		ar0, #00h
LoopDelay:
		sbrk	#1
		nop
		cmpr	00
		bcnd	LoopDelay, ntc
		
		ret
;*******************************************************
		.end

⌨️ 快捷键说明

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