stc单片机吧 关注:1,862贴子:2,525
  • 7回复贴,共1

STC单片机编程求助啊,各位带佬,一个小问题

只看楼主收藏回复

各位大哥,小弟想用STC12单片机实现ad转换,转换完的时候如果结果大于1那就将某一个引脚变为低电平,是不是可以这样写啊:
sbit P00 = P0^0;
sbit P12 = P1^2;
void InitUart();
void InitADC();
void SendData(unsigned char dat);
unsigned char GetADCResult(unsigned char ch);
void Delay(unsigned char n);
void ShowResult(unsigned char ch);
unsigned char ad_result;
void main()
{
InitUart(); //Init UART, use to show ADC result
InitADC(); //Init ADC sfr
while (1)
{
ad_result= GetADCResult(2);
if(ad_result>1)
{
P00=1;
ShowResult(2);
}
else
{
P00=0;
ShowResult(1);
}
}
}
void ShowResult(unsigned char ch)
{
SendData(ch); //Show Channel NO.
SendData(GetADCResult(ch)); //Show ADC high 8-bit result
}
unsigned char GetADCResult(unsigned char ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &= ~ADC_FLAG; //Close ADC
return ADC_RES; //Return ADC result
}
void InitUart()
{
SCON = 0x5a; //8 bit data ,no parity bit
TMOD = 0x20; //T1 as 8-bit auto reload
TH1 = TL1 = -(FOSC/12/32/BAUD); //波特率计算公式晶振/12/32/baud
TR1 = 1; //T1 start running
}
void InitADC()
{
P1ASF = 0xff; //Open 8 channels ADC function
ADC_RES = 0; //Clear previous result
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay(2); //ADC power-on and delay
}
void SendData(unsigned char dat)
{
while (!TI); //Wait for the previous data is sent
TI = 0; //Clear TI flag
SBUF = dat; //Send current data
}
void Delay(unsigned char n)
{
unsigned char x;
while (n--)
{
x = 5000;
while (x--);
}
}


IP属地:广东1楼2021-05-22 17:24回复
    1


    IP属地:广东2楼2021-05-22 17:24
    回复
      2025-07-23 19:51:10
      广告
      不感兴趣
      开通SVIP免广告
      1,自己顶一顶别沉了


      IP属地:广东3楼2021-05-22 17:24
      回复
        你这代码让人怎么看
        总体的意思没什么问题


        IP属地:辽宁来自Android客户端4楼2021-05-22 17:34
        收起回复
          就是stc单片机把引脚置一就一个语句就变成高电平了么?而且ad转换基本没问题呗


          IP属地:广东来自Android客户端5楼2021-05-22 17:52
          回复
            感觉你设计思路有问题哎,ADC取数后大于1,某个引脚就低电平。除非你ADC通道直接接地线。不然一取数就肯定大于1的。没看你是10位取数还是12位取数哈。10位取数的话就是把参考电压分成1023份计算。如为5V的话精确到0.0048875V大约0.005V。12位取数的话,精确到0.00122V四舍五入是0.001V。就是说ADC通道如果与地有0.00122V的压差,取出来的数也会大于1..忽如其来的一个干扰,或者电压波动都有可能导致。取数大于1.所以说你设计思路比较奇葩。


            IP属地:广东6楼2021-06-10 00:21
            回复
              那LZ可参考STC官方的标准例程及STC的开发箱例程,有实际的例子。很方便。


              IP属地:广东7楼2021-12-28 10:16
              回复