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

📄 control1.asm

📁 基于DSP2407的汇编语言实现交流电机异步调速系统控制程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    sub   #47h
    bcnd  d_axis_kdp,neq       ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
kqd_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kqd_high8_rx,ntc
    b     kqd_low8_rx          ;读取低8位字节
kqd_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kqd_rx_return2
kqd_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  kqd_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kqd_rx2 
kqd_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kqd_rx_return2       ;修改rx_bit_flag标志,并返回。
kqd_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kqd_rx_end,eq        
    b     kqd_rx_return1       
kqd_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1 
    
    ldp   #DP_BSS2 
    sacl  Kq_d   
kqd_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kqd_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return
    
*********************************************************
*********************************************************
*********d轴比例系数接收*********************************
d_axis_kdp:  
    lacl  option               ;检测地址字符是否是48h
    sub   #48h
    bcnd  d_axis_kdi,neq       ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
kdp_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kdp_high8_rx,ntc
    b     kdp_low8_rx          ;读取低8位字节
kdp_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kdp_rx_return2
kdp_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  kdp_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kdp_rx2 
kdp_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kdp_rx_return2       ;修改rx_bit_flag标志,并返回。
kdp_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kdp_rx_end,eq        
    b     kdp_rx_return1       
kdp_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1  
    sacl  Kd_p   
kdp_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kdp_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return
    
*********************************************************
*********************************************************
*********d轴积分系数接收*********************************
d_axis_kdi:  
    lacl  option               ;检测地址字符是否是49h
    sub   #49h
    bcnd  d_axis_kdd,neq       ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
kdi_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kdi_high8_rx,ntc
    b     kdi_low8_rx          ;读取低8位字节
kdi_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kdi_rx_return2
kdi_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  kdi_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kdi_rx2 
kdi_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kdi_rx_return2       ;修改rx_bit_flag标志,并返回。
kdi_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kdi_rx_end,eq        
    b     kdi_rx_return1       
kdi_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1  
    sacl  Kd_i   
kdi_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。 
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kdi_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return

*********************************************************
*********************************************************
*********d轴比例系数接收*********************************
d_axis_kdd:  
    lacl  option               ;检测地址字符是否是4ah
    sub   #4ah
    bcnd  isqref_limit,neq       ;不相等,则检测下一个
    ldp   #DP_PF1
    splk  #0023h,SCICTL1       ;相等,则sleep位清0,准备接收数据
    b     sci_return           ;返回
********************************************************
kdd_rx:                        ;地址字节相符后,knp_rx作为数据接收标识
    ldp   #DP_PF1
    lacl  SCIRXBUF             ;读取数据字节
    and   #00ffh
    ldp   #6
    bit   rx_bit_flag,BIT0     ;读取高8位字节
    bcnd  kdd_high8_rx,ntc
    b     kdd_low8_rx          ;读取低8位字节
kdd_high8_rx:
    sacl  ref_rx_h             ;存储高8位后,修改rx_bit_flag标志,并返回。
    b     kdd_rx_return2
kdd_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  kdd_rx1,tc           ;bit0=0,表示第2次接收的数据
    b     kdd_rx2 
kdd_rx1:
    ldp   #6
    sacl  f_ref_rx1            ;获取第1次比例系数
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;第1次数据接收完毕,sleep置1,准备接收地址
    b     kdd_rx_return2       ;修改rx_bit_flag标志,并返回。
kdd_rx2:
    sub   f_ref_rx1            ;第2次接收数据与第1次接收数据比较
    bcnd  kdd_rx_end,eq        
    b     kdd_rx_return1       
kdd_rx_end:                    ;相等,则赋给kn_p,参与运算。
    lacl  f_ref_rx1 
    
    ldp   #DP_BSS2 
    sacl  Kd_d   
kdd_rx_return1:                ;不相等,则f_ref_rx数值不变,并返回等待新数据输入。 
    ldp   #DP_PF1
    splk  #0027h,SCICTL1       ;数据接收完毕,sleep重新置1,准备接收地址
kdd_rx_return2: 
    ldp   #6   
    lacl  rx_bit_flag          ;修改标志位,用于判断接收高、低8位数据
    xor   #01h                 
    sacl  rx_bit_flag 
    b     sci_return
****************************************
*********扩展***************************
isqref_limit:                   ;isqref限幅值
;    b     sci_return  
             
*****************************************
***********发送判断**********************
*****************************************
notzero:
    lacl  option    
    sub   #31h
    bcnd  notone,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  uf_tx,ntc                   ;否则返回
    b    sci_return
uf_tx:
    lar   ar1,#UF_E                    ;读取UF_E空间数据
    lar   ar0,#UF_E+2048               
    ;ldp   #DP_PF1                     ;1):在接收中断中使能发送
    ;splk  #03H,SCICTL2                ;   且发送第一个数据
    ;mar   *,ar1
    ;lacc  *,8
    ;sach  SCITXBUF 
    ;b   sci_return
    b   SCI_TX_ISR                     ;2):初始化时使能发送中断,数据发送全在中断中完成
notone:
    lacl  option    
    sub   #32h
    bcnd  nottwo,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  isqq_tx,ntc                 ;否则返回
    b    sci_return
isqq_tx:
    lar   ar1,#ISQQ_E                    ;读取UF_E空间数据
    lar   ar0,#ISQQ_E+2048
    
    b   SCI_TX_ISR
nottwo:
    lacl  option
    sub   #33h
    bcnd  notthree,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  usq_tx,ntc                   ;否则返回
    b    sci_return
usq_tx:
    lar   ar1,#USQ_E                    ;读取USQ_E空间数据
    lar   ar0,#USQ_E+2048
    
    b   SCI_TX_ISR
notthree:
    lacl  option
    sub   #34h
    bcnd  notfour,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  usd_tx,ntc                   ;否则返回
    b    sci_return
usd_tx:
    lar   ar1,#USD_E                    ;读取USD_E空间数据
    lar   ar0,#USD_E+2048
    
    b   SCI_TX_ISR
notfour:
    lacl  option
    sub   #35h
    bcnd  notfive,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  usa_tx,ntc                   ;否则返回
    b    sci_return
usa_tx:
    lar   ar1,#USa_E                    ;读取ISQQ_E空间数据
    lar   ar0,#USa_E+2048
    
    b   SCI_TX_ISR
notfive:
    lacl  option
    sub   #36h
    bcnd  notsix,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  usb_tx,ntc                   ;否则返回
    b    sci_return
usb_tx:
    lar   ar1,#USb_E                    ;读取USb_E空间数据
    lar   ar0,#USb_E+2048
   
    b   SCI_TX_ISR
notsix:
    lacl  option
    sub   #37h
    bcnd  notseven,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  isa_tx,ntc                   ;否则返回
    b    sci_return
isa_tx:
    lar   ar1,#ISA_E                    ;读取ISA_E空间数据
    lar   ar0,#ISA_E+2048
    
    b   SCI_TX_ISR
notseven:
    lacl  option
    sub   #38h
    bcnd  noteight,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  isb_tx,ntc                   ;否则返回
    b    sci_return
isb_tx:
    lar   ar1,#ISB_E                    ;读取ISB_E空间数据
    lar   ar0,#ISB_E+2048
   
     b   SCI_TX_ISR
noteight:
    lacl  option
    sub   #39h
    bcnd  notnine,neq
    lacl  rx_bit_flag                 ;第一次接收完发送地址字符,则
    xor   #10h                        ;rx_bit_flag bit4标志位置1
    sacl  rx_bit_flag
    bit   rx_bit_flag,BIT4            ;bit4=0,表示第2次发送
    bcnd  isd_tx,ntc                   ;否则返回
    b    s

⌨️ 快捷键说明

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