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

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

QQ登錄

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

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

自己摸索寫(xiě)了一段單片機(jī)三通道輪詢方式檢測(cè)ADC的值,好像不正確,請(qǐng)大家指點(diǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 zhth1979 于 2022-1-7 11:31 編輯

前兩天發(fā)了求助帖,但沒(méi)有什么找到這方面的例程 ,自己摸索寫(xiě)了一段三通道輪詢方式檢測(cè)ADC的值,好像不正確,請(qǐng)大家指點(diǎn)!單片機(jī)型號(hào):STC8H3K32S2


#include "AD.h"

unsigned char ad_flag=1;
unsigned char ad_result=0;
int ad_show1=0;
int ad_show2=0;

unsigned char ADC_Conv(unsigned char channel)
{
        
       // unsigned char ad_result=0;
  P1M1 = 0x07;   P1M0 = 0x00;   //設(shè)置 P1.0 P1.1 P1.2 為 ADC 輸入口

        
        ADC_SetChannel(channel);   //1.選通道
        P_SW2|=0X80;
        ADCTIM=0X3F;    //設(shè)置ADC內(nèi)部時(shí)序
        P_SW2&=0X7F;
        ADCCFG=0X0F;    //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16        
        ADC_CONTR = 0x80  | channel;            ADC_CONTR|=0X40; //啟動(dòng)AD轉(zhuǎn)換
        _nop_();
        _nop_();
        while(!(ADC_CONTR&0x20));  //查詢ADC完成標(biāo)志
        ADC_CONTR &=~0X20;        //清完成標(biāo)志
        ad_result=(ADC_RES<<8)|ADC_RESL;               //讀取ADC結(jié)果
          _nop_();
          _nop_();
                return ad_result;        
}

void Timer0Init()
{
  TMOD &= 0XF0;    //設(shè)置定時(shí)器模式
        TMOD |=0X01;     //設(shè)置定時(shí)器16位不可重裝載模式
        TH0=0XFC;        //設(shè)置定時(shí)初值
        TL0=0X18;        //設(shè)置定時(shí)初值
        TF0=0;           //清除TF0標(biāo)志
        ET0=1;           //定時(shí)器0的中斷開(kāi)關(guān)
        TR0=1;           //定時(shí)器0開(kāi)始計(jì)時(shí)
}


void timer0_ISR() interrupt 1
{
        static unsigned int timer0Cnt;
        timer0Cnt++;
        if(timer0Cnt>=1000)
        {
          timer0Cnt=0;
                ad_flag=1;
        }
  TR0=0;
        TH0=0XFC;
        TL0=0X18;
        TR0=1;
}


void adc()
{
        unsigned int ad_0,ad_1,ad_2;
        unsigned char channel=0;
  Timer0Init();
        EA=1;
        if(ad_flag==1)
        {
                ad_flag=0;                     
                ad_0=ADC_Conv(0);
                ad_1=ADC_Conv(1);
                ad_2=ADC_Conv(2);
               
                ad_show1 = ad_0- ad_1;         //壓力傳感器差分值
                ad_show2 = ad_2/4096*2.5;     //測(cè)量電池電壓           
        }
}
主函數(shù)再調(diào)用   adc();    ad_show1和ad_show2兩個(gè)值。





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2022-1-5 17:52 | 只看該作者
main呢?
while(1)呢?
回復(fù)

使用道具 舉報(bào)

板凳
ID:686513 發(fā)表于 2022-1-6 08:38 | 只看該作者
lkc8210 發(fā)表于 2022-1-5 17:52
main呢?
while(1)呢?

這個(gè)是子程序,main在主程序里呢。
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2022-1-6 10:51 | 只看該作者
這是ADC.C ,形參CH范圍0~14。供主函數(shù)調(diào)用GetADCResult(x);。
  1. #include <STC8G.H>
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)
  6. //宏定義ADC的操作命令
  7. #define ADC_POWER   0x80                        //ADC power control dit (宏定義ADC電源控制位)1000 0000
  8. #define ADC_START   0x40                        //ADC start control dit (宏定義ADC啟動(dòng)控制位)0100 0000
  9. #define ADC_FLAG    0x20                        //ADC complete flag (宏定義ADC完成標(biāo)志位)    0010 0000
  10. #define ADC_EPWMT   0x10                        //使能 PWM  實(shí)時(shí)觸發(fā) ADC                     0001 0000

  11. //InitADC 初始化ADC
  12. void Init_ADC()
  13. {        //ADC 控制器  電源  啟動(dòng)  完成  --   15通道模擬選擇位
  14.         //ADC_CONTR    B7    B6    B5   B4   B3   B2   B1   B0
  15.         P_SW2 |= 0x80;                        //打開(kāi)
  16.         ADCTIM = 0x3f;                        //設(shè)置 ADC 內(nèi)部時(shí)序
  17.         P_SW2 &= 0x7f;                        //關(guān)閉
  18.         ADCCFG = 0x27;                        //設(shè)置ADC結(jié)果右對(duì)齊,速度為512系統(tǒng)時(shí)鐘
  19.         ADC_RES=0;                                //清除ADC_RES存儲(chǔ)器以前的結(jié)果
  20.         ADC_RESL=0;
  21.         ADC_CONTR=ADC_POWER; //ADC 開(kāi)啟電源
  22.         delayms(1);                                //上電延時(shí)1ms                                                                                       
  23. }

  24. //        讀取ADC結(jié)果
  25. uint GetADCResult(uchar CH)
  26. {
  27.         ADC_CONTR=ADC_POWER|ADC_START|CH;//啟動(dòng)轉(zhuǎn)換1100 1000
  28.         _nop_();_nop_();                                //小延時(shí)
  29.         while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成標(biāo)志置位 1010 0000
  30.         ADC_CONTR &=~ADC_FLAG;                        //清完成標(biāo)志
  31.         return ADC_RES<<8|ADC_RESL;                //返回十位ADC結(jié)果
  32. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

5#
ID:686513 發(fā)表于 2022-1-6 15:15 | 只看該作者
本帖最后由 zhth1979 于 2022-1-6 15:25 編輯
wulin 發(fā)表于 2022-1-6 10:51
這是ADC.C ,形參CH范圍0~14。供主函數(shù)調(diào)用GetADCResult(x);。

這個(gè)不錯(cuò),應(yīng)該可以用!但這兩句是什么意思?沒(méi)看懂。#define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)    #define ADC_EPWMT   0x10                        //使能 PWM  實(shí)時(shí)觸發(fā) ADC                     0001 0000    在我這個(gè)應(yīng)用中應(yīng)該沒(méi)作用吧?
回復(fù)

使用道具 舉報(bào)

6#
ID:301191 發(fā)表于 2022-1-6 18:34 | 只看該作者
頂一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜av在线 | 亚洲性人人天天夜夜摸 | 中文字幕亚洲精品 | 精品国产乱码久久久久久丨区2区 | 欧洲高清转码区一二区 | 99pao成人国产永久免费视频 | 成人精品在线观看 | 国产成人在线视频 | 视频一区二区中文字幕 | 中文在线视频 | 国产1区 | 日韩成人在线播放 | 国产在线二区 | 91污在线 | 成人一区二区三区在线观看 | 99精品在线 | 精品久久久久久久久久久久久久 | 超黄视频网站 | 天天综合天天 | 高清国产午夜精品久久久久久 | 亚洲一区二区久久 | 夜夜爽99久久国产综合精品女不卡 | 999热在线视频 | 91精品国产色综合久久不卡98 | 99热这里有精品 | 午夜精品视频在线观看 | 伊人激情网 | 99久久精品视频免费 | 精品一级 | 天天天操天天天干 | 午夜视频在线免费观看 | 99久久免费精品国产免费高清 | 国产不卡在线观看 | 欧美日韩精品一区二区三区视频 | 久久久精品一区二区三区 | 天天干天天爽 | 情侣黄网站免费看 | 国产精品久久久久久久午夜 | 中文字幕在线视频网站 | 国产精品久久一区二区三区 | 日韩一区二区三区视频 |