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

📄 interrupt.h

📁 三軸伺服馬達控制程式利用軟體DDA方式讀回目前位置然後以取樣時間計算出下一點位置取誤差後利用DA將命令電壓送出做三軸控制
💻 H
字号:
interrupt [TIMER1_OVF1_vect] void Timer1_OVF_interrupt(void)
{ 
  int k;  
  unsigned Cmd;                                   
  unsigned char near *DaAdr; 
  TCNT1=55536;  
  Cmd=EERead(CMDADR);
  if ((Cmd<1) || (Cmd>=7)) {
    GetAbsEncoderPos();  
    DAError1=Pulse_Cnt1-AbsEncoderPos1;
    DAError2=Pulse_Cnt2-AbsEncoderPos2;
    DAError3=Pulse_Cnt3-AbsEncoderPos3;  
    if (DDAOK==0) DDAOK=1; 
    if (DAError1>2047 && DAError1<4095) DAError1=2047;
    if (DAError1<-2048 && DAError1>-4096) DAError1=-2048;   
    if (DAError2>2047 && DAError2<4095) DAError2=2047;
    if (DAError2<-2048 && DAError2>-4096) DAError2=-2048;   
    if (DAError3>2047 && DAError3<4095) DAError3=2047;
    if (DAError3<-2048 && DAError3>-4096) DAError3=-2048;    
    
  }  
   
  DaAdr=(unsigned char near*) DA1LO; 
  k=DAError1;
  k=k+CONST;
  *DaAdr=k;
  DaAdr++;
  *DaAdr=k>>8; 
  
  DaAdr=(unsigned char near*) DA2LO; 
  k=DAError2;
  k=k+CONST;
  *DaAdr=k;
  DaAdr++;
  *DaAdr=k>>8; 
  
  DaAdr=(unsigned char near*) DA3LO; 
  k=DAError3;
  k=k+CONST;
  *DaAdr=k;
  DaAdr++;
  *DaAdr=k>>8; 
   
  if (AccStart==1) {
    if (AccMSec!=0) AccMSec--;
  }
  if (JogStart==1) {
    if (JogSec!=0) {
      MiliSec--;
      if (MiliSec==0) {
        JogSec--;
        MiliSec=1000;
      }
    }
  }        
}
   
 
interrupt [UART_RX_vect] void UART_RX_interrupt(void)
{   
    
  unsigned char Temp,i,Num,EEAdr; 
  //PORTD|=0x20;  
  RxdBuf[RxdIndex]=UDR;
  if (RxdBuf[RxdIndex]==CR) {
    RxdOK=1;  
    if ( RxdBuf[0]==ESC) {
      TxdBuf[0]=ESC;
      switch (RxdBuf[1]) {
        case 'R':                   
          TxdBuf[1]='A'; 
          if (RxdBuf[2]>'9') EEAdr=(RxdBuf[2]-7)&0x0f;  
          else EEAdr=RxdBuf[2]&0x0f;
          EEAdr<<=4;    
                
          if (RxdBuf[3]>'9') EEAdr|=((RxdBuf[3]-7)&0x0f);  
          else EEAdr|=(RxdBuf[3]&0x0f); 
          
          if (RxdBuf[4]>'9') Num=(RxdBuf[4]-7)&0x0f;  
          else Num=RxdBuf[4]&0x0f; 
                  
          for (i=0;i<Num;i++) {
            Temp=EERead(EEAdr+i);
            if ((Temp>>4)>0x09) TxdBuf[2+(i<<1)]=((Temp>>4)|0x30)+7;
            else TxdBuf[2+(i<<1)]=(Temp>>4)|0x30;
            if ((Temp&0x0f)>0x09) TxdBuf[3+(i<<1)]=((Temp&0x0f)|0x30)+7;
            else TxdBuf[3+(i<<1)]=(Temp&0x0f)|0x30;
          }              
          TxdBuf[2+(i<<1)]=CR; 
          break;
        case 'W':                
          if (RxdBuf[2]>'9') EEAdr=(RxdBuf[2]-7)&0x0f;  
          else EEAdr=RxdBuf[2]&0x0f;
          EEAdr<<=4;    
                
          if (RxdBuf[3]>'9') EEAdr|=((RxdBuf[3]-7)&0x0f);  
          else EEAdr|=(RxdBuf[3]&0x0f); 
          i=4; 
          PORTD|=0x20; 
          while (RxdBuf[i]!=CR) { 
            if (RxdBuf[i]>'9') Temp=(RxdBuf[i]-7)&0x0f;    
            else Temp=RxdBuf[i]&0x0f;
            Temp<<=4;        
            i++;        
            if (RxdBuf[i]>'9') Temp|=((RxdBuf[i]-7)&0x0f);   
            Temp|=(RxdBuf[i]&0x0f); 
            i++; 
            EEWrite(EEAdr,Temp);
            EEAdr++;
            if (i>14) break;
          }  
          PORTD&=0xdf;  
          break; 
        case 'S':
          Start=1;  
          EEWrite(RUNADR,Start); 
          break; 
        case 'Q':
          Start=0;  
          EEWrite(RUNADR,Start);  
          break;       
        default:
          break;
      }
    }              
    RxdIndex=0;
  } 
  else {
    RxdIndex++;
    if (RxdIndex>14) RxdIndex=0;
  }      
  //PORTD&=0xdf;  
} 

⌨️ 快捷键说明

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