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

標題: 怎么利用內部電壓作為ADC輸入,實時獲取電池電量 [打印本頁]

作者: 1481509156    時間: 2024-7-10 10:46
標題: 怎么利用內部電壓作為ADC輸入,實時獲取電池電量
謝謝大家

作者: chxelc    時間: 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;                                       //內部1.19V參考信號源值存放在idata中
  25.                                                 //idata的EFH地址存放高字節
  26.                                                 //idata的F0H地址存放低字節
  27.                                                 //電壓單位為毫伏(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;                              //設置ADC內部時序
  61.     P_SW2 &= 0x7f;

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

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

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

  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();                                  //前兩個數據建議丟棄

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

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

  111.     while (1);
  112. }

復制代碼
以上是STC8系列帶ADC功能的單片機利用內部ADC第15通道測量電源電壓的范例程序,供參考。

作者: li1069136863    時間: 2024-7-12 14:52
看看手冊,或者百度對應的MCU型號再問,不同MCU的配置不一樣。一般32位的都是有個庫函數配置,8位單片機要自己配置寄存器了
作者: coody_sz    時間: 2024-7-12 17:38
是不是STC的單片機?如果是STC8系列、STC32系列,讀15通道ADC就可以計算出AVREF的電壓,將AVREF與VCC連接計算的就是單片機的工作電壓。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 综合久久综合久久 | 国产精品免费一区二区三区四区 | 欧美一区二区成人 | 99国产精品久久久 | 亚洲国产伊人 | 欧美成人一级 | 中文久久 | 日本不卡一区二区 | 日韩播放 | 精品久久一区 | 欧洲精品视频一区 | 在线观看国产精品视频 | 亚洲日韩视频 | 日韩中文字幕一区二区 | 免费黄色av网站 | 激情国产| 国产小视频在线 | 91久久久久久久久 | 一区二区视频在线观看 | 精品日韩一区二区 | 亚洲精品日日夜夜 | 性色av网站 | 免费a v网站 | 欧美成视频在线观看 | 亚洲一区在线免费观看 | 一区二区三区久久久 | 日本不卡免费新一二三区 | www国产成人免费观看视频,深夜成人网 | 91精品无人区卡一卡二卡三 | 成人精品视频在线观看 | 一区在线播放 | 亚洲一区二区中文字幕在线观看 | 欧美另类视频在线 | 欧美在线小视频 | 日韩一二区 | 在线91| 亚洲v区| 国产一区二区三区在线 | 久久久久久综合 | 亚洲成人免费视频在线观看 | 久久国产免费看 |