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

📄 control1.asm

📁 基于DSP2407的汇编语言实现交流电机异步调速系统控制程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
***********ar1指针加2048*******************
     ldp   #6
     sar   ar1,tmp5              ;ar1-->tmp5
     lacl  tmp5                  ;ar1指针通过tmp5加2048
     add   #2048
     sacl  tmp5
     lar   ar1,tmp5
     
     lacc   tmp4                 ;tmp4为变量序号
     add    #1
     sacl   tmp4                 ;判断当前周期12个变量是否存储完毕
     sub    #12
     bcnd   next_period,eq       ;完毕,则准备下一周期的存储
     
*******************************************
**********存储isqref***********************
isqref_save:
       lacc  tmp4               ;tmp4=1,准备存储isqref
       sub  #1
       bcnd  usq_save,neq

       ldp   #DP_BSS1           ;isqref,Q12,最大值为限幅值
       lt     isqref            ;[isqref/4096]*5*100=100倍的实际电流值
       mpy    #1f4h
       pac
       ldp    #DP_BSS2
       sach   temp,4            ;100倍实际电流值
       lacl   temp
       add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
       sacl   temp
 
       lar  ar2,#temp           
       b  save_next 

*********************************************
************存储usq************************** 
usq_save: 
       lacc  tmp4               ;tmp4=2,准备存储vsqref
       sub  #2
       bcnd  usd_save,neq

       ldp   #DP_BSS1
       lt    vsqref            ;Q12
       mpy   #310              ;usq基准值
       pac
       ldp   #DP_BSS2
       sach  temp,4
       lacl  temp
       add   #620              ;偏移量
       sacl  temp

       lar  ar2,#temp          
       b  save_next
       
**********************************************
************存储usd***************************
usd_save:
       lacc  tmp4             ;tmp4=3,准备存储vsdref
       sub  #3
       bcnd  usa_save,neq       

       ldp   #DP_BSS1
       lt    vsdref            ;Q12
       mpy   #310              ;usd基准值
       pac
       ldp   #DP_BSS2
       sach  temp,4
       lacl  temp
       add   #620              ;偏移量
       sacl  temp

       lar  ar2,#temp          
       b  save_next
        
*********************************************
***********存储usa***************************
usa_save:
       lacc  tmp4               ;tmp4=4,准备存储vsalfa
       sub  #4
       bcnd  usb_save,neq

       ldp   #DP_BSS1
       lt    vsalfa            ;Q12
       mpy   #310              ;usa基准值
       pac
       ldp   #DP_BSS2
       sach  temp,4
       lacl  temp
       add   #620              ;偏移量
       sacl  temp
      
       lar  ar2,#temp         
       b  save_next

***************************************************
***************存储usb*****************************
usb_save:
        lacc  tmp4             ;tmp4=5,准备存储vsbeta
        sub  #5
        bcnd  isa_save,neq
*************************
       ldp   #DP_BSS1
       lt    vsbeta            ;Q12
       mpy   #310              ;usb基准值
       pac
       ldp   #DP_BSS2
       sach  temp,4
       lacl  temp
       add   #620              ;偏移量
       sacl  temp
*************************
        lar  ar2,#temp         
        b  save_next

**************************************************
***********存储isa********************************
isa_save:
        lacc  tmp4              ;tmp4=6,准备存储isa
        sub  #6
        bcnd  isb_save,neq 
        
        ldp   #DP_BSS1           ;isa,Q12
        lt     isa              ;[isa/4096]*5*100=100倍的实际电流值
        mpy    #1f4h
        pac
        ldp    #DP_BSS2
        sach   temp,4            ;100倍实际电流值
        lacl   temp
        add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
        sacl   temp
        
        lar  ar2,#temp            
        b  save_next
        
***************************************************
*************存储isb*******************************
isb_save:
        lacc  tmp4                ;tmp4=7,准备存储isb
        sub  #7
        bcnd  isd_save,neq
        
        ldp   #DP_BSS1           ;isb,Q12
        lt     isb              ;[isb/4096]*5*100=100倍的实际电流值
        mpy    #1f4h
        pac
        ldp    #DP_BSS2
        sach   temp,4            ;100倍实际电流值
        lacl   temp
        add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
        sacl   temp
        
        lar  ar2,#temp            
        b  save_next
        
**************************************************
************存储isd*******************************
isd_save:
        lacc  tmp4              ;tmp4=8,准备存储isd
        sub  #8
        bcnd  isq_save,neq
        
        ldp   #DP_BSS1           ;isd,Q12
        lt     isd               ;[isd/4096]*5*100=100倍的实际电流值
        mpy    #1f4h
        pac
        ldp    #DP_BSS2
        sach   temp,4            ;100倍实际电流值
        lacl   temp
        add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
        sacl   temp
        
        lar  ar2,#temp            
        b  save_next

***************************************************
**************存储isq******************************
isq_save:
        lacc  tmp4              ;tmp4=9,准备存储isq
        sub  #9
        bcnd  fa_save,neq
        
        ldp   #DP_BSS1           ;isq,Q12
        lt     isq              ;[isq/4096]*5*100=100倍的实际电流值
        mpy    #1f4h
        pac
        ldp    #DP_BSS2
        sach   temp,4            ;100倍实际电流值
        lacl   temp
        add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
        sacl   temp
        
        lar  ar2,#temp            
        b  save_next
        
***********************************************
***********存储fa******************************
fa_save:
        lacc  tmp4
        sub  #10
        bcnd  fb_save,neq
        
        ldp   #DP_BSS1           ;fa(isa),Q12
        lt     fa               ;[fa/4096]*5*100=100倍的实际电流值
        mpy    #1f4h
        pac
        ldp    #DP_BSS2
        sach   temp,4            ;100倍实际电流值
        lacl   temp
        add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
        sacl   temp
        
        lar  ar2,#temp
        b  save_next             ;tmp4=10,准备存储fa
        
***********************************************
**********存储fb*******************************
fb_save:
        ldp   #DP_BSS1           ;fb(isb),Q12
        lt     fb               ;[fb/4096]*5*100=100倍的实际电流值
        mpy    #1f4h
        pac
        ldp    #DP_BSS2
        sach   temp,4            ;100倍实际电流值
        lacl   temp
        add    #5dch             ;偏移量,3倍的额定电流(3*500),上传后先减去偏移量,再除以100得实际电流
        sacl   temp
        
        lar  ar2,#temp             ;tmp4=11,准备存储fb
        b  save_next
        
***********************************************
***********************************************
next_period:	                 ;下一周期的数据存储
	    mar   *,ar1              ;ar1指针加1
	    adrk  #1
	    sar   ar1,tmp5
	    lacl  tmp5
	    sub   #6000h             ;ar1指向起始单元8001h
        sacl  tmp5
	    lar   ar1,tmp5
	    ldp   #6                 ;注意:tmp4重新复位
	    lacl  #00h               ;刚开始没注意此问题,导致程序复位(0000h),进不去中断,
	    sacl  tmp4

        b     no_save
******************************************        
saveend:
     ldp   #6              
     lacl  #00h 
     sacl  sta_save_flag         ;存储结束,清sta_save_flag   
     b     no_save      
******************************************
no_save:
    ldp   #6
    lacl  #00h                   
    sacl  save_flag              
    b     main
******************************************
***********SCI中断************************
_c_int5:            
     lar  ar7,#STACK     ;ar7指向堆栈区首地址(0060h)
     mar  *,ar7
     sst  #1,*+          ;保存状态寄存器ST1(0060h)
     sst  #0,*+          ;保存状态寄存器ST0(0061h)
     sacl  *+            ;保存累加器低16位 (0062h)
     sach  *+            ;保存累加器高16位 (0063h) 
     spl   *+            ;保存乘积寄存器低16位(0064h)
     sph   *+            ;保存乘积寄存器高16位(0065h)
     spm   00            ;乘积结果不移位装入累加器
     mpy   #1            ;保存TREG(16位)中的内容
     pac                 ;TREG*1=TREG
     sacl  *
   
    ldp   #0e0h
    lacl  PIVR 
    sub	  #0006h         ;检测到的其他中断向量值地址(PIVR中的值非06h),均认为是无效地址
	bcnd  SCI_RX_ISR,eq  ;PIVR=0006h,SCI接收中断
	lacl  PIVR
	sub   #0007H
	bcnd  SCI_TX_ISR,eq  ;PIVR=0007h,SCI发送中断
	
	b     NMIINT  
************************************
*********奇校验*********************
SCI_RX_ISR:
    ;ldp   #DP_PF1
    ;bit   SCIRXST,BIT2
    ;bcnd  right_odd,ntc    ;PE=0,无奇偶校验错误  
    ;b     sci_return
;right_odd:                 ;奇偶校验正确时
*******判断是地址接收,还是数据接受,并读取地址值*****
    ldp   #DP_PF1
    bit   SCICTL1,BIT2    ;BIT2,初始化时置1。SLEEP=1,ADRESS;SLEEP=0,DATA
    bcnd  data_rx,ntc     ;接收地址还是数据
      
*******第1次地址接收,还是第2次地址接收*********
    ldp   #6h
    bit   option_flag,BIT0 ;每个数据发送两次,由rx_bit_flag的bit4来判断是第1次发送的数据,还是第2次发送的数据
    bcnd  option_rx1,ntc   ;bit4=0,第1次发送
    b     option_rx2       ;bit4=1,第2次发送
option_rx1:                ;此处判断两次接收到的地址标识符是否相等
    ldp   #DP_PF1
    lacl  SCIRXBUF 
    and   #00ffH
    
    ldp   #6
    sacl  option 
    lacl  #01h             ;第1次接收到标识符后  
    sacl  option_flag       
    b     speed_rx      
option_rx2:
    lacl  #00h             ;第2次接收到标识符后  
    sacl  option_flag
    
    ldp   #DP_PF1
    lacl  SCIRXBUF 
    and   #00ffH
    
    ldp   #6   
    sub   option           ;第2次接收到标识符后与第1次的值比较
    bcnd  speed_rx,eq      
    
    lacl  #00h             ;不相等,则清option_flag后,返回中断     
    sacl  option_flag  
    b     sci_return      
**********************************************
**********数据接收判断************************
data_rx:
    ldp   #6
    lacl  option
    sub   #41h
    bcnd  ng_rx,eq        ;转速接收
    
    lacl  option
    sub   #42h
    bcnd  knp_rx,eq       ;转速比例系数接收
    
    lacl  option
    sub   #43h
    bcnd  kni_rx,eq       ;转速积分系数接收
    
    lacl  option
    sub   #44h
    bcnd  knd_rx,eq       ;转速积分系数接收
**********************************************    
    lacl  option
    sub   #45h
    bcnd  kqp_rx,eq       ;q轴比例系数接收
    

⌨️ 快捷键说明

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