找回密码
 立即注册
查看: 711|回复: 4

STC-ISP范例程序ADC程序问题

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:461
  • 最近打卡:2025-06-17 00:39:33

10

主题

71

回帖

1537

积分

金牌会员

积分
1537
发表于 2023-11-26 08:24:21 | 显示全部楼层 |阅读模式
STC-ISP(V6.92F)范例程序ADC程序,下面程序来源于STC-ISP(V6.92F)范例程序
int ADCRead()
{
    int res;

    ADC_CONTR |= 0x40;                          //启动AD转换
    _nop_();
    _nop_();
    while (!(ADC_CONTR & 0x20));                //查询ADC完成标志
    ADC_CONTR &= ~0x20;                         //清完成标志
    res = (ADC_RES << 8) | ADC_RESL;            //读取ADC结果

    return res;
}
请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;
截图202311260824096884.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2800

积分

荣誉版主

积分
2800
发表于 2023-11-26 09:54:20 | 显示全部楼层
ADCRES 是高8位
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:559
  • 最近打卡:2025-06-17 07:05:23

24

主题

524

回帖

1228

积分

荣誉版主

积分
1228
发表于 2023-11-26 12:43:05 | 显示全部楼层
请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;

答:因res为16位变量,编译器会对参与运算的8位变量进行数值提升。
  还可以查看编译后的汇编代码进行确认。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6094

回帖

1万

积分

超级版主

积分
12735
发表于 2023-11-27 11:55:44 | 显示全部楼层
请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;
================================

为了避免异常,建议如下:
res = ( (u16)ADC_RES << 8)  +  ADC_RESL;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-06-17 07:35:56

0

主题

83

回帖

1314

积分

金牌会员

积分
1314
发表于 2023-11-30 08:46:14 | 显示全部楼层
向高手学习
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 04:19 , Processed in 0.161006 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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