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

📄 dzjs01.asm

📁 mcs-51 单片机led灯的控制。适合初学者了解单片机的功能。就这些了
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                .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 + -