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

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

QQ登錄

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

搜索
查看: 2657|回復(fù): 1
收起左側(cè)

STC單片機(jī)電量檢測(cè)程序AD轉(zhuǎn)換測(cè)量第九通道(bandgap)值

[復(fù)制鏈接]
ID:37276 發(fā)表于 2021-12-23 16:07 | 顯示全部樓層 |閱讀模式
  1. //測(cè)量第九通道(bandgap)值算出VCC

  2. #include <STC15WXX.h> //MCU:stc15w404as
  3. #include<stdio.h>
  4. #include "intrins.h"
  5. #define  uchar unsigned char  
  6. #define uint  unsigned int
  7. #define FOSC    11059200L
  8. #define BAUD    9600
  9. //工作頻率11.0592MHz     串口波特率9600
  10. //-----------------------------------------
  11. //ADC相關(guān)設(shè)定參數(shù)
  12. #define ADC_POWER   0x80            //ADC電源控制位
  13. #define ADC_FLAG    0x10            //ADC完成標(biāo)志
  14. #define ADC_START   0x08            //ADC起始控制位
  15. #define ADC_SPEEDLL 0x00            //540個(gè)時(shí)鐘
  16. #define ADC_SPEEDL  0x20            //360個(gè)時(shí)鐘
  17. #define ADC_SPEEDH  0x40            //180個(gè)時(shí)鐘
  18. #define ADC_SPEEDHH 0x60            //90個(gè)時(shí)鐘
  19. //-----------------------------------------
  20. //BandGap相關(guān)參數(shù)
  21. #define ID_ADDR_RAM 0xef        //對(duì)于只有256字節(jié)RAM的MCU(大部分系列)存放地址為0EFH
  22. //#define ID_ADDR_RAM 0x6f        //對(duì)于只有128字節(jié)RAM的MCU(stc15f/w100系列)存放地址為06fH
  23. //注意:需要在下載代碼時(shí)選擇"在ID號(hào)前添加重要測(cè)試參數(shù)"選項(xiàng),才可在程序中獲取此參數(shù)
  24. //容量不同的單片機(jī)請(qǐng)更改不同數(shù)值
  25. //#define ID_ADDR_ROM 0x03f7      //1K程序空間的MCU
  26. //#define ID_ADDR_ROM 0x07f7      //2K程序空間的MCU
  27. //#define ID_ADDR_ROM 0x0bf7      //3K程序空間的MCU
  28. //#define ID_ADDR_ROM 0x0ff7      //4K程序空間的MCU
  29. //#define ID_ADDR_ROM 0x13f7      //5K程序空間的MCU
  30. #define ID_ADDR_ROM 0x1ff7      //8K程序空間的MCU
  31. //#define ID_ADDR_ROM 0x27f7      //10K程序空間的MCU
  32. //#define ID_ADDR_ROM 0x2ff7      //12K程序空間的MCU
  33. //#define ID_ADDR_ROM 0x3ff7      //16K程序空間的MCU
  34. //#define ID_ADDR_ROM 0x4ff7      //20K程序空間的MCU
  35. //#define ID_ADDR_ROM 0x5ff7      //24K程序空間的MCU
  36. //#define ID_ADDR_ROM 0x6ff7      //28K程序空間的MCU
  37. //#define ID_ADDR_ROM 0x7ff7      //32K程序空間的MCU
  38. //#define ID_ADDR_ROM 0x9ff7      //40K程序空間的MCU
  39. //#define ID_ADDR_ROM 0xbff7      //48K程序空間的MCU
  40. //#define ID_ADDR_ROM 0xcff7      //52K程序空間的MCU
  41. //#define ID_ADDR_ROM 0xdff7      //56K程序空間的MCU
  42. //#define ID_ADDR_ROM 0xeff7      //60K程序空間的MCU
  43. //-----------------------------------------
  44. //聲明
  45. void InitUart();
  46. void InitADC();
  47. void SendData(uchar dat);
  48. uint GetADCResult(uchar ch);
  49. void Delay(uint n);
  50. void ShowResult(uchar ch);
  51. void main()
  52. {
  53.     InitUart();                     //初始化串口
  54.     InitADC();                      //初始化ADC
  55.     P1M1=0X01;                        //高阻輸入
  56.     while (1)
  57.     {
  58.         ShowResult(0);              //顯示通道0
  59.         //ShowResult(1);              //顯示通道1
  60. //       ShowResult(2);              //顯示通道2
  61.         //ShowResult(3);              //顯示通道3
  62.         //ShowResult(4);              //顯示通道4
  63.         //ShowResult(5);              //顯示通道5
  64.         //ShowResult(6);              //顯示通道6
  65.         //ShowResult(7);              //顯示通道7
  66.          Delay(100);
  67.     }
  68. }
  69. /*----------------------------
  70. 發(fā)送ADC結(jié)果
  71. ----------------------------*/
  72. void ShowResult(uchar ch)
  73. {
  74.     uint adc_res10,//測(cè)量設(shè)定通道adc值
  75.     bandgap,       //bandgap預(yù)儲(chǔ)存校準(zhǔn)值,單位毫伏
  76.     adc_9gallery_res; //測(cè)量第九通道(bandgap)值
  77.     float power_voltage,        //系統(tǒng)供電電壓,單位毫伏
  78.     ADC_voltage;     //設(shè)定通道電壓值,單位毫伏

  79.     uchar  code *cptr; //定義ROM(代碼)區(qū)指針
  80.     //uchar  idata *iptr;//定義RAM(內(nèi)存)區(qū)指針

  81.     cptr = ID_ADDR_ROM;         //從程序區(qū)讀取BandGap電壓值(單位:毫伏mV)
  82.     bandgap=*cptr++;
  83.     bandgap<<=8;
  84.     bandgap+=*cptr;
  85.     /*iptr = ID_ADDR_RAM;         //從內(nèi)存區(qū)讀取BandGap電壓值(單位:毫伏mV)
  86.     bandgap=*iptr++;              //兩種方法結(jié)果一樣,上面的方法需要在下載式勾選"在ID號(hào)前添加重要測(cè)試參數(shù)"選項(xiàng),才可在程序中獲取此參數(shù)
  87.     bandgap<<=8;                  //下面的方法不需要
  88.     bandgap+=*iptr;    */
  89.     //測(cè)量設(shè)定通道adc值
  90.     ADC_RES = 0;                    //清除結(jié)果寄存器
  91.     P1ASF = 0xff;                   //設(shè)置P1口為AD口
  92.     GetADCResult(ch);
  93.     GetADCResult(ch);                 //讀三次獲得穩(wěn)定
  94.     adc_res10= GetADCResult(ch);
  95.     //測(cè)量第九通道(bandgap)值
  96.     ADC_RES = 0;                    //清除結(jié)果寄存器
  97.     P1ASF = 0x00;                   //設(shè)置讀第九通道
  98.     GetADCResult(0);                 //測(cè)bandgap時(shí),調(diào)用此函數(shù)時(shí)通道數(shù)只能填0
  99.     GetADCResult(0);                 //讀三次獲得穩(wěn)定
  100.     adc_9gallery_res=GetADCResult(0);
  101.     //計(jì)算系統(tǒng)供電電壓
  102.     power_voltage=(float)bandgap*1024/adc_9gallery_res;
  103.     //計(jì)算ADC通道測(cè)得電壓值
  104.     ADC_voltage=(float)bandgap*adc_res10/adc_9gallery_res;
  105.     printf("P1.%d ADC result:%d\n",(uint)ch,adc_res10);
  106.     printf("BandGap standard:%d mV\n",bandgap);
  107.     printf("BandGap value:%d \n",adc_9gallery_res);
  108.     printf("system power voltage:%.0f mV\n",power_voltage);
  109.     printf("ADC voltage:%.0f mV\n",ADC_voltage);
  110. }
  111. /*----------------------------
  112. 讀取ADC結(jié)果
  113. ----------------------------*/
  114. uint GetADCResult(uchar ch)
  115. {
  116.     uint ADC_10BIT_RES;
  117.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  118.     _nop_();                        //等待4個(gè)NOP
  119.     _nop_();
  120.     _nop_();
  121.     _nop_();
  122.     while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成
  123.     ADC_CONTR &= ~ADC_FLAG;         //關(guān)閉 ADC
  124.     ADC_10BIT_RES=ADC_RES;      //得到高8位
  125.     ADC_10BIT_RES<<=2;
  126.     ADC_10BIT_RES+=ADC_RESL;     //得到低2位
  127.     return ADC_10BIT_RES;                 //返回ADC結(jié)果

  128. }
  129. /*----------------------------
  130. 初始化串口
  131. ----------------------------*/
  132. void InitUart()
  133. {
  134.     SCON = 0x5a;                //設(shè)置串口為8位可變波特率
  135.    T2L = 0xE0;        //設(shè)定定時(shí)初值
  136.     T2H = 0xFE;        //設(shè)定定時(shí)初值
  137.     AUXR = 0x14;                //T2為1T模式, 并啟動(dòng)定時(shí)器2
  138.     AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
  139. }
  140. /*----------------------------
  141. 初始化ADC
  142. ----------------------------*/
  143. void InitADC()
  144. {
  145.    P1ASF = 0xff;                   //設(shè)置P1口為AD口
  146.     ADC_RES = 0;                    //清除結(jié)果寄存器
  147.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  148.     Delay(2);                       //ADC上電并延時(shí)
  149. }
  150. /*----------------------------
  151. 軟件延時(shí)
  152. ----------------------------*/
  153. void Delay(uint n)
  154. {
  155.     uint x;
  156.     while (n--)
  157.     {
  158.         x = 5000;
  159.         while (x--);
  160.     }
  161. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:90212 發(fā)表于 2022-5-3 15:55 | 顯示全部樓層
一定要用內(nèi)部晶振,外部晶振讀不出來(lái)bandgap,下載的時(shí)候還要勾選 在程序區(qū)結(jié)束處添加重要測(cè)試參數(shù)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久高潮国产精品视 | 日韩在线视频免费观看 | 久久精品国产a三级三级三级 | 欧美一二三 | 久久91av| 国产高清不卡 | 亚洲成人在线视频播放 | 国产成人精品一区二区三区在线 | 日韩精品免费在线观看 | 亚洲午夜电影 | 欧洲色 | 黄网站色大毛片 | 99只有精品 | 毛片在线视频 | 午夜欧美 | 国产精品免费观看视频 | 午夜在线电影网 | 国产精品久久久久久久久久久免费看 | 日韩欧美一区在线 | 国产精品日韩一区二区 | 一区二区三区高清 | 毛片黄片免费看 | 国产精品国产成人国产三级 | 日日夜夜精品免费视频 | av在线黄| 亚洲精品一区二区在线观看 | 成人久久一区 | 天堂在线中文字幕 | 久久久久久久一区 | 一二三四在线视频观看社区 | 国产精品久久午夜夜伦鲁鲁 | 在线91 | 天堂亚洲| 精品久久久久久亚洲精品 | 国产精品久久午夜夜伦鲁鲁 | 在线观看黄视频 | 亚洲图片视频一区 | 日韩欧美一区二区三区四区 | 青青久久av北条麻妃海外网 | 国产欧美精品在线 | 一区中文字幕 |