shen168 发表于 2024-12-15 22:41:05

ADC采样的电压与内部1.19V比较没有成功,帮忙看看,用8G1K08A的芯片

<p>#include &lt;STC8G.h&gt;<br />
#include &quot;intrins.h&quot;<br />
//引脚定义<br />
sbit LED=P5^4;<br />
sbit IR=P5^5;<br />
sbit RX_PD=P3^2;<br />
sbit OUT=P3^3;<br />
//延时1ms<br />
void Delay1ms(void)        //@11.0592MHz<br />
{<br />
unsigned char data i, j;</p>
<pre><code>i = 15;
j = 90;
do
{
        while (--j);
} while (--i);
</code></pre>
<p>}</p>
<p>//定义</p>
<p>#define ADCTIM(*(unsigned char volatile xdata *)0xfea8)<br />
typedef   unsigned char   u8;<br />
typedef   unsigned int    u16;<br />
typedef   unsigned long   u32;<br />
u16 Get_ADC10bitResult(u8 channel); //通道0~15<br />
u16 Bandgap;<br />
//主函数<br />
void main(void)<br />
{<br />
P3M0 = 0x00; //P3为准双向口模式<br />
P3M1 = 0x00;<br />
P5M0 |= 0x30;//P5为推挽输出模式<br />
P5M1 &amp;= ~0x30;</p>
<pre><code>        P3M0 = 0x00;//P3.2口为高阻输入
        P3M1 = 0x04;
P_SW2 |= 0x80;//ADC的初始化
ADCTIM = 0x3f;                              //设置ADC内部时序
P_SW2 &amp;= 0x7f;
ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
ADC_CONTR = 0x82;//设置P3.2为ADC口      0010               

while (1)
{
       u16 j;
          u8i;
        IR=1;
</code></pre>
<p>Delay1ms();<br />
IR=0;<br />
Delay1ms();<br />
Get_ADC10bitResult(15);//读内部基准电压1.19V,读15通道<br />
for(j=0, i=0; i&lt;8; i++)<br />
{<br />
j+= Get_ADC10bitResult(15);<br />
}<br />
Bandgap = j &gt;&gt; 4;   //取平均值8次</p>
<p>Get_ADC10bitResult(2);   //ADC2采样<br />
for(j=0, i=0; i&lt;8; i++)<br />
{<br />
j+= Get_ADC10bitResult(2);<br />
}<br />
j = j &gt;&gt; 4;<br />
j = (u16)((u32)j * 119 / Bandgap);<br />
if(j&gt;Bandgap)                //判断ADC2.0采样电压大于基准电压就开灯        <br />
OUT=1;<br />
LED=1;<br />
if(j&lt;Bandgap)                //判断ADC2.0采样电压大于基准电压就关灯                <br />
OUT=0;<br />
LED=0;<br />
return ;<br />
}</p>
<p>}<br />
u16 Get_ADC10bitResult(u8 channel)//   ADC采样<br />
{<br />
ADC_RES = 0;<br />
ADC_RESL = 0;<br />
ADC_CONTR = (ADC_CONTR &amp; 0xF0) | 0x40 | channel;<br />
<em>nop</em>();<br />
<em>nop</em>();<br />
<em>nop</em>();<br />
while (!(ADC_CONTR &amp; 0x20));<br />
ADC_CONTR &amp;= ~0x20;<br />
return(((u16)ADC_RES &lt;&lt; 8) | ADC_RESL);<br />
}</p>
<p>发送的红外灯,接收的没有输出</p>

神农鼎 发表于 2024-12-16 08:36:55






























神农鼎 发表于 2024-12-16 08:38:29


讲解视频 和 C语言代码见下面链接



【新提醒】利用ADC15通道在内部固定接的1.19V辅助固定信号源,反推其他通道的输入电压或VCC - ADC/比较器,DMA支持的12位ADC,轨到轨比较器,DAC 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)

梁工 发表于 2024-12-16 17:29:34

请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。



/*************        功能说明        **************
用户请先别修改程序, 直接下载"02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言"里的"ADC.hex"测试. 下载时选择主频11.0592MHZ。

测试时, 电脑的串口助手设置115200,8,n,1.

本程序演示4路ADC(P3.0 P3.2 P3.3 P5.4 P5.5)和bandgap查询采样,通过串口1(P3.1)发送给上位机,波特率115200,8,n,1.

0~3通道对应P3.0~P3.3, 4通道-->P5.4, 5通道-->P5.5, 15通道为内部1.19V基准电压做输入的ADC值.

初始化时先把要ADC转换的引脚设置为高阻输入.

******************************************/





shen168 发表于 2024-12-16 19:45:32

梁工 发表于 2024-12-16 17:29
请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。

...

好的

shen168 发表于 2024-12-16 19:45:59

神农鼎 发表于 2024-12-16 08:38
讲解视频 和 C语言代码见下面链接




谢谢

shen168 发表于 2024-12-16 20:05:20

梁工 发表于 2024-12-16 17:29
请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。

...

不知道怎么测试,怎么没有这些设置,看看能否截个图,参考一下啊

shen168 发表于 2024-12-16 20:16:29

梁工 发表于 2024-12-16 17:29
请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。

...

这样的吗

shen168 发表于 2024-12-16 20:16:45

<p><img src="data/attachment/forum/202412/16/201633k153yg573t1j53vt.png" alt="image.png" title="image.png" /></p>

梁工 发表于 2024-12-16 21:23:49

shen168 发表于 2024-12-16 20:16


就是这样测试,你的供电电压是3.3V。
页: [1]
查看完整版本: ADC采样的电压与内部1.19V比较没有成功,帮忙看看,用8G1K08A的芯片