AI8H1K17 ADC检测
AI8H1K17P1.0(ADC0)采用官方例程检测1.3V电压实际输出ADC一直为0/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{ P1M0 = 0x00; //设置P1.0为ADC口
P1M1 = 0x01;
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16
ADC_CONTR = 0x80; //使能ADC模块
}
/*----------------------------
读取ADC结果
----------------------------*/
uint16 GetADCResult()
{ uint16 ADC_value;
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
ADC_value = ADC_RES;
ADC_value= (ADC_value<<2)+ (ADC_RESL&0x03);
return ADC_value; //返回ADC结果
}
#include "reg51.h"
#include "intrins.h"
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr ADCCFG = 0xde;
sfr P_SW2 = 0xba;
#define ADCTIM(*(unsigned char volatile xdata *)0xfea8)
sbit EADC = IE^5;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
void ADC_Isr() interrupt 5
{
ADC_CONTR &= ~0x20; //清中断标志
P2 = ADC_RES; //读取ADC结果
ADC_CONTR |= 0x40; //继续AD转换
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P1M0 = 0x00; //设置P1.0为ADC口
P1M1 = 0x01;
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16
ADC_CONTR = 0x80; //使能ADC模块
EADC = 1; //使能ADC中断
EA = 1;
ADC_CONTR |= 0x40; //启动AD转换
while (1);
}
用户请先别修改程序, 直接下载"100-STC8系列-ADC转换-串口1(P3.1)返回结果"里的"ADC.hex"测试. 下载时选择主频11.0592MHZ. 测试时, 电脑的串口助手设置115200,8,n,1.
本程序演示ADC查询采样,通过串口1(P3.1)发送给上位机,波特率115200,8,n,1.
本程序适用于10位或12位ADC。
下面为当输入为AVREF*1/4的电压时的测试结果截图,你也贴出你的测试结果截图看看。
这个芯片绝对的颠覆了我想像,既然用VCC做参考电压是要外接到vref的。 PB12 发表于 2025-6-19 10:53
这个芯片绝对的颠覆了我想像,既然用VCC做参考电压是要外接到vref的。
这个芯片哪个功能颠覆了你的想像?这么厉害。
ADC参考电压是AVREF,这是固定的,不能改变。
页:
[1]