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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

一個(gè)PIC單片機(jī)AD采樣的程序沒(méi)給注釋?zhuān)行┎欢?qǐng)教大神紅字部分

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:306032 發(fā)表于 2018-10-24 10:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
論壇里大神用pic18f4520寫(xiě)的8路AD采樣,沒(méi)給注釋?zhuān)率钟行┑胤娇床惶?qǐng)教大神!
請(qǐng)問(wèn)紅字部分是什么意思,實(shí)現(xiàn)的什么功能?
謝謝!
//******Multi_ADChannel converter**********//
#include <pic18.h>   

__PROG_CONFIG(1,0xc200);
__PROG_CONFIG(2,0x0a16);
__PROG_CONFIG(3,0x8100);
__PROG_CONFIG(4,0x0081);
__PROG_CONFIG(5,0xc00f);
__PROG_CONFIG(6,0xe00f);
__PROG_CONFIG(7,0x400f);

#define uchar unsigned char
#define uint  unsigned int
uchar temp;
void multi_convertor(void);
void port_check(void);

uint ADbuf[10];
void delay_ms(uint t)
{
   uint m,n;
   for (m=0;m<t; m++)
     for (n=0; n<1140;n++);
}


void GPIO_Init(void)
{
  TRISA=0xff;
  TRISB=0xff;
  TRISC=0xff;
  TRISD=0xff;
  TRISE=0xff;
  PSPMODE=0;
  PSPIE=0;
  PSPIP=0;
               
  TRISBbits.RB2 =1;                  //set direction of RB2 to be An input;
  TRISBbits.RB3 =1;                  //set direction of RB3 to be An input;

}

void ADC_Init(void)
{
  ADCON1 = 0x05;                  //seting AN0~AN9 to be analog input;
  ADCON2 = 0xBE;                  //20TAD,FOSC/64 and right justified;              
}

void timer0_init(void)
{
  INTCON =0xE0;//GIE,PEIE,TMR0IE to set;
  T0CON = 0x1F;// timer0 to be 16-bit;
  TMR0H = (65536-1000)/256;
  TMR0L = (65536-1000)%256;
  T0CON |=0x80;
  TMR0ON=1;
}


void EUART_init(void)
{
  TRISC7=1;
  TRISC6=1;
  SPBRG=0x40;
  TXSTA=0x24;
  RCSTA=0x90;
  RCIE=0;
  TXIE=0;
  PEIE=1;
  GIE=1;

}

void transmit_udata(uchar udata)
{
   TXREG=udata;
   while(!TRMT);
}

uchar receive_udata(void)
{
   uchar temp;
   if (RCIF==1)
   {
     temp=RCREG;
   }
   return temp;

}
uint data_average(uint buffer[30])
{
  uchar i,j;
  uint temp;
  float temp1;
  for(i=1; i<30; i++)   
  for(j=29; j>=i; --j)
  {
   if(buffer[j-1] > buffer[j])
   {
    temp = buffer[j-1];
    buffer[j-1] = buffer[j];
    buffer[j] = temp;
   }
  }

temp1 = 0;
for(i=5; i<25; i++)
{
  temp1 += buffer[ i];
}   
temp = (uint)(((float)temp1) / 20 + 0.5);

return(temp);
}


void main(void)
{
  EUART_init();
  GPIO_Init();
  ADC_Init();
  timer0_init();  
  while(1)
    {
       temp=receive_udata();
      if (temp==0x01)
       {
         temp=0;
         port_check();
         multi_convertor();
        
       }
    }
}
void port_check(void)
{
   uchar num1, num2;

   num1=PORTD;
   num2=PORTB&0X03;
   transmit_udata(num2);
   transmit_udata(num1);
}

void multi_convertor(void)
{
   uchar data1,data2,i;
   static uchar ADC_channel=0;
   uint adc[30]={0};
     // ADC_channel++;
      for (ADC_channel=0; ADC_channel<10; ADC_channel++)
        {
        
               switch(ADC_channel)
                {
                        case 0: ADCON0=0x01;break;//AN0 channel;
                        case 1: ADCON0=0x05;break;//AN1 channel;
                        case 2: ADCON0=0x09;break;//AN2 channel;
                        case 3: ADCON0=0x0D;break;//AN3 channel;
                        case 4: ADCON0=0x11;break;//AN4 channel;
                        case 5: ADCON0=0x15;break;//AN5 channel;
                        case 6: ADCON0=0x19;break;//AN6 channel;
                        case 7: ADCON0=0x1D;break;//AN7 channel;
                        case 8: ADCON0=0x21;break;//AN8 channel;
                        case 9: ADCON0=0x25;break;//AN9 channel;
                        default:break;
                }
     
                     for(i=0;i<30;i++)  
                       {   
                            ADCON0 |=0x01;
                            asm("NOP");           
                            asm("NOP");           
                            GODONE=1;               
                            while(GODONE);
                            adc[ i]=(ADRESH*256)+ADRESL;      
                           
                        }
                        ADbuf[ADC_channel]=data_average(adc);
                        data1=ADbuf[ADC_channel]/255;
                        data2=ADbuf[ADC_channel]%255;
                        transmit_udata(data1);
                        transmit_udata(data2);
   
        }
}

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

使用道具 舉報(bào)

沙發(fā)
ID:414550 發(fā)表于 2018-10-24 11:55 來(lái)自手機(jī) | 只看該作者
排序,冒泡法排序
回復(fù)

使用道具 舉報(bào)

板凳
ID:89515 發(fā)表于 2018-10-24 12:32 | 只看該作者
對(duì)數(shù)組排序,去掉最小的5個(gè)和最大的5個(gè),再進(jìn)行算數(shù)平均値濾波。主要是提高采樣的精度。檢測(cè)端口就不知道要干什么了,什么都沒(méi)做
回復(fù)

使用道具 舉報(bào)

地板
ID:276663 發(fā)表于 2018-10-24 12:45 | 只看該作者
第一段紅色部分的那個(gè)for循環(huán)是30個(gè)數(shù)據(jù)排序,然后取5-25的20個(gè)數(shù)據(jù)平均值。
我沒(méi)用過(guò)PIC所以不知道寄存器都是啥意思分析推測(cè),
第二段紅色部分應(yīng)該是串口收到命令0x01后將D口的數(shù)據(jù)和B口與上0x03得到的數(shù)據(jù)用串口發(fā)送出去。
回復(fù)

使用道具 舉報(bào)

5#
ID:414562 發(fā)表于 2018-10-24 12:47 來(lái)自手機(jī) | 只看該作者
排序,把最小的5個(gè)過(guò)濾,再取平均
回復(fù)

使用道具 舉報(bào)

6#
ID:23606 發(fā)表于 2018-10-24 14:21 | 只看該作者
temp = (uint)(((float)temp1) / 20 + 0.5);中為什么要加0.5
回復(fù)

使用道具 舉報(bào)

7#
ID:89515 發(fā)表于 2018-10-24 16:53 | 只看該作者
YJGG 發(fā)表于 2018-10-24 14:21
temp = (uint)(((float)temp1) / 20 + 0.5);中為什么要加0.5

四舍五入
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区欧美在线 | 日操夜操| 久久精品无码一区二区三区 | 免费二区| 一区二区三区视频在线观看 | 国产精品久久久久久久7电影 | 国产亚洲区 | 亚州精品天堂中文字幕 | 日本久久网| 在线观看视频福利 | 天天操操| 中文字幕在线电影观看 | 成人久久久久 | 久久99视频| 色性av | 日韩欧美专区 | 91美女在线 | 妖精视频一区二区三区 | 天堂网avav | 国产特级毛片 | www.婷婷 | jizz在线免费观看 | 亚洲综合色丁香婷婷六月图片 | 久久神马| 色综合久久久 | 久久久久国产一区二区三区 | 国产色| 亚洲欧美成人 | 午夜免费网站 | 黄色毛片一级 | 日韩一区二区三区视频 | 亚洲国产一区二区三区四区 | 久久精品中文字幕 | 国产女人与拘做受免费视频 | 狠狠干狠狠操 | 久草视频在线播放 | 国产午夜精品一区二区三区四区 | 亚洲国产一区二区三区在线观看 | 色网在线观看 | 狠狠干狠狠操 | av在线免费观看不卡 |