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

📄 control1.asm

📁 基于DSP2407的汇编语言实现交流电机异步调速系统控制程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    lacl  option
    sub   #46h
    bcnd  kqi_rx,eq       ;q轴积分系数接收
     
    lacl  option
    sub   #47h
    bcnd  kqd_rx,eq       ;q轴微分系数接收
**********************************************   
    lacl  option
    sub   #48h
    bcnd  kdp_rx,eq       ;d轴比例系数接收
    
    lacl  option
    sub   #49h
    bcnd  kdi_rx,eq       ;d轴积分系数接收
    
    lacl  option
    sub   #4ah
    bcnd  kdd_rx,eq       ;d轴微分系数接收
    b     sci_return 
    
**************************************************  
**************************************************
**********转速接收********************************
speed_rx:   
    lacl  option
    sub   #41h
    bcnd  speed_knp,neq 
    ldp   #DP_PF1          ;sleep位清0,返回,准备接收数据
    splk  #0023h,SCICTL1       
    b     sci_return
****************************************************
ng_rx:
    ldp   #DP_PF1
    lacl  SCIRXBUF                ;读取接收的数据
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0        ;判断是高8位还是低8位
    bcnd  ng_high8_rx,ntc
    b     ng_low8_rx
ng_high8_rx:                     ;高8位数据接收
    sacl  ref_rx_h
    b     ng_rx_return2
ng_low8_rx:
    sacl  ref_rx_l                ;低8位数据接收
    lacc  ref_rx_h,8
    add   ref_rx_l
*****************************************
    bit   option_flag,BIT0        ;0000 0000,bit0=1:第1次接收
    bcnd  ng_rx1,tc               ;0001 0000;bit4=0:第2次接收
    b     ng_rx2
ng_rx1:
    ldp   #6
    sacl  f_ref_rx1                ;获取转速给定值  
    ldp   #DP_PF1
    splk  #0027h,SCICTL1           ;第1次数据接收完毕,sleep置1,准备接收地址
    b     ng_rx_return2
ng_rx2:
    sub   f_ref_rx1                ;第2次接收数据与第1次接收数据比较
    bcnd  ng_rx_end,eq             ;相等,则赋给f_ref_rx,参与运算。
    b     ng_rx_return1            ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
ng_rx_end: 
    lacl  f_ref_rx1
    sacl  f_ref_rx 
    lar   ar1,#UF_E               ;每次接受完新数据,ar1重新指向首地址
    lar   ar0,#UF_E+2048  
    lacl  #01h
    sacl  sta_save_flag           ;开始存储数据标志位
****************************************
ng_rx_return1:     
    ldp   #DP_PF1
    splk  #0027h,SCICTL1          ;数据接收完毕,sleep置1,准备接收地址  
    ;b     sci_return             ;此前没有改变rx_bit_flag的值就返回SCI中断,导致第2次数据接收不正确。
ng_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag             ;接收高、低8位数据的标志位
    xor   #01h
    sacl  rx_bit_flag 
    b     sci_return
*******************************************************
*******************************************************
***********转速环比例系数接收**************************
speed_knp:
   ;lacl  option_flag          ;第1次接收到地址标识符后,option_flag置1  
   ;xor   #01h                 ;为第2次接收地址字符做准备
   ;sacl  option_flag          ;注意:option_flag标志位在speed_rx中已经修改,此处略去

    lacl  option               ;检测地址字符是否是42h
    sub   #42h
    bcnd  speed_kni,neq        ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
knp_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  knp_high8_rx,ntc
    b     knp_low8_rx          ;读取低8位字节
knp_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     knp_rx_return2
knp_low8_rx:
    sacl  ref_rx_l             ;存储低8位
    lacc  ref_rx_h,8           
    add   ref_rx_l             ;读取完整字符
    bit   option_flag,BIT0     ;option_flag的bit0=1,表示第1次接收的数据
    bcnd  knp_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     knp_rx2 
knp_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     knp_rx_return2       ;修改rx_bit_flag标志,并返回。
knp_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  knp_rx_end,eq        
    b     knp_rx_return1       
knp_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1  
    sacl  Kn_p   
knp_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
knp_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return   
*********************************************************
*********************************************************
***********转速环积分系数********************************
speed_kni:
    lacl  option
    sub   #43h
    bcnd  speed_knd,neq
    ldp   #DP_PF1
    splk  #0023h,SCICTL1     ;sleep位清0,接收数据
    b     sci_return
********************************************************
kni_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kni_high8_rx,ntc
    b     kni_low8_rx          ;读取低8位字节
kni_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kni_rx_return2
kni_low8_rx:
    sacl  ref_rx_l             ;存储低8位
    lacc  ref_rx_h,8           
    add   ref_rx_l             ;读取完整字符
    bit   option_flag,BIT0     ;option_flag的bit0=1,表示第1次接收的数据
    bcnd  kni_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kni_rx2 
kni_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kni_rx_return2       ;修改rx_bit_flag标志,并返回。
kni_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kni_rx_end,eq        
    b     kni_rx_return1       
kni_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1  
    sacl  Kn_i   
kni_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kni_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return
     
********************************************************
********************************************************
**********转速环微分系数接收****************************
speed_knd: 
    lacl  option               ;检测地址字符是否是44h
    sub   #44h
    bcnd  q_axis_kqp,neq        ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
knd_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  knd_high8_rx,ntc
    b     knd_low8_rx          ;读取低8位字节
knd_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     knd_rx_return2
knd_low8_rx:
    sacl  ref_rx_l             ;存储低8位
    lacc  ref_rx_h,8           
    add   ref_rx_l             ;读取完整字符
    bit   option_flag,BIT0     ;option_flag的bit0=1,表示第1次接收的数据
    bcnd  knd_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     knd_rx2 
knd_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     knd_rx_return2       ;修改rx_bit_flag标志,并返回。
knd_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  knd_rx_end,eq        
    b     knd_rx_return1       
knd_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1
    
    ldp   #DP_BSS2  
    sacl  Kn_d   
knd_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
knd_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return 
    
*********************************************************
*********************************************************
*********q轴比例系数接收*********************************
q_axis_kqp:
    lacl  option               ;检测地址字符是否是45h
    sub   #45h
    bcnd  q_axis_kqi,neq       ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
kqp_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kqp_high8_rx,ntc
    b     kqp_low8_rx          ;读取低8位字节
kqp_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kqp_rx_return2
kqp_low8_rx:
    sacl  ref_rx_l             ;存储低8位
    lacc  ref_rx_h,8           
    add   ref_rx_l             ;读取完整字符
    bit   option_flag,BIT0     ;option_flag的bit0=1,表示第1次接收的数据
    bcnd  kqp_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kqp_rx2 
kqp_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kqp_rx_return2       ;修改rx_bit_flag标志,并返回。
kqp_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kqp_rx_end,eq        
    b     kqp_rx_return1       
kqp_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1  
    sacl  Kq_p   
kqp_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kqp_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return 
    
*********************************************************
*********************************************************
*********q轴积分系数接收*********************************
q_axis_kqi:  
    lacl  option               ;检测地址字符是否是45h
    sub   #46h
    bcnd  q_axis_kqd,neq       ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
kqi_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kqi_high8_rx,ntc
    b     kqi_low8_rx          ;读取低8位字节
kqi_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kqi_rx_return2
kqi_low8_rx:
    sacl  ref_rx_l             ;存储低8位
    lacc  ref_rx_h,8           
    add   ref_rx_l             ;读取完整字符
    bit   option_flag,BIT0     ;option_flag的bit0=1,表示第1次接收的数据
    bcnd  kqi_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kqi_rx2 
kqi_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kqi_rx_return2       ;修改rx_bit_flag标志,并返回。
kqi_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kqi_rx_end,eq        
    b     kqi_rx_return1       
kqi_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1  
    sacl  Kq_i   
kqi_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。 
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kqi_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return
    
*********************************************************
*********************************************************
*********q轴微分系数接收*********************************
q_axis_kqd:  
    lacl  option               ;检测地址字符是否是47h

⌨️ 快捷键说明

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