求助 STC8G1K08A单片机 ADC 转换结果串口输出 始终为0 | 已解决
各位大佬好,有大神能帮我检查一下ADC的程序吗?谢谢!我正在学习单片机开发,我的需求是让单片机检测P3.3脚的电压,通过ADC转换,并用串口输出。
P3.3和P3.2脚上万用表测量电压是1.420V和1.416V
现在的问题是,上传单片机后,串口一直输出:
ADC:0
_____________
ADC:0
_____________
ADC:0
_____________
ADC:0
_____________我尝试更换引脚到P3.2、更改测量速度均为0。
#include "STC8G.h"
#include "stdio.h"
#include "intrins.h"
unsigned int Temp;
void UART_Init() {//串口模式初始化
SCON = 0x50;
TMOD = 0x00;// 设置定时器1为模式0
TL1 = 0xE5; // TL1存储低8位
TH1 = 0xFF; // TH1存储高8位
TR1 = 1; // 启动定时器1
AUXR = 0x40;// 定时器1-1T模式
}
char putchar(char ch) //定义printf串口发送函数
{
SBUF = ch; //串口1数据寄存器
while(TI == 0); //串口1中断发送请求标志
TI = 0;
return ch;
}
void ADC_Init() {
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADC_CONTR = 0x8b; //打开ADC电源、选择P3.3引脚
ADCCFG = 0x2f;
}
void Get_Temp() {
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
Temp = ADC_RESL;
Temp += ADC_RES*256;
printf("ADC:%u\n", Temp);
printf("_____________\n");
}
void main() {
P3M0 = 0x00; //设置P3.0、3.1串口为准双向口,其余为高祖输入
P3M1 = 0xfc;
UART_Init();
ADC_Init();
while(1){
Get_Temp();
}
}
十分感激!
P3.3 你试一试
ADC_CONTR = 0x83; //打开ADC电源、选择P3.3引脚 楼上正解 _奶咖君_ 发表于 2024-1-13 16:00
P3.3 你试一试
ADC_CONTR = 0x83; //打开ADC电源、选择P3.3引脚
十分感谢,是我傻了,看错芯片的规格书了,按照您的指导修改后正常运行,麻烦您了,谢谢!
附上正确的地址表:
shelock9527 发表于 2024-1-13 16:44
楼上正解
感谢大佬帮忙,以后看规格书会更仔细一些,谢谢! _奶咖君_ 发表于 2024-1-13 16:00
P3.3 你试一试
ADC_CONTR = 0x83; //打开ADC电源、选择P3.3引脚
ADC_CONTR |= 0x40; //启动AD转换
这句为什么不需要修改为0x43 hjx5548 发表于 2024-2-25 04:47
ADC_CONTR |= 0x40; //启动AD转换
这句为什么不需要修改为0x43
这句只是将ADC_CONTR.6即ADC_START这个位置1 本帖最后由 Golf 于 2024-3-5 14:08 编辑
为什么我用了你的程序他会一直处于检测ADC转换是否完成的那个循环那里,把循环屏蔽掉就可以正常运行了
页:
[1]