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

📄 shiyan.c

📁 基于dsPIC30F的 智能型变压器有载分接开关参数综合测试仪 C语言
💻 C
📖 第 1 页 / 共 4 页
字号:
           D++;
           SHIJTZ6(void);//调整到秒显示
          }
         if(D==6)               //秒调整完成
          {
           D++;
           SHIJTZ7(void);//调整到返回显示
          }
         if(D==7)               //时间调整完成返回
         {
            D=0;
            
            SHIJIAN(void);
          }
      }
    else if(C!=0)                  //时间显示、调整、返回。
          {
            if(C==1)
             {
               E=1;
               XIANSHISJ(void);         //显示时间子程序,
              }
            if(C==2)
              TIAOZHENGSJ(void);       //时间调整子程序
            if(C==3)
              {
               A=1;
               CHUSHIXS(void);     //返回到量程、时间、打印的选择界面
               }
           }
     else if(B!=0)                //量程选择。
          {
            if(B==1)
               CL1(void);          //0.1A测量
               E=1;
            if(B==2)
               CL2(void);          //1A测量
               E=1;
            if(B==3)
               CL3(void);          //10A测量
               E=1;
            if(B==4) 
              {
               A=1;
               CHUSHIXS(void);     //返回到量程、时间、打印的选择界面
               }
           }
     else if(A!=0)                 //量程、时间、打印的选择
          {
            if(A==1)
               CL(void);           //量程选择界面
            if(A==2)
               SJ(void);           //时间控制界面
            if(A==3)
               {
                  DAYIN(void);        //打印子程序
                  A=1;
                  CHUSHIXS(void);
                }
           }    
     else if(E==1)
            {
             A=1
             CHUSHIXS(void);           //测量后返回  
            } 
     }





//发送中断
void __attribute__((__interrupt__)) _U2TXInterrupt(void)    
{
  IFS1bits.U2TXIF = 0;
}




//接受中断
void __attribute__((__interrupt__)) _U2RXInterrupt(void)  
{
  IFS1bits.U2RXIF = 0;

  while( DataRdyUART2())
  {
    ( *(Receiveddata)++) = ReadUART2();
  }
}



//异步串行通讯初始化
void InitUART2(void) 
 {
   CloseUART2();                                           // Turn off UART1module 
   ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR6 &
                  UART_TX_INT_EN & UART_TX_INT_PR2);       // Configure uart2 receive and transmit interrupt    
   baudvalue = 64;       //Baud 2400                      // Configure UART2 module to transmit 8 bit data with one stopbit.Also DISable loopback mode 
   U2MODEvalue = UART_EN & UART_IDLE_CON &
                 UART_EN_WAKE & UART_DIS_LOOPBACK &
                 UART_DIS_ABAUD & UART_NO_PAR_8BIT &
                 UART_1STOPBIT;
   U2STAvalue = UART_INT_TX_BUF_EMPTY &
                UART_TX_PIN_NORMAL &
                UART_TX_ENABLE & UART_INT_RX_CHAR &
                UART_ADR_DETECT_DIS &
                UART_RX_OVERRUN_CLEAR;
 }
 

//异步串行信号写操作子程序  
 unsigned char UART2Write(unsigned char AA)
   {
   OpenUART2(U2MODEvalue, U2STAvalue, baudvalue);      // Load transmit buffer and transmit the same till null character is encountered 
   WriteUART2 (AA);                                  // send to a data 
   while(BusyUART2());                                 // If ‘1’ is returned, it indicates that UART is busy in transmission   
   while(!IFS1bits.U2RXIF);                        // Waiting for produce interrupt
   IFS1bits.U2RXIF=0;                              // clear interrupt flag
   }


//D/A数据输入子程序
 unsigned int DAWrite(unsigned int AA)
  {unsigned int i,BB;
     DASCLK=0;
     if (AA&0x80)
          {
            DADIN=1;
          }
        else 
          {
            DADIN=0;
          }
      DASCLK=1;
     
   for(i=0,i<7,i++)
    { 
       DASLCK=0;
       BB=AA;
       if ((AA<<1)&0x80)
          {
            DADIN=1;
          }
        else 
          {
            DADIN=0;
          }
       DASCLK=1;
     } 
     delay(500);
    for(i=0,i<8,i++)
    { 
       DASCLK=0;
       if ((BB<<1)&0x80)
          {
            DADIN=1;
          }
        else 
          {
            DADIN=0;
          }
       DASCLK=1;
     } 
  }
 



//时钟芯片写子程序
unsigned int SZWrite(unsigned int AA,unsigned int BB) 
  {  
      SRET=0;
      SCLK=0;
      SRET=1;
     AA<<8;
     for(i=0,i<8,i++)
      { 
       SCLK=0;
       if ((AA<<1)&0x80)
          {
            SIO=1;
          }
        else 
          {
            SIO=0;
          }
       SCLK=1;
      }
     BB<<8;
     for(i=0,i<8,i++)
      { 
       SCLK=0;
       if ((BB<<1)&0x80)
          {
            SIO=1;
          }
        else 
          {
            SIO=0;
          }
       SCLK=1;
      }  
  }




//时钟芯片读子程序
unsigned int SZRead(unsigned int AA,unsigned int BB)
  {
    unsigned int CC,DD;
      BB=0;
      SRET=0;
      SCLK=0;
      SRET=1;
     AA<<8;
     for(i=0,i<8,i++)
      { 
       SCLK=0;
       if ((AA<<1)&0x80)
          {
            SIO=1;
          }
        else 
          {
            SIO=0;
          }
       SCLK=1;
      }

     for(i=0,i<8,i++)
      { CC=1;
        DD=0;
       SCLK=0;
       if (SIO==1)
          {
            CC<<i;
            BB=BB|CC;
          }
        else 
          {
            DD<<i;
            BB=BB|CC;
          }
       SCLK=1;
      }
   
  }








//void uart1int(void);
//void uart1int(void); 

//void CloseUART2(void); 
void EnablePSV(void);
void spiint(void);
//void DisablePSV(void); 
//float counter1,counter2; 
//unsigned char c,e;
//unsigned char a,b;           
int main (void)
{
  //unsigned char a,b,s1,s2;
  //unsigned char ch_status1,ch_status2; 
 // int c,d,e,f,g,i;
  //int max1, max2;
 // int min1, min2;
 // unsigned int base;
 // volatile unsigned int fudu1,fudu2;
  //double  maxd1,mind1,maxd2,mind2;
 // double  FuDud1,FuDud2;
  inital();
  delaydms(5000);
  //ONhighpower();
  //uart1int();
  //AD1int();
 //spiint(); 
while(1)
{
    ZDWR2=!ZDWR2;
    CONTROLZF=1;
    CONTROLAD=1;
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    CONTROLZF= 0;
    CONTROLAD= 0;
    ZDWR2=!ZDWR2;
    ZDWR20=!ZDWR20; 
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    ZDWR20=!ZDWR20;
    ZDWR200=!ZDWR200;
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    ZDWR200=!ZDWR200; 
    BDWR200=!BDWR200;
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    BDWR200=!BDWR200;
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    delaydms(50000);
    HIGHPOWER=!HIGHPOWER;
    delaydms(50000);
    HIGHPOWER=!HIGHPOWER;
    delaydms(50000);   
}
  //while(1)
  //{ 
  //  nop();
  //}
/**********************************************************************************
    do
   {
     WriteSPI2(0x0f); 
     while(SPI2STATbits.SPITBF);
     //WriteSPI2(0x0f); 
    // while(SPI2STATbits.SPITBF);
     SPI2BUF=0; 
    while(!DataRdySPI2()); //If ‘1’  indicates that the data has been received in the receive buffer and is to be read.
    (unsigned char)datard = ReadSPI2();
     if(datard==0xaa) break;
     //{
     //  s1=datard;
     //  WriteSPI2(0x55); 
     // while(SPI2STATbits.SPITBF);
     //}
     SPI2BUF=0; 
     while(!DataRdySPI2()); //If ‘1’  indicates that the data has been received in the receive buffer and is to be read.
    (unsigned char)datard = ReadSPI2();
     if(datard==0xaa) break;
    //{
      // s1=datard;
      // WriteSPI2(0x55); 
      // while(SPI2STATbits.SPITBF);
     //}
   }while(1);//datard!=0xaa);
   //nop();
   //nop();
   do
   {
     WriteSPI2(0x55); 
   while(SPI2STATbits.SPITBF);
     //WriteSPI2(0x55); 
    //while(SPI2STATbits.SPITBF);
     SPI2BUF=0; 
     while(!DataRdySPI2()); //If ‘1’  indicates that the data has been received in the receive buffer and is to be read.
    (unsigned char)datard = ReadSPI2();
     if(datard==0xff) break;
     //{
       //s1=datard;
     //}
     SPI2BUF=0; 
     while(!DataRdySPI2()); //If ‘1’  indicates that the data has been received in the receive buffer and is to be read.
    (unsigned char)datard = ReadSPI2();
     if(datard==0xff) break;
     //{
      //s1=datard;
     //}
   }while(1);
    WriteSPI2(0x0f); 
    while(SPI2STATbits.SPITBF);
    PORTGbits.RG12=!PORTGbits.RG12;
  }
  PORTGbits.RG0=0;      //复位2120 
  OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
  delaydms(500);
  PORTGbits.RG0=1; 
  PORTGbits.RG1=0;      //启动4100
  do
  {
    putsUART1(Buf);     //发一个字符数据   
    while(BusyUART1());   // Wait for transmission to complete If ‘1’ is returned, it indicates that UART is busy in transmission 
    nop(); nop();
    while(!IFS0bits.U1RXIF);
    IFS0bits.U1RXIF =0;    
    while(DataRdyUART1())     // Read all the data remaining in receive buffer which are unread 
    {
       a=ReadUART1();
    }
  }while(a!=0xaa);            //while(a!=0x55);
  for(b=3;b>0;b--)
  {
    putsUART1((Buf+1));     //发一个字符数据   
    while(BusyUART1());     // Wait for transmission to complete If ‘1’ is returned, it indicates that UART is busy in transmission 
  }
  
  do
  {
    max1=0;                      
    min1=2046;
    max2=0;                      
    min2=2046;
    s1=0;s2=0;
    PORTCbits.RC1 = 1;            // set out A/D
    for(c=1000;c>0;c--)
    {
      ADread();
      if(e>max1) max1=e;
      if(e<min1) min1=e; 
      if(g>max2) max2=g;
      if(g<min2) min2=g;
      //PORTDbits.RD9=1;
    }
    PORTCbits.RC1 = 0;
    maxd1=(double)max1;
    mind1=(double)min1;
    maxd2=(double)max2;
    mind2=(double)min2;
    FuDud1=(maxd1-mind1)/2;
    FuDud2=(maxd2-mind2)/2;
    fudu1=(int)FuDud1;       //正或反幅度
    fudu2=(int)FuDud2;       //标准幅度
    PORTDbits.RD10=0;        //开标准选当4051    
    PORTDbits.RD11=0;        //开正接选当4051
    if(fudu1>FuDufirst)
    {
      hdcx1();
    }
    else
    {
      if((fudu1*10)<=FuDufirst)
      {
        if((fudu1*100)<=FuDufirst)
        {
          if((fudu1*1000)<=FuDufirst)
          {
             PORTDbits.RD8=1;                 //关闭正档3(2欧姆)
             PORTDbits.RD7=1;                 //关闭正档2(20欧姆)            
             PORTDbits.RD6=1;                 //关闭正档1(220欧姆)
             hdcx1();
          }
          else
          {
             PORTDbits.RD8=1;                  //关闭正档3(2欧姆)
             PORTDbits.RD7=1;                  //关闭正档2(20欧姆)            
             PORTDbits.RD6=0;                  //选通正档1(220欧姆)
             hdcx1();
          }
        }
        else
        {
           PORTDbits.RD8=1;                   //关闭正档3(2欧姆)

⌨️ 快捷键说明

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