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

📄 main.asm

📁 2407是控制领域中最先进的处理机之一 这里上传的是2407的空间矢量程序! 请多支持
💻 ASM
📖 第 1 页 / 共 2 页
字号:
               .include "f2407.h"          ; 寄存器地址
               .global  _c_int0               ;全局化标号
;--------------------------------------以下定义变量-----------------------------------------------------------
ST0 .set 0                    ;状态寄存器ST0
ST1 .set 1                    ;状态寄存器ST1
               .bss TEMP,1                  ;临时变量
               .bss SET_F,1                 ;频率调节比,Q16格式(值为0-1,对应0-50Hz)
               .bss F_OMEGA,1             ;频率调节比-角频率转换率,Q5格式
               .bss OMEGA,1               ;调制波角频率,Q5格式
               .bss SET_V,1                 ;参考电压,Q14格式
               .bss MAX_V,1                ;最大参考电压幅值1/  ,Q14格式
               .bss T_SAMPLE,1             ;采样周期,Q24格式
               .bss THETA_H,1              ;参考电压相位角高字,Q12格式
               .bss THETA_L,1              ;参考电压相位角低字,Q12格式
               .bss THETA_R,1              ;相位角的圆整值,Q12格式
               .bss THETA_M,1             ;相位查表值(0-90度),Q12格式
               .bss THETA_I,1              ;相角查表索引,Q9格式
               .bss SS,1                    ;SIN符号,Q0格式
               .bss SC,1                    ;COS符号,Q0格式
               .bss SIN_INDX,1             ;SIN表索引,Q0格式
               .bss SIN_ENTRY,1            ;SIN表入口地址
               .bss SIN_END,1              ;SIN表结束地址
               .bss SIN_THETA,1            ;SINθ值,Q14格式
               .bss COS_THETA,1            ;COSθ值,Q14格式
               .bss UA,1                    ;参考电压D轴分量UA,Q12格式
               .bss UB,1                    ;参考电压Q轴分量UB,Q12格式
               .bss THETA_S,1               ;θ-扇区数转换系数,Q15格式
               .bss SECTOR,1                ;参考电压所在的扇区数,Q0格式
               .bss THETA_90,1               ;90度,Q12格式
               .bss THETA_180,1              ;180度,Q12格式
               .bss THETA_270,1              ;270度,Q12格式
               .bss THETA_360,1              ;360度,Q12格式
               .bss DEC_MS,24               ;6个逆阵,Q14格式
               .bss T1_PERIODS,1            ;定时器1周期值,Q5格式
               .bss CMP_1,1                 ;第1基本矢量,Q0格式
               .bss CMP_2,1                 ;第2基本矢量,Q0格式
               .bss SVPAT,1                  ; ACTRA的空间矢量字
               .bss  ACCH,1                  ;ACC高字保存单元
               .bss  ACCL,1                   ;ACC低字保存单元
               .bss  AR0_SAVE,1              ;AR0保存单元
               .bss  P_HI,1                   ;P寄存器高字保存单元
               .bss  P_LO,1                   ;P寄存器低字保存单元
               .bss  T_SAVE,1

;--------------------------------------hhhhh1-----------------------------------------------------------
; -------------------------------------CONTEXT段,定义保护现场数据区---------------------------
ST0_SAVE  .usect ".context",1   ;状态寄存器ST0保存单元
ST1_SAVE  .usect ".context",1   ;状态寄存器ST1保存单元
;--------------------------------------定义主向量段------------------------------------------------------
                .sect  ".vectors"              ;定义主向量段
RESET  B  _c_int0           ;地址0000H,复位,优先级1
INT1   B  PHANTOM        ;地址0002H,INT1,优先级4
INT2   B  _C_INT2           ;地址0004H,INT2,优先级5
INT3   B  PHANTOM        ;地址0006H,INT3,优先级6
INT4   B  PHANTOM        ;地址0008H,INT4,优先级7
INT5   B  PHANTOM        ;地址000AH,INT5,优先级8
INT6   B  PHANTOM        ;地址000CH,INT6,优先级9 
RESERVED  B  PHANTOM			;地址000EH,测试,优先级10
SW_INT8   B  PHANTOM		;地址0010H,自定义软中断
SW_INT9   B  PHANTOM		;地址0012H,自定义软中断
SW_INT10  B  PHANTOM		;地址0014H,自定义软中断
SW_INT11  B  PHANTOM		;地址0016H,自定义软中断
SW_INT12  B  PHANTOM		;地址0018H,自定义软中断
SW_INT13  B  PHANTOM		;地址001AH,自定义软中断
SW_INT14  B  PHANTOM		;地址001CH,自定义软中断
SW_INT15  B  PHANTOM		;地址001EH,自定义软中断
SW_INT16  B  PHANTOM		;地址0020H,自定义软中断
TRAP	   B  PHANTOM			;地址0022H,TRAP矢量
NMI	  	   B  PHANTOM			;地址0024H,NMI,优先级3
EMU_TRAP B  PHANTOM			;地址0026H,仿真Trap,优先级2
SW_INT20  B  PHANTOM		;地址0028H,自定义软中断
SW_INT21  B  PHANTOM		;地址002AH,自定义软中断
SW_INT22  B  PHANTOM		;地址002CH,自定义软中断
SW_INT23  B  PHANTOM		;地址002EH,自定义软中断
SW_INT24  B  PHANTOM		;地址0030H,自定义软中断
SW_INT25  B  PHANTOM		;地址0032H,自定义软中断
SW_INT26  B  PHANTOM		;地址0034H,自定义软中断
SW_INT27  B  PHANTOM		;地址0036H,自定义软中断
SW_INT28  B  PHANTOM		;地址0038H,自定义软中断
SW_INT29  B  PHANTOM		;地址003AH,自定义软中断
SW_INT30  B  PHANTOM		;地址003CH,自定义软中断
SW_INT31  B  PHANTOM		;地址003EH,自定义软中断

;--------------------------------------定义子向量段----------------------------------------------------------
                .sect  ".pvecs"                ;定义子向量段
PVECTORS	B	PHANTOM			;偏移地址0000H 
			B	PHANTOM  			;偏移地址0001H
			B	PHANTOM			;偏移地址0002H
			B	PHANTOM			;偏移地址0003H
			B	PHANTOM			;偏移地址0004H
			B	PHANTOM			;偏移地址0005H
			B	PHANTOM			;偏移地址0006H
			B	PHANTOM			;偏移地址0007H
			B	PHANTOM			;偏移地址0008H
			B	PHANTOM			;偏移地址0009H
			B	PHANTOM			;偏移地址000AH
			B	PHANTOM			;偏移地址000BH
			B	PHANTOM			;偏移地址000CH
			B	PHANTOM			;偏移地址000DH
			B	PHANTOM			;偏移地址000EH
			B	PHANTOM			;偏移地址000FH  
			B	PHANTOM			;偏移地址0010H
			B	PHANTOM			;偏移地址0011H
			B	PHANTOM			;偏移地址0012H
			B	PHANTOM			;偏移地址0013H
			B	PHANTOM			;偏移地址0014H
			B	PHANTOM			;偏移地址0015H
			B	PHANTOM			;偏移地址0016H
			B	PHANTOM			;偏移地址0017H 
			B	PHANTOM			;偏移地址0018H
			B	PHANTOM			;偏移地址0019H 
			B	PHANTOM			;偏移地址001AH
			B	PHANTOM			;偏移地址001BH
			B	PHANTOM			;偏移地址001CH
			B	PHANTOM			;偏移地址001DH
			B	PHANTOM			;偏移地址001EH
			B	PHANTOM			;偏移地址001FH
			B	PHANTOM			;偏移地址0020H
			B	PHANTOM			;偏移地址0021H 
			B	PHANTOM			;偏移地址0022H
			B	PHANTOM			;偏移地址0023H
			B	PHANTOM			;偏移地址0024H
			B	PHANTOM			;偏移地址0025H
			B	PHANTOM			;偏移地址0026H 
			B	PHANTOM			;偏移地址0027H 
			B	PHANTOM			;偏移地址0028H
			B	T1UF_ISR			;偏移地址0029H
			B	PHANTOM			;偏移地址002AH
			B	PHANTOM			;偏移地址002BH
			B	PHANTOM			;偏移地址002CH
			B	PHANTOM			;偏移地址002DH
			B	PHANTOM			;偏移地址002EH
			B	PHANTOM			;偏移地址002FH 
			B	PHANTOM			;偏移地址0030H
			B	PHANTOM			;偏移地址0031H
			B	PHANTOM			;偏移地址0032H
			B	PHANTOM			;偏移地址0033H
			B	PHANTOM			;偏移地址0034H
			B	PHANTOM			;偏移地址0035H
			B	PHANTOM			;偏移地址0036H
			B	PHANTOM			;偏移地址0037H
			B	PHANTOM			;偏移地址0038H
			B	PHANTOM			;偏移地址0039H
			B	PHANTOM			;偏移地址003AH
			B	PHANTOM			;偏移地址003BH
			B	PHANTOM			;偏移地址003CH
			B	PHANTOM			;偏移地址003DH
			B	PHANTOM			;偏移地址003EH
			B	PHANTOM			;偏移地址003FH
			B	PHANTOM			;偏移地址0040H
			B	PHANTOM			;偏移地址0041H
;主函数
		.text
;--------------------------------------系统初始化程序--------------------------------------------------
_c_int0:    
            SETC   INTM               ; 禁止中断
            CLRC  CNF                 ;B0为数据存储区
            LDP    #224
            SPLK   #02FCH,SCSR1 ;CLKIN 10M,CLKOUT 20M
            SPLK   #0E8H,WDCR            ;不用看门狗
            LDP    #225
            LACC  MCRA
            OR     #0FC0H             ;设置PWM1-6引脚
            SACL   MCRA
;--------------------------------------中断初始化程序--------------------------------------------------
            LDP    #0  
            SPLK   #0FFH,IFR            ; 清所有系统中断标志
            SPLK   #00000010B,IMR      ; 开INT2中断
            LDP    #232         
            SPLK   #0FFFH,EVAIFRA     ; 清事件管理器A所有中断标志
            SPLK   #0FH,EVAIFRB 
            SPLK   #0FH,EVAIFRC 
            SPLK   #0200H,EVAIMRA     ; 开T1下溢中断
            SPLK   #0,EVAIMRB          ; 屏蔽所有中断
            SPLK   #0,EVAIMRC          ; 屏蔽所有中断
;--------------------------------------初始化事件管理器A程序--------------------------------------
            SPLK   #500,T1PR           ; T1周期值=50 us/50ns/2=500
            SPLK   #500,CMPR1         ; 占空比初值 0%
            SPLK   #500,CMPR2
            SPLK   #500,CMPR3
            SPLK   #0000011001100110B,ACTRA  ; 引脚PWM1,3,5高有效,2,4,6低有效
            SPLK   #01F4H,DBTCONA     ; 死区时间1*32*50ns=1.6us
            SPLK   #1001001000000000B,COMCONA  ;允许比较,使用硬件空间矢量
            SPLK   #1000100000000010B,T1CON ;连续增减计数方式,预分频=1
;--------------------------------------变量初始化程序--------------------------------------------------
            LDP    #6                       ; 指向B1
            SPLK   #0347H,T_SAMPLE      ;采样周期=50us *224=839秒=347H, Q24格式
            SPLK   #16000,T1_PERIODS       ;T1周期值的Q5格式,500*32
            SPLK   #11585,MAX_V           ; 最大参考电压幅值1/ ,Q14格式
            SPLK   #0,SET_F                ; SET F=0
            SPLK   #10053,F_OMEGA        ;频率调节比-角频率转换率,Q5格式
                      ;当SET_F=1时,对应最大角频率2π50Hz*25=10053
            SPLK   #0,THETA_L             ;θ低字,Q12格式
            SPLK   #0,THETA_H             ; θ高字,Q12格式
            LAR   AR0,#THETA_90          ; 传送常用角度和逆阵数据
            LAR   AR1,#(28-1)              ; 28个
            LACC  #ANGLES
            LARP  AR0 
INIT_TBL:
            TBLR  *+,AR1                  ; 下一个
            ADD   #1                       ; 下一个地址
            BANZ  INIT_TBL,AR0            ;AR1=0结束 
            SPLK   #29335,THETA_I           ; 相角查表索引,180/π,Q9格式
            SPLK   #31291,THETA_S          ; θ-扇区数转换系数,6/(2π),Q15格式
            SPLK  #SIN_ENTRY_,SIN_ENTRY    ;SIN表起始地址
            SPLK  #(SIN_ENTRY_+90),SIN_END  ;SIN表结束地址
            LDP   #232
            SPLK   #0000100001000010B,T1CON  ;使能T1
            CLRC  INTM                     ; 开总中断
;--------------------------------------主循环程序(SET_F由外部输入)---------------------------------
MAIN_LOOP:
            LDP  #6
            LT    SET_F                  ; 将频率调节比(Q16格式)转换成角频率
            MPYU  F_OMEGA               ; Q21
            PAC                          ; 积送ACC, Q5格式
            SACH  OMEGA               ; 保存角频率,Q5格式
            LT    SET_F                   ;将频率调节比(Q16格式)转换成参考电压
            MPYU  MAX_V                 ; Q16*Q14=Q30
            PAC 
            SACH  SET_V                ; 保存参考电压幅值,Q14格式
            B     MAIN_LOOP              ; 循环
;--------------------------------------假中断处理----------------------------------------------------------
PHANTOM:
            CLRC     INTM 
            RET
;--------------------------------------T1下溢中断处理子程序-----------------------------------------
_C_INT2:

⌨️ 快捷键说明

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