ADC采集电压为0,求答疑解惑。
按照STC8H手册里19.6范例程序,把ADC采集通道改了下。电压测量显示结果传到串口助手,一直是0?
附代码:
#include <STC8H.h>
#include <intrins.h>
#include <stdio.h>
void Delay1000ms() //@11.0592MHz
{
unsigned char data i, j, k;
i = 57;
j = 27;
k = 112;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit(void)//9600bps@11.0592MHz
{
SCON = 0x50;//8位数据,可变波特率
AUXR |= 0x40;//定时器1时钟为FOSC,就是1T
AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
TMOD &= 0x0F;//设定定时器1为16位重装载方式
TL1 = 0xE0;//设定定时器低位值
TH1 = 0xFE ;//设定定时器高位值
ET1 = 0;//禁止定时器1中断
TR1 = 1;//启动定时器1
}
void Uart1_SendChar(unsigned char Udat)
{
SBUF = Udat;//串口1数据寄存器
while(!TI);//串口1中断发送请求标志
TI = 0;
}
char putchar(char c)
{
Uart1_SendChar(c);
return c;
}
void main()
{
P_SW2 |= 0x80; //使能访问XFR
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P0M0 = 0x00; P0M1 = 0x10; //设置P0.4(47引脚)ADC测量的引脚为高阻输入模式
ADCTIM = 0x3f; //设置ADC 内部时序
ADCCFG = 0x2f; //设置ADC 时钟为系统时钟/2/16
ADC_CONTR = 0x8c; //开启ADC测量功能,设置第12通道为ADC测量作用
UartInit();
while (1)
{
ADC_CONTR = 0xcc; //启动AD 转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC 完成标志
ADC_CONTR &= ~0x20; //清完成标志
printf("测得外部ADC电压为%u",ADC_RES); //读取ADC 测量结果显示至串口助手
Delay1000ms();
}
}
请下载“07-8H8K64U-15路12位ADC转换-串口1(P3.1)返回结果-C语言”里的HEX文件测试,STC8H4K64TLCD与STC8H8K64U的ADC完全兼容。MCU将ADC结果转成十进制文本上传,串口助手可以看到结果。
你实物测试时是否和图中一样没有接VCC吧? wenhuixuan 发表于 2023-6-7 07:57
你实物测试时是否和图中一样没有接VCC吧?
VCC引脚接的,实验LED全部都能点亮。{:loveliness:} 梁工 发表于 2023-6-6 23:24
请下载“07-8H8K64U-15路12位ADC转换-串口1(P3.1)返回结果-C语言”里的HEX文件测试,STC8H4K64TLCD与STC8H8 ...
谢谢,梁工。电路中的R2电阻坏掉了,可能是焊接时温度过高时间过长,给烧坏了吧。换了个电阻就好了,有数值了。 liming 发表于 2023-6-7 09:18
谢谢,梁工。电路中的R2电阻坏掉了,可能是焊接时温度过高时间过长,给烧坏了吧。换了个电阻就好 ...
这种情况,万用表量一下ADC输入电压马上就知道了,量到0V,ADC是0是正常的,然后就查为什么是0V,立刻就知道电阻坏了。
页:
[1]