qq603599910 发表于 2024-9-10 12:01:21

关于8H2K08U的BGV读取值问题

本帖最后由 DebugLab 于 2024-9-10 13:30 编辑

各位大佬, 我在使用8H2K08U调试ADC想用内部1.19V 基准,按照范例程序代码读取CHIPID的1.19V实际值(BGV=1193mv)和 ISP 程序下载时显示的内部参考电压值(1189 mV )有差异.
请问以下代码是否有问题呢,谢谢!

#BGV读取代码

=======================
.
.
.

#define CPUIDBASE   0xfde0
#define VREF_ADDR   (*(unsigned int volatile xdata *)(CPUIDBASE + 0x07))

.
.
.
printf("BGV=%01u,mv",(u16)((VREF_ADDR >>8) +VREF_ADDR));      //串口发送BGV值

.

#串口助手返回值
============================================

.
.
.
接收:BGV=1193,mv
接收:BGV=1193,mv
接收:BGV=1193,mv
接收:BGV=1193,mv
接收:BGV=1193,mv
接收:BGV=1193,mv
接收:BGV=1193,mv


#ISP下载返回值
==============================================



正在擦除目标区域 ... 完成 !               
正在下载用户代码 ... 完成 !               
正在设置硬件选项 ... 完成 !               

更新后的硬件选项为:
. 系统ISP工作频率: 24.000MHz
. 内部IRC振荡器的频率: 24.000MHz
. 掉电唤醒定时器的频率: 35.375KHz
. 振荡器放大增益使能
. P3.2和P3.3与下次下载无关
. 上电复位时增加额外的复位延时
. 复位引脚仍为复位脚
. P5.4口不切换为P1.2
. 不交换P1.0口和P1.1位置
. 检测到低压时不复位,可产生低压中断
. 低压检测门槛电压 : 2.00 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 256
. 空闲状态时看门狗定时器停止计数
. 下次下载用户程序时,将用户EEPROM区一并擦除
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. 未使能芯片的仿真功能
. 内部参考电压: 1189 mV (参考范围: 1100~1300mV)
芯片出厂序列号 : F894C9B307B0C7

单片机型号: STC8H2K08U
软件协议, V3.0: 7.4.7U

. 用户设定频率: 24.000MHz
. 调节后的频率: 24.000MHz ( 主时钟分频系数 = 1; )
. 频率调节误差: 0.000%

操作成功 !(2024-09-10 11:45:21)




邮箱 发表于 2024-9-10 13:05:43

printf("BGV=%01u,mv",(u16)(VREF_ADDR));

邮箱 发表于 2024-9-10 13:10:59

4 = 1189 >> 8;
1193 = 4 + 1189;

qq603599910 发表于 2024-9-10 13:46:24

邮箱 发表于 2024-9-10 13:10
4 = 1189 >> 8;
1193 = 4 + 1189;

谢谢大佬! 还真的是这样. 也就是说定义VREF_ADDR直接是16位无符号类型数据,不用高8位和低8位相加,我是看到范例都是高低8位分开处理以为需要合并计算再使用.

soma 发表于 2024-9-10 20:14:30

定义的时候是unsigned int是16位,所以打印的时候也不用强制类型转换吧。更不用类似把unsigned char累加吧。

qq603599910 发表于 2024-9-10 22:34:31

soma 发表于 2024-9-10 20:14
定义的时候是unsigned int是16位,所以打印的时候也不用强制类型转换吧。更不用类似把unsigned char累加吧 ...

是的,可以不用强制转换.我是还有其他类型数据需要用printf打印所以就统一加了强制类型转换.
页: [1]
查看完整版本: 关于8H2K08U的BGV读取值问题