ADC采样的电压与内部1.19V比较没有成功,帮忙看看,用8G1K08A的芯片
<p>#include <STC8G.h><br />#include "intrins.h"<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 &= ~0x30;</p>
<pre><code> P3M0 = 0x00;//P3.2口为高阻输入
P3M1 = 0x04;
P_SW2 |= 0x80;//ADC的初始化
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 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<8; i++)<br />
{<br />
j+= Get_ADC10bitResult(15);<br />
}<br />
Bandgap = j >> 4; //取平均值8次</p>
<p>Get_ADC10bitResult(2); //ADC2采样<br />
for(j=0, i=0; i<8; i++)<br />
{<br />
j+= Get_ADC10bitResult(2);<br />
}<br />
j = j >> 4;<br />
j = (u16)((u32)j * 119 / Bandgap);<br />
if(j>Bandgap) //判断ADC2.0采样电压大于基准电压就开灯 <br />
OUT=1;<br />
LED=1;<br />
if(j<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 & 0xF0) | 0x40 | channel;<br />
<em>nop</em>();<br />
<em>nop</em>();<br />
<em>nop</em>();<br />
while (!(ADC_CONTR & 0x20));<br />
ADC_CONTR &= ~0x20;<br />
return(((u16)ADC_RES << 8) | ADC_RESL);<br />
}</p>
<p>发送的红外灯,接收的没有输出</p>
讲解视频 和 C语言代码见下面链接
【新提醒】利用ADC15通道在内部固定接的1.19V辅助固定信号源,反推其他通道的输入电压或VCC - ADC/比较器,DMA支持的12位ADC,轨到轨比较器,DAC 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)
请测试“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转换的引脚设置为高阻输入.
******************************************/
梁工 发表于 2024-12-16 17:29
请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。
...
好的 神农鼎 发表于 2024-12-16 08:38
讲解视频 和 C语言代码见下面链接
谢谢 梁工 发表于 2024-12-16 17:29
请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。
...
不知道怎么测试,怎么没有这些设置,看看能否截个图,参考一下啊 梁工 发表于 2024-12-16 17:29
请测试“ADC相关程序-STC8G1K08A-8PIN”里的“02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言”例子。
...
这样的吗 <p><img src="data/attachment/forum/202412/16/201633k153yg573t1j53vt.png" alt="image.png" title="image.png" /></p>
shen168 发表于 2024-12-16 20:16
就是这样测试,你的供电电压是3.3V。
页:
[1]