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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用stc15w204s單片機的p1.3腳能模擬adc檢測嗎,定時器0我用在其它地方用了,

[復(fù)制鏈接]
ID:803579 發(fā)表于 2020-8-6 12:22 | 顯示全部樓層 |閱讀模式
各位大佬,用stc15w204s的p1.3腳能模擬adc檢測嗎,定時器0我用在其它地方用了,剩下的管腳我也一樣用了,請求大家能給我一套可以直接調(diào)試的程序,官方的我沒看懂,謝謝大家
回復(fù)

使用道具 舉報

ID:89217 發(fā)表于 2020-8-6 15:44 | 顯示全部樓層
檢測電平咯,,
回復(fù)

使用道具 舉報

ID:803579 發(fā)表于 2020-8-6 16:00 | 顯示全部樓層

這款單片機是沒有adc的,不曉得怎么檢測,能給程序作參考嗎
回復(fù)

使用道具 舉報

ID:803579 發(fā)表于 2020-8-6 16:02 | 顯示全部樓層
啊h啊 發(fā)表于 2020-8-6 16:00
這款單片機是沒有adc的,不曉得怎么檢測,能給程序作參考嗎

我所有的管腳都使用了,定時器0和2也在其它地方用了,只剩下一個p1.3的管腳
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2020-8-6 17:28 | 顯示全部樓層
這個單片機是沒有ADC的
但凡是用STC的,基本就不是什么批量產(chǎn)品,肯定是有改動的空間的,直接換一個有ADC功能的單片機就可以了
不要用官方推薦的那種沒有ADC功能單片機使用RC電路來實現(xiàn)ADC,那會亂的
直接換單片機最實用
回復(fù)

使用道具 舉報

ID:807591 發(fā)表于 2020-8-6 17:39 | 顯示全部樓層
都不看說明書的?這個型號沒有ADC,,要模擬adc基本上很難
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2020-8-6 17:52 來自觸屏版 | 顯示全部樓層
巧婦難為無米之炊
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2020-8-6 20:16 | 顯示全部樓層
你可以參考這個



  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited ----------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* --- Mobile: (86)13922805190 ----------------------------------------*/
  5. /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
  6. /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
  7. /* --- QQ:  800003751 -------------------------------------------------*/
  8. /* 如果要在程序中使用此代碼,請在程序中注明使用了宏晶科技的資料及程序   */
  9. /*---------------------------------------------------------------------*/



  10. /****************************
  11. 本示例在Keil開發(fā)環(huán)境下請選擇Intel的8052芯片型號進行編譯

  12. 本例程MCU的工作頻率為22.1184MHz.

  13. 使用MCU自帶的比較器進行ADC轉(zhuǎn)換, 并通過串口輸出結(jié)果. 用定時器0產(chǎn)生10us中斷查詢比較器的狀態(tài).

  14. 使用比較器做ADC, 原理圖如下.
  15. 做ADC的原理是基于電荷平衡的計數(shù)式ADC.
  16. 電壓從Vin輸入, 通過100K+104濾波, 進入比較器的P5.5正輸入端, 經(jīng)過比較器的比較, 將結(jié)果輸出到P1.5再通過100K+104濾波后送比較器P5.4負輸入端,跟輸入電壓平衡.
  17. 設(shè)置兩個變量: 計數(shù)周期(量程)adc_duty 和 比較結(jié)果高電平的計數(shù)值 adc, adc嚴格比例于輸入電壓.
  18. ADC的基準就是P1.5的高電平. 如果高電平準確,比較器的放大倍數(shù)足夠大,則ADC結(jié)果會很準確.
  19. 當比較結(jié)果為高電平,則P1.5輸出1, 并且adc+1.
  20. 當比較結(jié)果為低電平,則P1.5輸出0.
  21. 每一次比較都判斷計數(shù)周期是否完成,完成則adc里的值就是ADC結(jié)果.
  22. 電荷平衡計數(shù)式ADC的性能類似數(shù)字萬用表用的雙積分ADC, 當計數(shù)周期為20ms的倍數(shù)時,具有很強的抗工頻干擾能力,很好的線性和精度.
  23. 原理可以參考ADD3501(3 1/2位數(shù)字萬用表)或ADD3701(3 3/4位數(shù)字萬用表), 也可以參考AD7740 VFC電路.

  24. 例: 比較一次的時間間隔為10us, 量程為10000, 則做1次ADC的時間為100ms. 比較器的響應(yīng)時間越短, 則完成ADC就越快.

  25. 由于要求每次比較時間間隔都要相等,所以用C編程最好在定時器中斷里進行, 定時器設(shè)置為自動重裝, 高優(yōu)先級中斷, 其它中斷均低優(yōu)先級.
  26. 用匯編的話, 保證比較輸出電平處理的時間要相等.


  27.                                          100K
  28.                             /| P5.5       ___
  29.                     P1.2   /+|---------o-|___|- ------- Vin
  30.                      .----<  | P5.4    |
  31.                      |     \-|---.     |
  32.                      |      \|   |     |
  33.                      |           |     |
  34.                      |    ___    |     |
  35.                      '---|___|---o     |
  36.                         100K     |     |
  37.                                 ---   ---
  38.                                 ---   ---
  39.                             104  |     |  104
  40.                                  |     |
  41.                                 ===   ===
  42.                                 GND   GND



  43. ******************************/

  44. #define MAIN_Fosc                22118400L        //定義主時鐘
  45. #define        BaudRate1                9600ul                //定義波特率
  46. #define        ADC_SCALE                50000                //ADC滿量程, 根據(jù)需要設(shè)置

  47. #include        "STC15Fxxxx.H"


  48. /*************        本地常量聲明        **************/

  49. //CMPCR1
  50. #define        CMPEN        0x80        //1: 允許比較器, 0: 禁止,關(guān)閉比較器電源
  51. #define        CMPIF        0x40        //比較器中斷標志, 包括上升沿或下降沿中斷, 軟件清0
  52. #define        PIE                0x20        //1: 比較結(jié)果由0變1, 產(chǎn)生上升沿中斷
  53. #define        NIE                0x10        //1: 比較結(jié)果由1變0, 產(chǎn)生下降沿中斷
  54. #define        PIS                0x08        //輸入正極性選擇, 0: 選擇內(nèi)部P5.5做正輸入,           1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
  55. #define        NIS                0x04        //輸入負極性選擇, 0: 選擇內(nèi)部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入.
  56. #define        CMPOE        0x02        //1: 允許比較結(jié)果輸出到P1.2, 0: 禁止.
  57. #define        CMPRES        0x01        //比較結(jié)果, 1: CMP+電平高于CMP-,  0: CMP+電平低于CMP-,  只讀

  58. //CMPCR2
  59. #define        INVCMPO        0x80        //1: 比較器輸出取反,  0: 不取反
  60. #define        DISFLT        0x40        //1: 關(guān)閉0.1uF濾波,   0: 允許
  61. #define        LCDTY        0x00        //0~63, 比較結(jié)果變化延時周期數(shù)

  62. #define        TIM_16BitAutoReload                        0
  63. #define        TIM_16Bit                                        1
  64. #define        TIM_8BitAutoReload                        2
  65. #define        TIM_16BitAutoReloadNoMask        3

  66. #define        Pin0                0x01        //IO引腳 Px.0
  67. #define        Pin1                0x02        //IO引腳 Px.1
  68. #define        Pin2                0x04        //IO引腳 Px.2
  69. #define        Pin3                0x08        //IO引腳 Px.3
  70. #define        Pin4                0x10        //IO引腳 Px.4
  71. #define        Pin5                0x20        //IO引腳 Px.5
  72. #define        Pin6                0x40        //IO引腳 Px.6
  73. #define        Pin7                0x80        //IO引腳 Px.7
  74. #define        PinAll                0xFF        //IO所有引腳

  75. /*************        本地變量聲明        **************/
  76. //sbit        P_ADC        = P1^2;        //P1.2 比較器轉(zhuǎn)IO輸出端
  77. sbit        P_ADC        = P1^4;        //P1.2 比較器轉(zhuǎn)IO輸出端
  78. u16                adc;                        //ADC中間值, 用戶層不可見
  79. u16                adc_duty;                //ADC計數(shù)周期, 用戶層不可見
  80. u16                adc_value;                //ADC值, 用戶層使用
  81. bit                adc_ok;                        //ADC結(jié)束標志, 為1則adc_value的值可用. 此標志給用戶層查詢,并且清0


  82. /*************        本地函數(shù)聲明        **************/
  83. void        TxString(u8 *puts);






  84. void main(void)
  85. {
  86.         u8        i;
  87.         u8        tmp[5];


  88. //IO口初始化
  89. //        P1n_push_pull(Pin2);                //P1.2設(shè)置為push-pull output
  90.         P1n_push_pull(Pin4);                //P1.2設(shè)置為push-pull output
  91.         P5n_pure_input(Pin4+Pin5);        //P5.4 P5.5設(shè)置為高阻輸入


  92. //比較器初始化
  93.         CMPCR1 = 0;
  94.         CMPCR2 = 20;                //比較結(jié)果變化延時周期數(shù), 0~63
  95.         CMPCR1 |= CMPEN;        //允許比較器                ENABLE,DISABLE
  96. //        CMPCR1 |= PIE;                //允許上升沿中斷        ENABLE,DISABLE
  97. //        CMPCR1 |= NIE;                //允許下降沿中斷        ENABLE,DISABLE
  98. //        CMPCR1 |= PIS;                //輸入正極性選擇, 0: 選擇內(nèi)部P5.5做正輸入,           1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
  99.         CMPCR1 |= NIS;                //輸入負極性選擇, 0: 選擇內(nèi)部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入
  100. //        CMPCR1 |= CMPOE;        //允許比較結(jié)果輸出到P1.2,   ENABLE,DISABLE
  101. //        CMPCR2 |= INVCMPO;        //比較器輸出取反,         ENABLE,DISABLE
  102.         CMPCR2 |= DISFLT;        //內(nèi)部0.1uF濾波,          ENABLE,DISABLE


  103. //定時器0 初始化
  104.         TMOD &= ~0x0f;
  105.         Timer0_16bitAutoReload();        //設(shè)置為16位自動重裝模式
  106.         Timer0_1T();        //設(shè)置為1T模式
  107.         ET0 = 1;                //允許中斷
  108.         PT0 = 1;                //高優(yōu)先級中斷
  109.         TH0 = (u8)((65536 - MAIN_Fosc / 100000ul)>>8);                //重裝值        100KHZ, 10us,        65536 - (MAIN_Fosc)/100000
  110.         TL0 = (u8)( 65536 - MAIN_Fosc / 100000ul);
  111.         TR0 = 1;                //開始運行


  112. //串口1初始化
  113.         S1_USE_P30P31();        //UART1 使用P30 P31口        默認
  114. //        S1_USE_P36P37();        //UART1 使用P36 P37口
  115. //        S1_USE_P16P17();        //UART1 使用P16 P17口

  116.         S1_8bit();                        //8位數(shù)據(jù),波特率可變
  117.         S1_RX_Enable();                //允許接收
  118.         S1_TXD_RXD_OPEN();        //將TXD與RXD連接中繼斷開        默認
  119.         S1_BRT_UseTimer2();        //使用Timer2做波特率發(fā)生器
  120.         ES = 0;                                //禁止中斷, 使用查詢發(fā)送

  121.         Timer2_1T();        //Timer2 1T模式, 固定為16位自動重裝
  122.     T2L = (65536 - (MAIN_Fosc/4/BaudRate1));   //設(shè)置波特率重裝值
  123.     T2H = (65536 - (MAIN_Fosc/4/BaudRate1))>>8;
  124.         Timer2_Run();        //允許定時器2計數(shù)

  125.         EA = 1;                        //允許全局中斷

  126.         TxString("\r\n使用比較器做ADC例子\r\n");        //SUART1發(fā)送一個字符串
  127.         

  128.         while (1)
  129.         {
  130.                 if(adc_ok)                //等待ADC結(jié)束
  131.                 {
  132.                         adc_ok = 0;                                //清除ADC已結(jié)束標志
  133.                         TxString("ADC = ");        //轉(zhuǎn)十進制
  134.                         tmp[0] = adc_value / 10000 + '0';
  135.                         tmp[1] = adc_value % 10000 / 1000 + '0';
  136.                         tmp[2] = adc_value % 1000 / 100 + '0';
  137.                         tmp[3] = adc_value % 100 / 10 + '0';
  138.                         tmp[4] = adc_value % 10 + '0';
  139.                         for(i=0; i<4; i++)                //消無效0
  140.                         {
  141.                                 if(tmp[i] != '0')        break;
  142.                                 tmp[i] = ' ';
  143.                         }
  144.                         for(i=0; i<5; i++)                //發(fā)串口
  145.                         {
  146.                                 TI = 0;
  147.                                 SBUF = tmp[i];
  148.                                 while(!TI);
  149.                                 TI = 0;
  150.                         }
  151.                         TxString("\r\n");
  152.                 }
  153.         }
  154. }


  155. void TxString(u8 *puts)                //發(fā)送一個字符串
  156. {
  157.     for (; *puts != 0;        puts++)           //遇到停止符0結(jié)束
  158.         {
  159.                 TI = 0;
  160.                 SBUF = *puts;
  161.                 while(!TI);
  162.                 TI = 0;
  163.         }
  164. }


  165. /********************* Timer0中斷函數(shù)************************/
  166. void timer0_int (void) interrupt TIMER0_VECTOR
  167. {
  168.         if((CMPCR1 & CMPRES) == 0)        P_ADC = 0;        //比較器輸出高電平
  169.         else                                //P_ADC輸出低電平, 給負輸入端做反饋.
  170.         {
  171.                 P_ADC = 1;                        //P_ADC輸出高電平, 給負輸入端做反饋.
  172.                 adc ++;        //ADC計數(shù)+1
  173.         }

  174.         if(--adc_duty == 0)                        //ADC周期-1, 到0則ADC結(jié)束
  175.         {
  176.                 adc_duty = ADC_SCALE;        //周期計數(shù)賦初值
  177.                 adc_value = adc;                //保存ADC值
  178.                 adc = 0;                                //清除ADC值
  179.                 adc_ok = 1;                                //標志ADC已結(jié)束
  180.         }
  181. }





復(fù)制代碼
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-8-6 20:49 | 顯示全部樓層
STC15W204S有8腳和16腳兩種封裝,樓主提到只能用P1.3,那只能是16腳封裝,8腳封裝的沒有P1。樓主與其糾結(jié)怎么模擬adc不如直接更換內(nèi)置ADC的STC15W404AS,兩者管腳排列相同,價格相差幾角錢。何況利用RC測量電壓的精度取決于RC精度且受溫度變化影響較大,不適合批量生產(chǎn)制作。
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-8-6 21:30 | 顯示全部樓層
模擬adc起碼需要3個條件:1個普通IO口,一個外部中斷口,一個定時器。樓主3個條件只具備1個半。
回復(fù)

使用道具 舉報

ID:803579 發(fā)表于 2020-8-7 10:07 | 顯示全部樓層

我想請問,如果與內(nèi)部基準電壓做比較是不是可以不用接p5.4
回復(fù)

使用道具 舉報

ID:147710 發(fā)表于 2020-8-7 10:18 | 顯示全部樓層
這個型號有ADC
stc8g.jpg

回復(fù)

使用道具 舉報

ID:146782 發(fā)表于 2020-8-7 11:58 | 顯示全部樓層
模擬adc需要:1個普通IO口,一個外部中斷口,一個定時器。直接換一個STC15W408AS吧
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成年免费在线观看 | 国产免费视频在线 | 天天天操操操 | 69性欧美高清影院 | 一区二区国产在线观看 | 日韩视频一区在线观看 | 国产精品成人在线播放 | 欧美精品一区在线发布 | 91在线精品一区二区 | 狠狠色综合网站久久久久久久 | 国产精品91久久久久久 | 欧美视频日韩 | 国产日韩一区二区三区 | 日韩一级二级片 | 亚洲国产精品久久久久 | 久久午夜视频 | 婷婷色在线 | 手机看黄av免费网址 | 91久久电影 | 99亚洲精品 | 国产高清精品一区二区三区 | 日韩中文一区 | 成人av电影在线观看 | 久久国内精品 | 成人黄在线观看 | 中文字幕综合 | 国产黄色av电影 | 三区在线观看 | 久久成人一区 | 黄色一级视频免费 | 黄色免费在线网址 | 91精品久久久久久久 | 人人爽人人草 | 美女日批免费视频 | 欧美激情五月 | 午夜视频大全 | 国产成人免费在线观看 | 福利视频大全 | 欧美白人做受xxxx视频 | 久久久久久久久91 | 国产目拍亚洲精品99久久精品 |