📄 dzjs01.asm
字号:
.bss temp,1;
.bss temp1,1;
.bss temp2,1;
.bss temp3,1;
.bss temp4,1;
.bss theta,1
.bss sinsign,1
.bss cossign,1
.bss sina,1;
.bss cosa,1;
.bss sinb,1;
.bss sinc,1;
.bss ia,1;
.bss ib,1;
.bss ic,1;
.bss uaref,1;
.bss ubref,1;
.bss ucref,1;
.bss sign,1;
.bss t2count,1
.bss timer1,1
.bss uab,1;
.bss uabsum,1;
.bss uabm,1;
.bss fshow,1
.bss ima,1
.bss imb,1
.bss imc,1
.bss fgive,1
.bss pos,1
.bss led00,1
.bss led01,1
.bss led02,1
.bss led03,1
.bss led04,1
.bss led05,1
.bss led10,1
.bss led20,1;
.bss led30,1
.bss key,1
.bss intnumber,1;
.bss intnumber1,1;
.bss iam,1;
.bss ibm,1;
.bss icm,1;
.bss enable,1;
.bss iasum,1;
.bss ibsum,1;
.bss icsum,1;
.bss poslimit,1;
.bss dispreg,1;
.bss error,1;
.bss theta360,1;6488h;2000h
.bss theta270,1;4b66h;1800h
.bss theta240,1; .set 4305h;
.bss theta180,1; .set 3244h;1000h
.bss theta120,1; .set 2183h;
.bss theta90,1; .set 1922h;800h
.bss PWMPR,1; .set 800;
.bss pwmpr2,1; .set 400;
.bss SQRT32,1; .set 6edah;
.bss SQRT3INV,1; .set 093dh;
.bss p,1;
.bss delta,1;
.bss runmode,1;
.bss iadiff,1;
.bss ibdiff,1;
.bss icdiff,1;
.bss iaref,1;
.bss ibref,1;
.bss icref,1;
.bss kpdq,1;
.bss kp,1;
.bss iatimer,1;
.bss ibtimer,1;
.bss ictimer,1;
.bss uabtimer,1;
.bss timer2,1;
.sect ".vectors"
RSVECT B START;
INT1 B INT1;
INT2 B INT2_ISR;
INT3 B INT3;
INT4 B INT4;
INT5 B INT5;
.include f240regs.h
CNCIN1 .set 01h;
CNCIN .set 02h;
UVWERR .set 03h;
DIS .set 04h; Keyboard,disp
CNCOUT .set 05h;
RD7862 .set 06h;
CON7862 .set 07h;
.text
START:
ldp #0;
setc INTM;
splk #0000h,IMR;
lacc IFR;
sacl IFR;
setc SXM;
setc OVM;
clrc CNF;
spm 0;
ldp #224;
splk #00BBh,CKCR1;CPUCLK=20MHz
splk #00C2h,CKCR0;SYSCLK=CPUCLK/4
splk #4080h,SYSCR;CLKOUT=SYSCLK
splk #006Fh,WDCR;
splk #055h,WDKEY;
splk #0aah,WDKEY;
splk #006fh,WDCR;
ldp #4
splk #04h,temp1;
out temp1,WSGR;
ldp #232;
splk #300,T1CMPR
splk #800,T1PR
splk #100,CMPR1
splk #100,CMPR2
splk #100,CMPR3
splk #0,SCMPR1
splk #0,SCMPR2
splk #0,SCMPR3
splk #0666h,ACTR;
splk #02ah,SACTR;
splk #08f0h,DBTCON;
splk #0b07h,COMCON
splk #08b07h,COMCON
splk #1010100011000010b,T1CON
splk #0,GPTCON
splk #1110000011110000b,CAPCON
splk #0,T2CNT
splk #0FFFFH,T2PR
splk #1001100001110000b,T2CON
splk #0,T3CNT
splk #0ffffh,T3PR
splk #1001000001010000b,T3CON
ldp #225;
splk #0c700h,OCRA
splk #0030h,OCRB
splk #0000h,PBDATDIR
splk #0000h,PCDATDIR
splk #0f07h,PADATDIR;
ldp #224;
splk #0,ADCTRL1
splk #0,ADCTRL2;
splk #05h,XINT2CR;
splk #05h,XINT1CR;
ldp #0
lar ar7,#365H
splk #02h,IMR;set IMR for int1,int2
ldp #232;
splk #201h,EVIMRA; #201h 2-t1uint,1-pdpint
******************************************************
ldp #4;
splk #200,kpdq;
splk #512,kp;
splk #5000,fgive;
splk #6488h,theta360;
splk #4b66h,theta270;
splk #4305h,theta240;
splk #3244h,theta180;
splk #2183h,theta120;
splk #1922h,theta90;
splk #800,PWMPR;
splk #400,pwmpr2;
splk #6edah,SQRT32;
;splk SQRT3INV;
splk #0,timer1;
splk #0,t2count;
splk #1h,pos
splk #0ah,led00
splk #0ch,led01
splk #05h,led02
splk #08h,led03
splk #00h,led04
splk #00h,led05
splk #0,led20;
splk #0h,key
splk #0,temp1
splk #0,temp2
splk #0,temp3
splk #0,iasum;
splk #0,ibsum;
splk #0,icsum;
splk #0,uabsum;
splk #0,enable;
splk #0,sign
splk #0,theta
splk #0,error;
ldp #225;
lacc PADATDIR
and #0FFFDH;
sacl PADATDIR;CS=0 A0=0
nop;
ldp #224;
splk #06fh,WDCR;
splk #055h,WDKEY;
splk #0aah,WDKEY;
splk #06fh,WDCR;
ldp #0;
clrc INTM;
nop;
LOOP:
nop;
ldp #224;
splk #06fh,WDCR;
splk #055h,WDKEY;
splk #0aah,WDKEY;
splk #06fh,WDCR;
nop;
nop;
b LOOP;
INT2_ISR:
nop;
mar *,ar7;
sst #1,*-;
sst #0,*-;
sacl *-;
ldp #232;
lacc EVIVRA;
ldp #4;
sacl temp1;
sub #29h;
bcnd T1UF_ISR,EQ;
lacc temp1;
sub #20h;
bcnd INT2EXIT,NEQ;
b PDPINT_ISR;
INT2EXIT:
ldp #232;
lacc EVIFRA;
sacl EVIFRA;
mar *,ar7;
mar *+;
lacc *+;
lst #0,*+;
lst #1,*;
clrc INTM;
ret;
T1UF_ISR:
ldp #232;
lacc EVIFRA;
sacl EVIFRA;
nop;
ldp #225;
lacc PADATDIR;
or #1h;
sacl PADATDIR;A0=1
rpt #5;
nop
ldp #4;
splk #0ffffh,temp1;
out temp1,CON7862;
rpt #100;
nop;
in temp1,RD7862;1ST CHA1
rpt #10;
nop;
in temp2,RD7862;2ND CHB1
nop;
lacc temp1;
and #0fffh;
sacl temp1;
and #800h;
bcnd do_positive3,EQ;
lacc temp1;
and #7ffh;
sub #800h;
sacl temp1;
do_positive3:
lacc temp2;
and #0fffh;
sacl temp2
and #800h
bcnd do_positive4,EQ;
lacc temp2
and #7ffh
sub #800h
sacl temp2
do_positive4:
lacc temp1;
sub #04;
sacl uab;
ldp #225;
lacc PADATDIR;
and #0f0eh;
sacl PADATDIR;
nop;
nop;
nop;
nop;
nop;
ldp #4;
splk #0ffffh,temp1;
out temp1,CON7862;
nop;
ldp #4;
call DISPLAY;
TEST0:
ldp #4;
lacc error;
bcnd ra2,NEQ;
nop;
lacc enable;
bcnd Rotor_pos,NEQ;
nop;
b ra2;
Rotor_pos:
ldp #225;
lacc PADATDIR;
or #000ch;
sacl PADATDIR;
nop;
ldp #4;
splk #12500,temp;
splk #100,temp3;
lacc fgive,16;
rpt #14;
subc temp;
sacl temp1;
lt temp1;
mpy theta360;
pac;
sach temp1,1;
lacc temp1;
rpt #15;
subc temp3;
sacl delta;
THET11:
lacc theta;
add delta;
sacl theta;
lacc theta;
sub theta360;
bcnd THET5,lt;
lacc theta;
sub theta360;
sacl theta;
lacc t2count;
add delta;
sacl t2count;
splk #0,sign;
THET5:
lacc #1;
sacl sinsign;
sacl cossign;
lacc theta;
sacl temp2;0-90 degree
sub theta90;
bcnd THET6,LEQ;
splk #-1,cossign;
lacc theta180;
sub theta;
sacl temp2;0-90 degree
bcnd THET6,GEQ;
splk #-1,sinsign;
lacc theta;
sub theta180;
sacl temp2;0-90 degree
lacc theta270;
sub theta;
bcnd THET6,GEQ;
splk #1,cossign;
lacc theta360;
sub theta;
sacl temp2;0-90 degree
THET6:
*** calculate temp3 from temp2
splk #517dh,temp;(1.15)
lt temp2;
mpy temp;
pac;
sach temp3,1;
***calculate sina,cosa according to theta,sintable
lacc temp3; actual sintable entry
add #sintable;
tblr temp;
lt sinsign;
mpy temp;
spl sina;
lacc #4096;
sub temp3;
add #sintable;
tblr temp;
lt cossign;
mpy temp;
spl cosa;
lt cosa;
mpy SQRT32;
pac;
neg;
sach temp1,1;
lacc temp1,16;
sub sina,15;
sach sinb;
lt cosa;
mpy SQRT32;
pac;
sach temp1,1;
lacc temp1,16;
sub sina,15;
sach sinc;
Current_loop:
nop
ldp #4;
in temp1,RD7862;
rpt #10;
nop;
in temp2,RD7862;
nop;
lacc temp1;
and #0fffh;
sacl temp1;
and #800h;
bcnd do_positive1,EQ;
lacc temp1;
and #7ffh;
sub #800h;
sacl temp1;
do_positive1:
lacc temp2;
and #0fffh;
sacl temp2
and #800h
bcnd do_positive2,EQ;
lacc temp2
and #7ffh
sub #800h
sacl temp2
do_positive2:
lacc temp1;
sub #24;
sacl ib;
lacc temp2;
sub #24;
sacl ic;
lacc ic;
add ib;
neg;
sacl ia;
***计算电流有效值、电压有效值、功率***
ldp #4;
lacc timer1;
add #1;
sacl timer1;
lacc ia;
abs;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -