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

📄 c8051f064.c

📁 c8051f064 源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
// Temp_3.c
//-------------------------------------------------------------------------
//  1号测试台 和2号测试台
// AUTH: CAO
// DATE: 10 AUG 2003
#include <c8051f060.h>                 // SFR declarations
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <float.h>
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F02x
sfr16 RCAP3    = 0xCA;                 // Timer3 reload value
sfr16 TMR3     = 0xCC;                 // Timer3 counter

sfr16 ADC0     = 0xBE;                 // ADC0 Data
sfr16 ADC1     = 0xBE;                 // ADC1 Data



/*
sfr16 DP       = 0x82;                 // data pointer
sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
sfr16 TMR3     = 0x94;                 // Timer3 counter
sfr16 ADC0     = 0xbe;                 // ADC0 data
sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
sfr16 T2       = 0xcc;                 // Timer2
sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
sfr16 T4       = 0xf4;                 // Timer4
sfr16 DAC0     = 0xd2;                 // DAC0 data
sfr16 DAC1     = 0xd5;                 // DAC1 data
*/
//-----------------------------------------------------------------------------
// Global CONSTANTS
#define SYSCLK  22118400
#define BAUDRATE  9600

sbit  C_485DE =  P0^2 ;     //485方向控制脚 0 recept  1  send
sbit LED = P3^5;                       // LED='1' means ON
sbit K0 = P6^3;                       // K0='0'  means ON 常开弹跳
sbit K1 = P6^2;                       // K1='0'  means ON 常闭弹跳
sbit K2 = P6^4;                       // K2='0'  means ON 衰减
sbit K3 = P6^1;                       // K3='0'  means ON 常闭触点  
sbit 	STRIG = P1^5;  
//-----------------------------------------------------------------------------
// Function PROTOTYPES
void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init (void);
void ADC0_Init (void);
void Timer3_Init (void);
void Time3_vecter  (void);
void delay(unsigned int x);
void  UART0RX_VECTOR (void);
void  UART1RX_VECTOR (void);
void test1(void);
void test2(void);
void test3(void);
void test4(void);
void test5(void);
void test6(void);
void test7(void);
void test8(void);
void test11(void);
void test12(void);
void test21(void);
void test22(void);
void test23(void);
void test24(void);
void timetest1(void);
void timetest2(void);
void timetest3(void);
void timetest4(void);
void adch(void);
void adch1(void);
void communication_485(void);
void cpinit(void);
void  CP0UP (void);
void  CP0DOWN (void);
void  CP1UP (void);
void  CP1DOWN (void);
void bcdchang(void);
//-----------------------------------------------------------------------------
// Global VARIABLES
//data float  admn ;                   // ADC0 decimated value
data unsigned  long  admn,adc;
xdata unsigned char r1_buffer[4];
xdata unsigned int  ad[14];
data unsigned int  t1,t0,r1,r0,t2,t3,t5,j,m;
data unsigned int  count,updata1[2],updata2[2],dodata1[2],dodata2[2];
data unsigned int  cp1,cp2,cp3,cp4,updata3[2],updata4[2],dodata3[2],dodata4[2];
unsigned int  crc_485;
unsigned char top0,top1,top2;
unsigned long  i,n;
xdata unsigned char t1_buffer[31],r0_buffer[7],t0_buffer[9];
//unsigned  long  adf;
//float  ggg;
//-----------------------------------------------------------------------------
// MAIN Routine
void main (void) 
{
   WDTCN = 0xde;                       // disable watchdog timer
   WDTCN = 0xad;
   C_485DE =0 ;
   top0 = 0x7e ;
   top1 = 0xaa ;
   top2 = 255- P7 ;
   t1_buffer[0] = 0x7e;
   t1_buffer[1] = 0xba; 
   t1_buffer[2] = 255- P7;
   n=4000;                         //47.56ms
   r1=0;
   SYSCLK_Init ();                     // initialize oscillator
   PORT_Init ();                       // initialize crossbar and GPIO
   UART0_Init ();                      // initialize UART0
   Timer3_Init ();      // initialize Timer3 to overflow at
   cpinit();
   ADC0_Init ();                       // init ADC
        for (i=3;i<29;i++)
             {
        t1_buffer[i]=0;;
              }  
   EA = 1;                             // Enable global interrupts
//********************************************************************
   WDTCN = 0xa5;       // 开看门狗,清看门狗
//   ADC0CF |= 0x02;     //  input adc *2
while (1)
 {
    WDTCN = 0xa5;       // 开看门狗,清看门狗
     count=0;  
//   TMR3  = 0x0000; 
   if (r1==0x004)
   {
    t2=r1_buffer[2];
    t3=r1_buffer[3];
   if ((t3>127)&&(t2>127))
   {
    switch(t2)
     {
      case  0x81:
         K0=0  ;            //继电器吸合,测量
         cp1=0; 
         cp3=0;
    dodata1[0]=0;
    dodata2[0]=0;
    dodata3[0]=0;
    dodata4[0]=0;
    dodata1[1]=0;
    dodata2[1]=0;
    dodata3[1]=0;
    dodata4[1]=0;
         timetest1();
      break;
      case  0x82:
         K0=0  ;            //继电器吸合,测量
         cp2=0; 
         cp4=0;
    updata1[0]=0;
    updata2[0]=0;
    updata3[0]=0;
    updata4[0]=0;
    updata1[1]=0;
    updata2[1]=0;
    updata3[1]=0;
    updata4[1]=0; 
         timetest2();
      break;
      case  0x83:
         K1=0  ;            //继电器吸合,测量
         cp2=0;
         cp4=0;
    updata1[0]=0;
    updata2[0]=0;
    updata3[0]=0;
    updata4[0]=0;
    updata1[1]=0;
    updata2[1]=0;
    updata3[1]=0;
    updata4[1]=0; 
         timetest3();
      break;
      case  0x84:
         K1=0  ;            //继电器吸合,测量
         cp1=0; 
         cp3=0;
    dodata1[0]=0;
    dodata2[0]=0;
    dodata3[0]=0;
    dodata4[0]=0;
    dodata1[1]=0;
    dodata2[1]=0;
    dodata3[1]=0;
    dodata4[1]=0;
         timetest4();
      break;
      case  0x86:
         K3=0  ;            //继电器吸合,测量常开触电
         test1();
      break;
      case  0x87:
         K3=0  ;            //继电器吸合,测量常开触电
         test2();
      break;
      case  0x88:
         test3();
      break;
      case  0x89:
         test4();
      break;
      case  0x91:
         K3=0  ;            //继电器吸合,测量常开触电
         test5();
      break;
      case  0x92:
        K3=0;
        test6();
      break;
      case  0x93:
         test7();
      break;
      case  0x94:
         test8();
      break;
      case  0x96:
         test21();
      break;
      case  0x97:
         test22();
      break;
      case  0x98:
         test23();
      break;
      case  0x99:
         test24();
      break;
      default: break;
     }
    } 
     if ((r1_buffer[2]==top2)&&(r1_buffer[3]==top2))
       {
        communication_485();
       }
      r1=0;
    }
        WDTCN = 0xa5; //清看门狗;
  }  
}
//********************************************
void communication_485(void)
{
char old_SFRPAGE = SFRPAGE;
      C_485DE=1 ;  //485方向控制口,485发    
   t1_buffer[0] = 0x7e;
   t1_buffer[1] = 0xba; 
   t1_buffer[2] = 255-P7;
      crc_485=t1_buffer[2];
          for (i=3;i<29;i++)
             {
              crc_485=(crc_485^t1_buffer[i]);
              }
        t1_buffer[29]=crc_485;     //

   SFRPAGE = UART0_PAGE;               // Switch to UART0 page

      for (t1=0;t1<30;t1++)
      {
         SBUF0 = t1_buffer[t1] ;    //数据送发送缓冲
         WDTCN = 0xa5;              //清看门狗 
         while ((SCON0&0x02)==0);
         SCON0 &=~0x02;
       delay(200);            //2.378ms
      }

    SFRPAGE = old_SFRPAGE;
       C_485DE=0  ;           //485方向控制口置低,485为接收状态  
}
//******************************************************* 
void bcdchang(void)
 {
        r0_buffer[1]=adc%10;
        adc=adc/10;
        r0_buffer[2]=adc%10;
        adc=adc/10;
        r0_buffer[3]=adc%10;
        adc=adc/10;
        r0_buffer[4]=adc%10;
        adc=adc/10;
        r0_buffer[5]=adc%10;
        adc=adc/10;
        r0_buffer[6]=adc%10;
 }
//******************************************************* 
void timetest1(void)
 {
   while (STRIG == 1);
        TR3=1;
   while (count<90) ;
       TR3=0;
        K0=1;    
    adc = (unsigned long)(800/27*dodata4[0]+dodata3[0]/2211.84);
     bcdchang ();
        t1_buffer[3]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[4]=r0_buffer[2]<<4|r0_buffer[1];
    if (dodata2[1]==0)
      {
     adc= (unsigned long)((8000/27*(dodata2[0]-dodata4[0])+dodata1[0]/221.184-dodata3[0]/221.184));
      }
    else  adc = (unsigned long)((8000/27*(dodata2[1]-dodata4[0])+dodata1[1]/221.184-dodata3[0]/221.184));
     bcdchang ();
        t1_buffer[5]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[6]=r0_buffer[2]<<4|r0_buffer[1];

     adc= (unsigned long)dodata4[0];
     bcdchang ();
        t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata4[1];
     bcdchang ();
        t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[0];
     bcdchang ();
        t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[1];
     bcdchang ();
        t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[0];
     bcdchang ();
        t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[1];
     bcdchang ();
        t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[0];
     bcdchang ();
        t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[1];
     bcdchang ();
        t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];

 } 
//******************************************************* 
void timetest2(void)
 {
   while (STRIG == 1);
        TR3=1;
   while (count<90) ;
       TR3=0;
        K0=1;  
    adc =(unsigned long)(800/27*updata2[0]+updata1[0]/2211.84);
     bcdchang ();
        t1_buffer[7]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[8]=r0_buffer[2]<<4|r0_buffer[1];
    if (updata4[1]==0)
      {
    adc= (unsigned long)(8000/27*(updata4[0]-updata2[0])+updata3[0]/221.184-updata1[0]/221.184);
     }
    else  adc = (unsigned long)(8000/27*(updata4[1]-updata2[0])+updata3[1]/221.184-updata1[0]/221.184);
     bcdchang ();
        t1_buffer[9]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[10]=r0_buffer[2]<<4|r0_buffer[1];

     adc= (unsigned long)dodata4[0];
     bcdchang ();
        t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata4[1];
     bcdchang ();
        t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[0];
     bcdchang ();
        t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[1];
     bcdchang ();
        t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[0];
     bcdchang ();
        t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[1];
     bcdchang ();
        t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[0];
     bcdchang ();
        t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[1];
     bcdchang ();
        t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];
  } 
//******************************************************* 
void timetest3(void)
 {
   while (STRIG == 1);
        TR3=1;
   while (count<90) ;
       TR3=0;

     K1=1;
    adc = (unsigned long)(800/27*updata2[0]+updata1[0]/2211.84);
     bcdchang ();
        t1_buffer[11]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[12]=r0_buffer[2]<<4|r0_buffer[1];
    if (updata4[1]==0)
      {
    adc = (unsigned long)(8000/27*(updata4[0]-updata2[0])+updata3[0]/221.184-updata1[0]/221.184);
     }
    else  adc = (unsigned long)(8000/27*(updata4[1]-updata2[0])+updata3[1]/221.184-updata1[0]/221.184);
     bcdchang ();
        t1_buffer[13]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[14]=r0_buffer[2]<<4|r0_buffer[1]; 

     adc= (unsigned long)dodata4[0];
     bcdchang ();
        t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata4[1];
     bcdchang ();
        t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[0];
     bcdchang ();
        t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[1];
     bcdchang ();
        t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[0];
     bcdchang ();
        t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[1];
     bcdchang ();
        t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[0];
     bcdchang ();
        t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[1];
     bcdchang ();
        t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];
 } 
//******************************************************* 
void timetest4(void)
 {
   while (STRIG == 1);
        TR3=1;
   while (count<90) ;
       TR3=0;
 
        K1=1;
    adc= (unsigned long)(800/27*dodata4[0]+dodata3[0]/2211.84);
    bcdchang ();
        t1_buffer[15]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[16]=r0_buffer[2]<<4|r0_buffer[1];
    if (dodata2[1]==0)
      {
    adc = (unsigned long)(8000/27*(dodata2[0]-dodata4[0])+dodata1[0]/221.184-dodata3[0]/221.184);
      }
    else  adc = (unsigned long)(8000/27*(dodata2[1]-dodata4[0])+dodata1[1]/221.184-dodata3[0]/221.184);
        bcdchang ();
        t1_buffer[17]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[18]=r0_buffer[2]<<4|r0_buffer[1];

     adc= (unsigned long)dodata4[0];
     bcdchang ();
        t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata4[1];
     bcdchang ();
        t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[0];
     bcdchang ();
        t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)dodata2[1];
     bcdchang ();
        t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[0];
     bcdchang ();
        t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata4[1];
     bcdchang ();
        t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[0];
     bcdchang ();
        t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
     adc= (unsigned long)updata2[1];
     bcdchang ();
        t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];

 } 
//******************************************************* 
void test1(void)
 {
      delay(n);
      adch();
     if (admn<298)   //小于16V
      {
        K2=0;
        delay(n);    //47.56ms
        adch();
        adc=(unsigned long)admn*3/100;     //*61/6/2*2470/4096/100   
        K2=1;
      }
      else   adc=(unsigned long)(admn*337/500);  //*1342/6/2*2470/4096/100  
        K3=1;   
        bcdchang ();
        t1_buffer[27]=r0_buffer[4]<<4|r0_buffer[3];
        t1_buffer[28]=r0_buffer[2]<<4|r0_buffer[1];
} 
//******************************************************* 
void test2(void)
 {
        test11();

⌨️ 快捷键说明

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