📄 control1.asm
字号:
***********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 + -