STC8H1K28 读取ADC值总为3ff,无论实际电压是多少
void ADC_init(void){
P1M0 = 0x00;//P1 设置为准双向口,P1.7设置为高阻输入 做AD使用
P1M1 = 0x80;
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16 转换结果右对齐,ADC_RES 高2位,ADC_RESL低8位
ADC_CONTR = 0x80; //使能ADC模块
//EADC = 1; //使能ADC中断
//ADC_CONTR |= (0x40|7); //启动AD转换
}
u16 Get_ADCResult(u8 channel) //channel = 0~12
{
u16 adc;
u8 i;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xf0) | ADC_START | channel;
NOP(30); //对ADC_CONTR操作后等待会儿再访问
for(i=0; i<250; i++) //超时返回,正常i等于10以内就可以转换完成
{
if(ADC_CONTR & ADC_FLAG)
{
ADC_CONTR &= ~ADC_FLAG;
adc = ((u16)ADC_RES << 8) | ADC_RESL;
return adc;
}
}
return 4096; //错误,返回4096,调用的程序判断
}
#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);
}
神农鼎 发表于 2023-4-25 10:54
#include "reg51.h"
#include "intrins.h"
我的初始化参数看着没有区别哦,而且需要串口打出才能发现是否有问题,您这个采集完也看不到 本帖最后由 benjamin 于 2023-4-25 13:07 编辑
benjamin 发表于 2023-4-25 12:10
我的初始化参数看着没有区别哦,而且需要串口打出才能发现是否有问题,您这个采集完也看不到 ...这个是1.5-1.65之间电压的数值(供电电压5V);小于1.5 为0;大于1.65为3ff,型号为STC8H1K28 TQFP32封装
接收←00 00
接收←00 1F
接收←00 1F
接收←00 7F
接收←00 0F
接收←00 7F
接收←00 7F
接收←00 FF
接收←00 0F
接收←00 0F
接收←01 FF
接收←01 FF
接收←01 FF
接收←01 FF
接收←01 FF
接收←03 FF
不要盲人摸象,用仿真器来仿真
【新提醒】用 STC-USB Link1D 仿真STC8系列MCU - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
https://www.stcaimcu.com/data/attachment/forum/202301/30/170748bl5l157x6y9gqu45.png
我用串口调试工具来的,之前用过15系列的很少有问题,这个是第一次用 盲人摸象,遇到自己软件问题卡几天正常 不是就上面那几个寄存器吗,而且我用咱们的demo库文件也是一样的现象 那芯片错了 ?
页:
[1]
2