久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1680|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)采樣送can格式數(shù)據(jù)的源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:481548 發(fā)表于 2019-4-24 09:09 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
單片機(jī)采樣送can格式數(shù)據(jù),后端通過232轉(zhuǎn)can傳輸

單片機(jī)源程序如下:
  1. //////////////////////////////////////////////////////////////////////////////////////////////
  2.   //編制的地面電源軟件。發(fā)生過數(shù)組超限的情況軟件仿真調(diào)試完成時(shí)間2010805,          //
  3.   // 該單片機(jī)的定時(shí)器、AD轉(zhuǎn)換器、串行口都與以前不同,需要特別注意。
  4.   //////////////////////////////////////////////////////////////////////////////////////////////
  5.   #include <STC15.H>
  6. //  #include <absacc.h>
  7. //  #include <math.h>
  8.   #define uchar unsigned char
  9.   #define uint unsigned int
  10.   #define ulong unsigned long

  11.   //buf[0]~buf[3]是報(bào)頭,buf[4]、buf[5]是輸出電壓BCD碼uf[6]、buf[7]是輸出電流BCD碼,buf[8]是輸出狀態(tài)標(biāo)志1,
  12.   //buf[9]、buf[10]是溫度的BCD碼,buf[11]是輸入狀態(tài)標(biāo)志2,buf[12]、buf[13]暫時(shí)未使用。

  13.   uchar idata buf[45]={1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2};
  14.   uint  idata bufint[40]={0x0001,0x0002,0x0004,0x0008,0x0016,0x0032,0x0064,0x0128,0x0256,0x0512,0x1024,0x2048,0x4096,0x8192};
  15.   uchar code zifu1[40]={111,104,7,4,5,6,7,8,9,8,53,111,104,3,4,5,6,7,8,9,8,53,111,104,2,1,8,9,8,6,5,7,53};
  16.   uchar code zifu2[20]={1,2,4,8,16,32,3,2,1,2,3,4,5,6,7};
  17. //  unsigned int idata gz_time[10]={0,0,0,0,0};

  18.   sbit ADC_1=P1^0;             //電壓測量
  19.   sbit ADC_2=P1^1;             //電流測量
  20.   sbit ADC_3=P1^2;             //溫度測量
  21.   sbit TS=P2^5;                               //調(diào)試開關(guān)
  22.   sbit DJ=P2^1;                               //開關(guān)KGUAN
  23.   sbit SJ=P2^0;                          //發(fā)收FS   
  24. //  sfr  ADC_CONTR=0xBC;         //ADC控制寄存器
  25. //  sfr  ADC_RES=0xBD;           //ADRJ=0時(shí),ADC結(jié)果高8位;ADRJ=1時(shí),B1B0位ADC結(jié)果的高兩位ADC_RES9 ADC_ RES8      
  26. //  sfr  ADC_RESL=0xBE;          //ADRJ=0時(shí),B1B0位ADC結(jié)果的低兩位ADC_RES1 ADC_ RES0;ADRJ=1時(shí),ADC結(jié)果低8位
  27. //  sfr  WDT_CONTR=0xC1;
  28. //  sfr  AUXR=0x8E;
  29. //  sfr  AUXR1=0xA2;
  30. //  sfr  P1ASF=0x9D;
  31. //  sfr  CLK_DIV=0x97;           //ADRJ控制ADC結(jié)果存放的位置
  32. //  sfr  T2H=0xD6;               //需要定義,TH2不定義則不寫分頻系數(shù)進(jìn)0xD6,導(dǎo)致定時(shí)器2不工作,串行口不發(fā)送數(shù)據(jù),TI始終為0,不置1,無數(shù)據(jù)輸出。
  33. //  sfr  T2L=0xD7;               //需要定義,TL2不定義則不寫分頻系數(shù)進(jìn)0xD7
  34. //  sfr  P3M1=0xb1;
  35. //  sfr  P3M0=0xb2;
  36. //  sfr  P2M1=0x95;
  37. //  sfr  P2M0=0x96;
  38. //  sfr  P1M1=0x91;
  39. //  sfr  P1M0=0x92;
  40.   #define ADC_POWER  0x80      //ADC電源控制位
  41.   #define ADC_FLAG   0x10      //ADC完成標(biāo)志位
  42.   #define ADC_START  0x08      //ADC開始控制位


  43.   void timer0_ISR (  ) interrupt 1 using 2                //10毫秒@11.0592MHz時(shí)鐘
  44.               {
  45.                buf[25]=buf[25]+1;                         //中斷次數(shù)計(jì)數(shù),也就是計(jì)時(shí)。buf[25]記錄中斷的次數(shù),達(dá)到10次后清零
  46.                                }

  47.   void time0Init()                                        //定時(shí)器0初始化
  48.              {
  49.                     AUXR &= 0x7F;                                         //定時(shí)器時(shí)鐘12T模式
  50.                     TMOD &= 0xF0;                                         //設(shè)置定時(shí)器0模式
  51.                TL0=0x00;                                  //10ms中斷一次,(10ms)TH0TL0=65536-11059200/12/100=55536=0xdc00,(10ms)TH0TL0=65536-12000000/12/100=55536=0xd8f0,
  52.                TH0=0xdc;                                  //               TH0=0xdc;TL0=0x00.(50ms)H0TL0=65536-11059200/12/20=19456=0x4c00
  53.                               TF0=0;                                     //清除TF0標(biāo)志
  54.                      TR0=1;                                               //定時(shí)器0開始計(jì)時(shí)
  55.                EA=1;
  56.                     ET0=1;
  57.                        }




  58.   void inituart()                                                                    //串行口、定時(shí)器0初始化函數(shù)
  59.    {
  60.      SCON=0x50;                                                                 //串行口工作在方式1。01010000
  61.      AUXR1=0x40;                                           //將串口定義到P3.6、P3.7,AUXR1=01000000,
  62.      AUXR |= 0x01;                                            //定時(shí)器0、2不分頻,選擇定時(shí)器2作為串口1的波特率發(fā)生器
  63.      T2H=0xff;                                                                   //設(shè)定波特率重裝值TH2TL2=65536-11059200/4/11520/12=65516=0xffecTH2TL2=65536-12000000/4/9600/12=65510=0xffe6。
  64.      T2L=0xe8;                                             //9600bps@11.0592MHzTH2TL2=65536-11059200/4/9600/12=65512=0xffe8;TH2TL2=65536-11059200/4/1200/12=65344=0xff40
  65.      PCON=0x00;                                            //波特率不加倍
  66.      AUXR |= 0x10;                                          //TR2=1; //啟動T/C2
  67.      P3M1=0x00;
  68.      P3M0=0x00;
  69.    }

  70. //void UartInit(void)                                                   //9600bps@11.0592MHz
  71. //{
  72. //        SCON = 0x50;                                                      //8位數(shù)據(jù),可變波特率
  73. //        AUXR |= 0x01;                                                      //串口1選擇定時(shí)器2為波特率發(fā)生器
  74. //        AUXR &= 0xFB;                                                      //定時(shí)器2時(shí)鐘為Fosc/12,即12T
  75. //        T2L = 0xE8;                                                         //設(shè)定定時(shí)初值
  76. //        T2H = 0xFF;                                                         //設(shè)定定時(shí)初值
  77. //        AUXR |= 0x10;                                                      //啟動定時(shí)器2
  78. //}



  79.   void delay(uchar delay_time)                //延時(shí)函數(shù)。
  80.    {uchar n;
  81.     uint  m;
  82.     for (n=0;n<delay_time;n++)
  83.      {
  84.      for (m=0;m<10;m++)
  85.        WDT_CONTR=0x3C;
  86.      }
  87.    }

  88.   void set_p1_adc_channel()
  89.    {
  90.    uchar n;
  91.    P1=0x00;
  92.    ADC_CONTR=0xE0;                             //開啟AD電源 (11100000)
  93.    ADC_RES=0;                             //AD結(jié)果高位清0
  94.    ADC_RESL=0;                            //AD結(jié)果低2位清0
  95.    P1ASF=0x07;                            //P1^0、P1^1和P1^2設(shè)為AD口。
  96.    n=1;
  97.    delay(n);                                                  //穩(wěn)定電源延時(shí)。
  98.    }



  99.   void adcyang(uchar  idata *d,q)             /*A/D變換q將數(shù)據(jù)放在不同的位置*/

  100.   {uchar i,j;
  101.    ADC_CONTR=ADC_CONTR&0xE0;                   //a/d的數(shù)據(jù)存放:buf[35]buf[36]電壓、buf[37]buf[38]電流、buf[39]buf[40]溫度。
  102.    i=0;
  103.    ADC_CONTR=ADC_CONTR|i;                           //選擇P1^0進(jìn)行A/D轉(zhuǎn)換,采集電壓值
  104.    i=8;
  105.    ADC_CONTR=ADC_CONTR|i;                           //啟動A/D。
  106.    j=0;
  107.    while(j==0)
  108.    {
  109.   
  110.     j=ADC_CONTR&0x10;
  111.          if (buf[25]>0x05)                     // //調(diào)試用,防止不斷循環(huán)
  112.          {j=0x01;}
  113.    }
  114.    i=0xEF;
  115.    ADC_CONTR=ADC_CONTR&i;                           //清A/D標(biāo)志。
  116.    d[q]=ADC_RES;                                         //P1^0的A/D電壓值結(jié)果高8位。
  117.    d[q+1]=ADC_RESL;                      //P1^0的A/D電壓值結(jié)果低2位。

  118.    ADC_CONTR=ADC_CONTR&0xE0;                   //
  119.    i=1;
  120.    ADC_CONTR=ADC_CONTR|i;                           //選擇P1^1進(jìn)行A/D轉(zhuǎn)換,采集電流值,
  121.    i=8;
  122.    ADC_CONTR=ADC_CONTR|i;                           //啟動A/D。
  123.    j=0;
  124.   while(j==0)
  125.   {
  126.   j=ADC_CONTR&0x10;
  127.          if (buf[25]>0x05)                   //調(diào)試用,防止不斷循環(huán)
  128.          {j=0x01;}
  129.   }
  130.   i=0xEF;
  131.   ADC_CONTR=ADC_CONTR&i;                           //清A/D標(biāo)志。
  132.   d[q+2]=ADC_RES;                                         //P1^1的A/D電流值結(jié)果高8位。
  133.   d[q+3]=ADC_RESL;                       //P1^1的A/D電流值結(jié)果低2位。

  134.   ADC_CONTR=ADC_CONTR&0xE0;                  //A/D準(zhǔn)備
  135.   i=2;
  136.   ADC_CONTR=ADC_CONTR|i;                          //選擇P1^2進(jìn)行A/D轉(zhuǎn)換。
  137.   i=8;
  138.   ADC_CONTR=ADC_CONTR|i;                           //啟動A/D。
  139.   j=0;
  140.   while(j==0)
  141.   {
  142.   j=ADC_CONTR&0x10;
  143.          if (buf[25]>0x05)                    //調(diào)試用,防止不斷循環(huán)
  144.          {j=0x01;}
  145.   }
  146.   i=0xEF;
  147.   ADC_CONTR=ADC_CONTR&i;                          //清A/D標(biāo)志。
  148.   d[q+4]=ADC_RES;                                         //P1^2的A/D溫度值結(jié)果高8位。
  149.   d[q+5]=ADC_RESL;                                      //P1^2的A/D溫度值結(jié)果低2位。
  150.   }
  151.   



  152.     void bcdzhuanhua(unsigned int m,uchar a)
  153.      {
  154.        uchar i,p,q,r;         
  155.             uint j,k,n,h,l,t;
  156.                    q=0;
  157.        r=0;   
  158.               n=0;
  159.                               
  160.                  for(i=0;i<=14;i++)                       //二進(jìn)制位權(quán)存在,加上一個(gè)字分為4位的BCD碼。共檢查14位。15、16位沒有這么大的數(shù)。
  161.                  {
  162.                                                 //m是要轉(zhuǎn)換的值。
  163.           j=m;                              
  164.                          j>>=i;                                //從最低位開始考察m。
  165.           q=(uchar)j;                           //將j轉(zhuǎn)換換為字節(jié)
  166.           q=0x01&q;
  167.                          if(q>0)                               //考察m的每一位。
  168.                           {                            
  169.                                   k=bufint[i];                      //bufint[i]是二進(jìn)制i的位權(quán)。
  170.                                   h=0x000f;
  171.               for(p=0;p<=3;p++)                 //p是BCD碼的位置
  172.                                     {
  173.                l=n;
  174.                                         t=(k&h);
  175.                                         if(t>0)
  176.                                           {
  177.                                        n=n+t;                    //k的每組四位值最大為9。n是十進(jìn)制數(shù)同樣。不用考慮k、與n的值超過9,但要考慮進(jìn)位。
  178.                    t=h;
  179.                    t<<=4;
  180.                                             l=t&l;
  181.                                             t=t&n;                                          
  182.                    if(t>l)                      //考慮進(jìn)位
  183.                      {
  184.                                                     l=0x6666&h;
  185.                       n=n+l;                     //有進(jìn)位則加6
  186.                      }
  187.                    l=n&0x000f;
  188.                                        if(l>=0x000a)                    //還需要檢查十分位是9的情況。
  189.                                                 {
  190.                                                n=n-0x000a+0x0010;              //減10向十位進(jìn)位。
  191.                      }
  192.                                         l=n&0x00f0;
  193.                     if(l>=0x00a0)
  194.                                               {
  195.                                                n=n-0x00a0+0x0100;             //減100向佰位進(jìn)位。
  196.                      }
  197.                                              l=n&0x0f00;
  198.                     if(l>=0x0a00)
  199.                                               {
  200.                                                n=n-0x0a00+0x1000;             //減1000向千位進(jìn)位。
  201.                                               }
  202.                                              }
  203.                                      h<<=4;
  204.                                         }                                                                         
  205.                           }
  206.                  }
  207.       j=0x00ff;                                     //這里有錯(cuò),拆成一個(gè)字8位
  208.                 j=n&j;
  209.                 buf[a+2]=(uchar)j;                           
  210.            j=0xff00;
  211.                 j=n&j;
  212.                 j>>=8;
  213.                 buf[a+1]=(uchar)j;
  214.      }


  215.    void test_v( uint m )
  216.          {
  217.           int f;
  218.      uchar i;
  219.      bufint[14]=m;                        //buf[14]是電壓的16進(jìn)制值。
  220.      buf[8]=buf[8]&0xfc;                  //電壓正常,buf[8]是狀態(tài)字,狀態(tài)字的B0、B1置0.
  221.           f=m-5200;                             //5200是520V電壓,f值小于5200V位是低壓狀態(tài)。
  222.           if(f<0)
  223.           {
  224.            DJ=1;                               //發(fā)光二極管亮報(bào)警。
  225.       SJ=1;                               //蜂鳴器報(bào)警
  226.       buf[8]=buf[8]+0x02;                 //狀態(tài)字B1置1;
  227.           }
  228.           f=m-5800;                             //5800是580V電壓f值大于580V位是高壓狀態(tài)。

  229.           if(f>0)
  230.           {
  231.       DJ=1;                               //發(fā)光二極管亮報(bào)警?
  232.       SJ=1;                               //蜂鳴器報(bào)警
  233.       buf[8]=buf[8]+0x01;                 //狀態(tài)字B0置1
  234.           }


  235.      i=buf[8]&0x1f;
  236.           if(i==0)
  237.           {
  238.       DJ=0;                               //發(fā)光二極管停止報(bào)警
  239.       SJ=0;                               //蜂鳴器停止報(bào)警
  240.           }

  241.          }


  242.    void test_I( uint m )
  243.          {
  244.           int f;
  245.       uchar i;      
  246.           bufint[15]= bufint[16];              // bufint[15]~ bufint[19]是每100ms采樣的電流值。
  247.           bufint[16]= bufint[17];
  248.           bufint[17]= bufint[18];
  249.           bufint[18]= bufint[19];
  250.      bufint[19]=m;
  251.      buf[8]=buf[8]&0xe7;                  //電流正常,buf[8]是狀態(tài)字,狀態(tài)字的B3置0.
  252.           f=bufint[15]-m;                     
  253.           if(f>768)                            //768是電流掉9A的值,768=9/12*1024,處理掉電流報(bào)警。
  254.             {
  255.               DJ=1;                               //發(fā)光二極管亮報(bào)警。
  256.          SJ=1;                               //蜂鳴器報(bào)警
  257.          buf[8]=buf[8]+0x10;                 //狀態(tài)字B3置1;
  258.             }
  259.      f=m-853;                                 //853是電流10A的值,853=10/12*1024
  260.      if(f>=0)                                 //超出10A電流報(bào)警。
  261.      {
  262.               DJ=1;                               //發(fā)光二極管亮報(bào)警。
  263.          SJ=1;                               //蜂鳴器報(bào)警
  264.          buf[8]=buf[8]+0x08;                 //狀態(tài)字B3置1;      
  265.      }  
  266.      i=buf[8]&0x1f;
  267.           if(i==0)
  268.           {
  269.       DJ=0;                               //發(fā)光二極管停止報(bào)警
  270.       SJ=0;                               //蜂鳴器停止報(bào)警
  271.           }
  272.    
  273.          }


  274.    void test_T( uint m )
  275.          {
  276.           int f;
  277.      uchar i;
  278.      bufint[20]=m;                        //bufint[20]是溫度的16進(jìn)制值。
  279.      buf[8]=buf[8]&0xfb;                  //溫度正常,buf[8]是狀態(tài)字,狀態(tài)字的B2置0.
  280.           f=m-700;                             //700是70度溫度f值大于70度是高溫狀態(tài)。
  281.           if(f>0)
  282.           {
  283.       DJ=1;                               //發(fā)光二極管亮報(bào)警。
  284.       SJ=1;                               //蜂鳴器報(bào)警。
  285.       buf[8]=buf[8]+0x04;                 //狀態(tài)字B2置1。
  286.           }

  287.      i=buf[8]&0x1f;
  288.           if(i==0)
  289.           {
  290.       DJ=0;                               //發(fā)光二極管停止報(bào)警
  291.       SJ=0;                               //蜂鳴器停止報(bào)警
  292.           }
  293.          }


  294.   void dsp_data_v( )       
  295.     {
  296.    uchar i,a;
  297.    uint  k,m,j;
  298.         a=0;
  299.         j=0;
  300.         k=0;                                  //buf[35]、buf[36]是電壓的采樣值。                                   
  301.    i=buf[35];                            //采樣電壓高位值送i
  302.    k=(int)i;                        
  303.    k<<=2;                                //高位置送字的高8位
  304.    i=buf[36];                            //采樣電壓低二位采樣值送i
  305.         i=i&0x03;
  306.         k=k+(int)i;                           //拼接為字
  307.    m=k*5.8594;                          //電壓值乘以5.8594,600V電壓對應(yīng)5V直流取樣電壓1024個(gè)單位,顯示放大10倍,默認(rèn)最后一位為小數(shù)位。
  308.    test_v(m);
  309.         a=3;                                  //buf[4]、buf[5]是電壓的BCD碼
  310.    bcdzhuanhua(m,a);
  311.     }

  312.   void dsp_data_I( )       
  313.     {
  314.    uchar i,a;
  315.    uint  k,m,j;
  316.         a=0;
  317.         j=0;
  318.         k=0;                                 //buf[37]、buf[38]是電流的采樣值?
  319.    i=buf[37];                           //采樣電流高位值送i
  320.    k=(int)i;                        
  321.    k<<=2;                               //高位置送字的高8位
  322.    i=buf[38];                           //采樣電流低二位采樣值送i
  323.         i=i&0x03;
  324.         k=k+(int)i;                          //拼接為字
  325.    m=k*0.1171875;                       //電流值乘以0.1171875,12A電流對應(yīng)5V直流取樣電壓,對應(yīng)xxx.x的BCD4位碼,顯示放大10倍,默認(rèn)最后一位為小數(shù)位。
  326.    test_I(k);
  327.         a=5;                                 //buf[6]、buf[7]是電流的BCD碼
  328.    bcdzhuanhua(m,a);
  329.     }

  330.   void dsp_data_T( )       
  331.     {
  332.    uchar i,a;
  333.    uint  k,m,j;
  334.         a=0;
  335.         j=0;
  336.         k=0;                                 //buf[39]、buf[40]是溫度的采樣值。
  337.    i=buf[39];                           //采樣電流高位值送i
  338.    k=(int)i;                        
  339.    k<<=2;                               //高位置送字的高8位
  340.    i=buf[40];                           //采樣電流低二位采樣值送i
  341.         i=i&0x03;
  342.         k=k+(int)i;                          //拼接為字
  343.    m=k*0.976525;                        //溫度值乘以0.976525,100度溫度對應(yīng)5V直流取樣電壓,對應(yīng)xxx.x的BCD4位碼,如065.7度、105.6度。
  344.    test_T(m);
  345.         a=8;                                 //buf[9]、buf[10]是溫度的BCD碼。
  346.    bcdzhuanhua(m,a);
  347.     }

  348.   
  349. void send1(uchar idata *d,uchar n)          //發(fā)送函數(shù)
  350.      { uchar i;
  351.        REN=0;                                              //防止自發(fā)自收。

  352.        for (i=0;i<=n;i++)
  353.         {
  354.         TI=0;
  355.         SBUF=d[i];                                   //發(fā)一個(gè)現(xiàn)在的數(shù)據(jù)                                 
  356.         while (TI==0);
  357.         TI=0;                          //等待發(fā)送出去
  358.         if(i==11)
  359.           {      
  360.                          TS=!TS;
  361.            }                    //發(fā)送一次數(shù)據(jù)取反一次。
  362.         }
  363.        REN=1;
  364.      }
  365.   

  366.     void receive(uchar idata *d,uchar n)                 //接受函數(shù)接收14位身份加2位開關(guān)
  367.      {
  368.           uchar i;            
  369.      for(i=0;i<=n;i++)
  370.         {while (RI==0)
  371.                          {
  372.                                         if(buf[25]>=0x07)
  373.                                           {
  374.                                           i=12;                           //接收的數(shù)據(jù)不可用,SBUF的數(shù)據(jù)儲存到d[24]中丟棄。
  375.                                      break;
  376.                                           }
  377.                                         }
  378.                           RI=0;                         //接收n個(gè)數(shù)據(jù);一般為12個(gè)。
  379.                 d[i+12]=SBUF;                             //接收一個(gè)數(shù)據(jù),放在 d[i+m]處
  380.              }
  381.      }
  382.    


  383.   void main()
  384.   
  385.   {
  386.     //buf[0]~buf[3]是報(bào)頭,buf[4]、buf[5]是輸出電壓BCD碼uf[6]、buf[7]是輸出電流BCD碼,buf[8]是輸出狀態(tài)標(biāo)志1,
  387.     //buf[9]、buf[10]是溫度BCD碼,buf[11]是輸入狀態(tài)標(biāo)志2,
  388.    buf[0]=0x1c;   buf[1]=0xff;   buf[2]=0x50;   buf[3]=0xe7;   buf[4]=0x00;                          
  389.    buf[5]=zifu1[5];   buf[6]=zifu1[6];   buf[7]=zifu1[7];   buf[8]=0x00;   buf[9]=zifu1[9];
  390.    buf[10]=zifu1[10]; buf[11]=0x00; buf[12]=0x00; buf[13]=zifu1[13]; buf[14]=zifu1[14];
  391.    buf[15]=zifu1[15]; buf[16]=zifu1[16]; buf[17]=zifu1[17]; buf[18]=zifu1[18]; buf[19]=zifu1[19];
  392.    buf[20]=zifu1[20]; buf[21]=zifu1[21]; buf[22]=zifu1[22]; buf[23]=zifu1[23];
  393.         bufint[23]=1222;
  394.    // buf[39]=zifu1[24];
  395.    //buf[25]=zifu1[25]; buf[26]=zifu1[26]; buf[27]=zifu1[27]; buf[28]=zifu1[28]; buf[29]=zifu1[29];
  396.    //buf[30]=zifu1[30]; buf[31]=zifu1[31]; buf[32]=zifu1[32];
  397.    time0Init();                       //定時(shí)器0初始化
  398.    inituart();                        //串行口初始化 定時(shí)器2初始化//
  399.    P1=0x00;
  400.         P2=0x00;
  401.         P3=0x80;
  402.    for(; ;)                           //主程序循環(huán)執(zhí)行。
  403.    {
  404.    uchar n,k;
  405.    set_p1_adc_channel();              //AD采樣初始化

  406.    if (buf[25]>0x09)                 //100ms時(shí)間值0x0a。              
  407.         {
  408.      buf[34]= buf[34]+1;              //記錄100ms時(shí)間的次數(shù)
  409.      buf[25]=0;                       //buf[25]記錄10ms一次的時(shí)間,100ms時(shí)間到清零。其值為:
  410.      n=35;                              //a/d的數(shù)據(jù)存放:buf[35]buf[36]電壓、buf[37]buf[38]電流、buf[39]buf[40]溫度。
  411.      adcyang(buf,n);                                        //A/D采樣。
  412.      dsp_data_v( );                   //對電壓值進(jìn)行處理
  413.      dsp_data_I( );                   //對電流值進(jìn)行處理
  414.      dsp_data_T( );                   //對溫度值進(jìn)行處理

  415.    }


  416.   if (buf[34]>0x04)                   //500ms時(shí)間到,發(fā)送一次數(shù)據(jù)。
  417.    {
  418.    buf[34]=0;                         //發(fā)送完數(shù)據(jù)清零buf[34],500ms清零。

  419.    k=11;                              //一共發(fā)送12個(gè)數(shù)據(jù),從d[0]~d[11]。
  420.    send1(buf,k);
  421.         }


  422.    n=11;                              //接收數(shù)據(jù)一幀為12個(gè)數(shù)據(jù)                                     
  423.    receive(buf,n);

  424.    WDT_CONTR=0x34;
  425.     n=1;
  426.    delay(n);
  427.     }

  428.   }


  429. //2017年編制的電壓電流溫度測量軟件,處理并發(fā)送數(shù)據(jù)。
復(fù)制代碼

所有資料51hei提供下載:
備份.zip (8.27 KB, 下載次數(shù): 9)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色综合色综合 | 欧美成人h版在线观看 | 欧美久久精品 | 一级毛片视频在线观看 | 国产精品美女久久久 | 国产精品久久久久无码av | 性xxxxx | a毛片| 日韩一区二区三区在线观看视频 | 国产一二三视频在线观看 | 99久久亚洲 | 午夜合集| 高清欧美性猛交xxxx黑人猛交 | 激情婷婷成人 | 99精品国产一区二区三区 | 久久精品屋 | 久久久久亚洲精品 | 91av免费版 | 欧美多人在线 | 99pao成人国产永久免费视频 | 精品国产一区二区三区久久影院 | 国产精品美女久久久久久免费 | 久久国际精品 | 99久久亚洲| 91传媒在线观看 | 欧美日韩专区 | 在线观看免费av网 | 美女黄网站视频免费 | 九九九久久国产免费 | 午夜天堂 | 不卡一二区 | 91av导航 | 国产精品久久久久久久久污网站 | 成人国产精品免费观看视频 | 日本不卡高清视频 | 日韩视频免费看 | 精品国产三级 | 亚洲成人福利在线观看 | 国产色网 | 亚洲一区二区三区四区五区午夜 | 97视频网站|