找回密码
 立即注册
查看: 1052|回复: 8

求助 STC8G1K08A单片机 ADC 转换结果串口输出 始终为0 | 已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-13 12:04:56

1

主题

2

回帖

11

积分

新手上路

积分
11
发表于 2024-1-13 12:59:57 | 显示全部楼层 |阅读模式
各位大佬好,有大神能帮我检查一下ADC的程序吗?谢谢!
我正在学习单片机开发,我的需求是让单片机检测P3.3脚的电压,通过ADC转换,并用串口输出。
P3.3和P3.2脚上万用表测量电压是1.420V和1.416V
现在的问题是,上传单片机后,串口一直输出:
  1.                     ADC:0
  2.                     _____________
  3.                     ADC:0
  4.                     _____________
  5.                     ADC:0
  6.                     _____________
  7.                     ADC:0
  8.                     _____________
复制代码
我尝试更换引脚到P3.2、更改测量速度均为0。

  1. #include "STC8G.h"
  2. #include "stdio.h"
  3. #include "intrins.h"
  4. unsigned int Temp;
  5. void UART_Init() {  //串口模式初始化
  6.   SCON = 0x50;
  7.   TMOD = 0x00;  // 设置定时器1为模式0
  8.   TL1 = 0xE5;   // TL1存储低8位
  9.   TH1 = 0xFF;   // TH1存储高8位
  10.   TR1 = 1;      // 启动定时器1
  11.   AUXR = 0x40;  // 定时器1-1T模式
  12. }
  13. char putchar(char ch)   //定义printf串口发送函数
  14. {
  15.     SBUF = ch;          //串口1数据寄存器
  16.     while(TI == 0);     //串口1中断发送请求标志
  17.     TI = 0;
  18.     return ch;
  19. }
  20. void ADC_Init() {
  21.   P_SW2 |= 0x80;
  22.   ADCTIM = 0x3f;        //设置ADC内部时序
  23.   P_SW2 &= 0x7f;
  24.   ADC_CONTR = 0x8b;     //打开ADC电源、选择P3.3引脚
  25.   ADCCFG = 0x2f;
  26. }
  27. void Get_Temp() {
  28.   ADC_CONTR |= 0x40;                      //启动AD转换
  29.   _nop_();
  30.   _nop_();
  31.   while (!(ADC_CONTR & 0x20));            //查询ADC完成标志
  32.   ADC_CONTR &= ~0x20;                     //清完成标志
  33.   Temp = ADC_RESL;
  34.   Temp += ADC_RES*256;
  35.   printf("ADC:%u\n", Temp);
  36.   printf("_____________\n");
  37. }
  38. void main() {
  39. P3M0 = 0x00;   //设置P3.0、3.1串口为准双向口,其余为高祖输入
  40. P3M1 = 0xfc;
  41. UART_Init();
  42. ADC_Init();
  43.         while(1){
  44.                 Get_Temp();
  45.         }
  46. }
复制代码



1.PNG

2.PNG

3.PNG

十分感激!

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-13 16:00:22 | 显示全部楼层
P3.3 你试一试
ADC_CONTR = 0x83;     //打开ADC电源、选择P3.3引脚
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-05-02 11:17:38
已绑定手机

6

主题

24

回帖

889

积分

高级会员

积分
889
发表于 2024-1-13 16:44:35 | 显示全部楼层
楼上正解
截图202401131644269041.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-13 12:04:56

1

主题

2

回帖

11

积分

新手上路

积分
11
发表于 2024-1-13 16:49:06 | 显示全部楼层
_奶*** 发表于 2024-1-13 16:00
P3.3 你试一试
ADC_CONTR = 0x83;     //打开ADC电源、选择P3.3引脚

十分感谢,是我傻了,看错芯片的规格书了,按照您的指导修改后正常运行,麻烦您了,谢谢!
附上正确的地址表:
4.PNG

点评

看好你哟~  发表于 2024-1-13 17:40
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-13 12:04:56

1

主题

2

回帖

11

积分

新手上路

积分
11
发表于 2024-1-13 16:50:08 | 显示全部楼层

感谢大佬帮忙,以后看规格书会更仔细一些,谢谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-12-19 09:00:54

3

主题

17

回帖

163

积分

注册会员

积分
163
发表于 2024-2-25 04:47:46 来自手机 | 显示全部楼层
_奶咖君_ 发表于 2024-1-13 16:00
P3.3 你试一试
ADC_CONTR = 0x83;     //打开ADC电源、选择P3.3引脚

ADC_CONTR |= 0x40;                      //启动AD转换
这句为什么不需要修改为0x43
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

积分
2975
发表于 2024-2-25 08:03:29 | 显示全部楼层
hjx5*** 发表于 2024-2-25 04:47
ADC_CONTR |= 0x40;                      //启动AD转换
这句为什么不需要修改为0x43

这句只是将ADC_CONTR.6即ADC_START这个位置1
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-03-15 13:23:33

0

主题

1

回帖

18

积分

新手上路

积分
18
发表于 2024-3-5 14:05:54 | 显示全部楼层
本帖最后由 Golf 于 2024-3-5 14:08 编辑

为什么我用了你的程序他会一直处于检测ADC转换是否完成的那个循环那里,把循环屏蔽掉就可以正常运行了
微信图片_20240305140720.png
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:51 , Processed in 0.127195 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表