国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標(biāo)題: c8051f040單片機(jī)做一個(gè)PID恒壓控制的功能 [打印本頁]

作者: eng    時(shí)間: 2021-6-22 01:23
標(biāo)題: c8051f040單片機(jī)做一個(gè)PID恒壓控制的功能
  1. 12位ADC模擬量輸入配設(shè)置
  2. void ADC0_Init (void) //
  3.     {
  4.      char SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page

  5.      SFRPAGE = ADC0_PAGE;

  6.      ADC0CN = 0x80;                      // ADC0 enabled; normal tracking   1000 0000  ADC0使能
  7.                                          // mode; ADC0 conversions are initiated
  8.                                          // when writing 1 to ad0busy flag; ADC0 data is
  9.                                          // right-justified

  10.      REF0CN = 0x03;                      // Enable on-chip VREF,  0011 電壓基準(zhǔn)寄存器 基準(zhǔn)電壓選擇 內(nèi)部基準(zhǔn)電壓到VREF引腳
  11.                                          // and VREF output buffer
  12.      AMX0CF = 0x00;                      // ALL inputs are single-ended (default)  信號(hào)采集單端輸入  AMX0CF: AMUX0 配置寄存器
  13.      AMX0SL = 0x06;                      // 選擇P3偶數(shù)引腳
  14.      AMX0PRT = 0x01;                     // 選擇P3.0作為初始模擬輸入
  15.      ADC0CF = 0x98;                      // ADC conversion clock = 1.10592MHz, Gain=1   1001 1000  20分頻    conversion轉(zhuǎn)換 PGA放大增益為1 轉(zhuǎn)換的時(shí)鐘周期
  16.      SFRPAGE = SFRPAGE_SAVE;             // Restore SFR page
  17.     }


  18. 模擬量采集
  19. SFRPAGE = SFRPAGE_SAVE;
  20.      num++;        //掃描6次,使用6個(gè)數(shù)碼管
  21.      count++;
  22.         if(num==6)
  23.             num=0;
  24.         if(count == 5)
  25.         {
  26.          count = 0;
  27.          SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page
  28.          SFRPAGE = ADC0_PAGE;

  29.          AMX0SL = 0x06;                      // 選擇P3偶數(shù)引腳  0110  AMX0AD3-0 都配置為單端輸入
  30.          AMX0PRT = 0x01;                     // 選擇P3.0作為初始模擬輸入 0001

  31.          for(t = 0;t<8;t++)          // 第一路循環(huán)采樣
  32.             {
  33.              AD0INT = 0;
  34.              AD0BUSY = 1;//寫1采樣一次
  35.              while(!AD0INT);
  36.              accumulator += ADC0;
  37.              for(s = 0; s<6;s++)         //延時(shí)6個(gè)周期
  38.                 {
  39.                  ;
  40.                 }
  41.             }
  42.          real0 = (int)((accumulator >> 3));                 //20190814
  43.          PID1_OUT();
  44.          accumulator = 0;

  45.          AMX0SL = 0x06;                      // 選擇P3偶數(shù)引腳 0110
  46.          AMX0PRT = 0x04;  

  47. 負(fù)壓數(shù)據(jù)
  48. temp = (int)((1-real0/4096.0)*690);                //20190426
  49.         StrTab[0]=led_code[18];        //顯示P
  50.         StrTab[1]=led_code[0];         //顯示0
  51.         StrTab[2]=0xBF;                //顯示"-"          20190426
  52.         StrTab[3]=led_code[temp/100] & 0X7F;        //顯示負(fù)壓整數(shù)部分并且顯示小數(shù)點(diǎn)
  53.         StrTab[4]=led_code[(temp%100)/10];
  54.         StrTab[5]=led_code[temp%10];
  55.         break;
復(fù)制代碼






歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0