1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求教,關(guān)于STC12C5A60S2的單片機AD轉(zhuǎn)換問題

[復(fù)制鏈接]
ID:492510 發(fā)表于 2020-5-26 22:58 | 顯示全部樓層 |閱讀模式
寫了個程序,本想用STC12C5A60S2的P1.4引腳接受濕度傳感器輸出的模擬信號,然后判斷是否達到閾值,達到閾值后通過P2.0引腳輸出高電平使水泵繼電器開關(guān)打開,可是不知道哪里出了問題實物調(diào)試一直不成功,請大神指教一下。濕度傳感器用的YL-69,比較器用的LM-393,程序如下:
#include "STC12C5A60S2.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
void InitADC();
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void main()
{
InitADC();
P2=0x00;
if(GetADCResult(4)>=0.001)                        //0.001為閾值
  P2=0x01;
}
BYTE GetADCResult(BYTE ch)                       //AD轉(zhuǎn)換結(jié)果
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
return ADC_RES;
}
void InitADC()                      //AD寄存器初始化
{
P1ASF=0xff;
ADC_RES=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
Delay(2);
}
void Delay(WORD n)                  //延時函數(shù)
{
WORD x;
while(n--)
{
  x=5000;
  while(x--);
}
}

回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-5-27 07:25 | 顯示全部樓層
用比較器判斷是否達到閾值其本身已經(jīng)達到模數(shù)轉(zhuǎn)換的作用,只是不能數(shù)字控制。如果濕度傳感器輸出的模擬信號不符合單片機ADC采樣范圍應(yīng)使用LM358之類的運放調(diào)整到合適范圍?刂茲穸炔皇强刂圃谀骋粋點而是控制在一定范圍。也就是設(shè)定上限和下限。樓主的main函數(shù)沒有用while(1)限制會發(fā)生無法預(yù)料的結(jié)果。

void main()
{
        BYTE Temp;
        InitADC();
        while(1)
        {
                Temp=GetADCResult(4);//采樣
                if(Temp>=0x80)//上限
                        P2=0x00;
            //上下限之間保持原態(tài)不變
                if(Temp<=0x64)//下限
                        P2=0x01;
                Delay(1000);//控制采樣周期
        }
}
回復(fù)

使用道具 舉報

ID:492510 發(fā)表于 2020-5-27 11:38 | 顯示全部樓層
wulin 發(fā)表于 2020-5-27 07:25
用比較器判斷是否達到閾值其本身已經(jīng)達到模數(shù)轉(zhuǎn)換的作用,只是不能數(shù)字控制。如果濕度傳感器輸出的模擬信號 ...

非常感謝您的幫助!
遺憾的是在修改主函數(shù)并嘗試不同上下限后還是沒能成功使P2.0引腳輸出高電平,第一次使用AD功能,可能是對相關(guān)寄存器用法不正確。
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-5-27 13:59 | 顯示全部樓層
li155 發(fā)表于 2020-5-27 11:38
非常感謝您的幫助!
遺憾的是在修改主函數(shù)并嘗試不同上下限后還是沒能成功使P2.0引腳輸出高電平,第一次 ...

樓主這個程序基本是STC官方示例的應(yīng)用,除了main函數(shù)有點上述的問題外其它基本正確。不能正常工作可能是硬件電路還有問題。P1.4輸入電壓范圍0~VCC,獲取ADC結(jié)果數(shù)據(jù)范圍0~255。
回復(fù)

使用道具 舉報

ID:492510 發(fā)表于 2020-5-27 14:52 | 顯示全部樓層
wulin 發(fā)表于 2020-5-27 13:59
樓主這個程序基本是STC官方示例的應(yīng)用,除了main函數(shù)有點上述的問題外其它基本正確。不能正常工作可能是 ...

被您發(fā)現(xiàn)了哈哈,本來是一個小系統(tǒng)的程序,其他功能模塊基本調(diào)試正常了,只有AD這里還有些問題,就給單獨摘了出來調(diào)試。我會再琢磨琢磨的,謝謝您的指點。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表