欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:492510 發(fā)表于 2020-5-26 22:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
寫了個(gè)程序,本想用STC12C5A60S2的P1.4引腳接受濕度傳感器輸出的模擬信號(hào),然后判斷是否達(dá)到閾值,達(dá)到閾值后通過P2.0引腳輸出高電平使水泵繼電器開關(guān)打開,可是不知道哪里出了問題實(shí)物調(diào)試一直不成功,請(qǐng)大神指教一下。濕度傳感器用的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í)函數(shù)
{
WORD x;
while(n--)
{
  x=5000;
  while(x--);
}
}

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

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2020-5-27 07:25 | 只看該作者
用比較器判斷是否達(dá)到閾值其本身已經(jīng)達(dá)到模數(shù)轉(zhuǎn)換的作用,只是不能數(shù)字控制。如果濕度傳感器輸出的模擬信號(hào)不符合單片機(jī)ADC采樣范圍應(yīng)使用LM358之類的運(yùn)放調(diào)整到合適范圍。控制濕度不是控制在某一個(gè)點(diǎn)而是控制在一定范圍。也就是設(shè)定上限和下限。樓主的main函數(shù)沒有用while(1)限制會(huì)發(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ù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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