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

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

QQ登錄

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

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

怎么利用內(nèi)部電壓作為ADC輸入,實(shí)時(shí)獲取電池電量

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1125252 發(fā)表于 2024-7-10 10:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:712097 發(fā)表于 2024-7-10 20:01 | 只看該作者
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. #define FOSC            11059200UL
  4. #define BRT             (65536 - FOSC / 115200 / 4)

  5. sfr     AUXR        =   0x8e;

  6. sfr     ADC_CONTR   =   0xbc;
  7. sfr     ADC_RES     =   0xbd;
  8. sfr     ADC_RESL    =   0xbe;
  9. sfr     ADCCFG      =   0xde;

  10. sfr     P_SW2   =   0xba;
  11. #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)

  12. sfr     P0M1    =   0x93;
  13. sfr     P0M0    =   0x94;
  14. sfr     P1M1    =   0x91;
  15. sfr     P1M0    =   0x92;
  16. sfr     P2M1    =   0x95;
  17. sfr     P2M0    =   0x96;
  18. sfr     P3M1    =   0xb1;
  19. sfr     P3M0    =   0xb2;
  20. sfr     P4M1    =   0xb3;
  21. sfr     P4M0    =   0xb4;
  22. sfr     P5M1    =   0xc9;
  23. sfr     P5M0    =   0xca;

  24. int *BGV;                                       //內(nèi)部1.19V參考信號(hào)源值存放在idata中
  25.                                                 //idata的EFH地址存放高字節(jié)
  26.                                                 //idata的F0H地址存放低字節(jié)
  27.                                                 //電壓?jiǎn)挝粸楹练?mV)
  28. bit busy;

  29. void UartIsr() interrupt 4
  30. {
  31.     if (TI)
  32.     {
  33.         TI = 0;
  34.         busy = 0;
  35.     }
  36.     if (RI)
  37.     {
  38.         RI = 0;
  39.     }
  40. }

  41. void UartInit()
  42. {
  43.     SCON = 0x50;
  44.     TMOD = 0x00;
  45.     TL1 = BRT;
  46.     TH1 = BRT >> 8;
  47.     TR1 = 1;
  48.     AUXR = 0x40;
  49.     busy = 0;
  50. }

  51. void UartSend(char dat)
  52. {
  53.     while (busy);
  54.     busy = 1;
  55.     SBUF = dat;
  56. }

  57. void ADCInit()
  58. {
  59.     P_SW2 |= 0x80;
  60.     ADCTIM = 0x3f;                              //設(shè)置ADC內(nèi)部時(shí)序
  61.     P_SW2 &= 0x7f;

  62.     ADCCFG = 0x2f;                              //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16
  63.     ADC_CONTR = 0x8f;                           //使能ADC模塊,并選擇第15通道
  64. }

  65. int ADCRead()
  66. {
  67.     int res;

  68.     ADC_CONTR |= 0x40;                          //啟動(dòng)AD轉(zhuǎn)換
  69.     _nop_();
  70.     _nop_();
  71.     while (!(ADC_CONTR & 0x20));                //查詢ADC完成標(biāo)志
  72.     ADC_CONTR &= ~0x20;                         //清完成標(biāo)志
  73.     res = (ADC_RES << 8) | ADC_RESL;            //讀取ADC結(jié)果

  74.     return res;
  75. }

  76. void main()
  77. {
  78.     int res;
  79.     int vcc;
  80.     int i;

  81.     P0M0 = 0x00;
  82.     P0M1 = 0x00;
  83.     P1M0 = 0x00;
  84.     P1M1 = 0x00;
  85.     P2M0 = 0x00;
  86.     P2M1 = 0x00;
  87.     P3M0 = 0x00;
  88.     P3M1 = 0x00;
  89.     P4M0 = 0x00;
  90.     P4M1 = 0x00;
  91.     P5M0 = 0x00;
  92.     P5M1 = 0x00;

  93.     BGV = (int idata *)0xef;
  94.     ADCInit();                                  //ADC初始化
  95.     UartInit();                                 //串口初始化

  96.     ES = 1;
  97.     EA = 1;

  98. //  ADCRead();
  99. //  ADCRead();                                  //前兩個(gè)數(shù)據(jù)建議丟棄

  100.     res = 0;
  101.     for (i=0; i<8; i++)
  102.     {
  103.         res += ADCRead();                       //讀取8次數(shù)據(jù)
  104.     }
  105.     res >>= 3;                                  //取平均值

  106.     vcc = (int)(1024L * *BGV / res);            //(10位ADC算法)計(jì)算VREF管腳電壓,即電池電壓
  107. //  vcc = (int)(4096L * *BGV / res);            //(12位ADC算法)計(jì)算VREF管腳電壓,即電池電壓
  108.                                                 //注意,此電壓的單位為毫伏(mV)
  109.     UartSend(vcc >> 8);                         //輸出電壓值到串口
  110.     UartSend(vcc);

  111.     while (1);
  112. }

復(fù)制代碼
以上是STC8系列帶ADC功能的單片機(jī)利用內(nèi)部ADC第15通道測(cè)量電源電壓的范例程序,供參考。
回復(fù)

使用道具 舉報(bào)

板凳
ID:777254 發(fā)表于 2024-7-12 14:52 | 只看該作者
看看手冊(cè),或者百度對(duì)應(yīng)的MCU型號(hào)再問(wèn),不同MCU的配置不一樣。一般32位的都是有個(gè)庫(kù)函數(shù)配置,8位單片機(jī)要自己配置寄存器了
回復(fù)

使用道具 舉報(bào)

地板
ID:1034262 發(fā)表于 2024-7-12 17:38 | 只看該作者
是不是STC的單片機(jī)?如果是STC8系列、STC32系列,讀15通道ADC就可以計(jì)算出AVREF的電壓,將AVREF與VCC連接計(jì)算的就是單片機(jī)的工作電壓。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日日久| 老外黄色一级片 | 免费一区二区 | 成人精品一区 | 成人不卡视频 | 国产激情视频在线观看 | 欧美三级视频在线观看 | 欧美日韩中文字幕在线 | 在线观看亚洲欧美 | 国产男女视频网站 | 成人免费视频网站 | 日韩国产免费 | 91视视频在线观看入口直接观看 | 欧美www在线观看 | 欧美片网站免费 | 国产高清视频在线观看 | 国产精品一区久久久 | 9久久婷婷国产综合精品性色 | 国产精品性做久久久久久 | 中文字幕在线观看一区 | 在线视频日韩 | 水蜜桃久久夜色精品一区 | www亚洲精品 | 激情六月丁香婷婷 | 久久久人成影片一区二区三区 | 久久国产一区二区三区 | 国产精品久久久久久久久久免费 | 91精品久久久久久久久中文字幕 | 在线观看亚 | 超碰导航| 午夜电影网站 | 欧洲精品久久久久毛片完整版 | 国产一区二区三区 | 狠狠躁夜夜躁人人爽天天高潮 | 久久免费精彩视频 | 欧美一级免费看 | 国产精品入口久久 | 久久久久亚洲av毛片大全 | 午夜小视频免费观看 | 成人字幕网zmw | 国产综合久久久 |