找回密码
 立即注册
查看: 217|回复: 10

请教一个问题,AI8051的高低位读取和AI8的高低位读取有什么不一样的吗?

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:632
  • 最近打卡:2025-08-23 07:52:22
已绑定手机

54

主题

1892

回帖

3566

积分

论坛元老

积分
3566
发表于 2025-7-3 22:02:06 | 显示全部楼层 |阅读模式
AI8的头文件


#define     PWM1_CCR1               (*(unsigned  int volatile xdata *)0xfed5)
#define     PWM1_CCR1H              (*(unsigned char volatile xdata *)0xfed5)
#define     PWM1_CCR1L              (*(unsigned char volatile xdata *)0xfed6)

可以直接读取PWM1_CCR1 的值
AI8051头文件
#define    BGV                        (*(unsigned char volatile far *)0x7efde7)

#define     CHIPID7                 (*(unsigned char volatile far *)0x7efde7)
#define     CHIPID8                 (*(unsigned char volatile far *)0x7efde8)

我如果自定义BGV读取出来的值就不对,请问是不能这样操作吗?
回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 2025-7-3 22:03:00 | 显示全部楼层
关于AI8051与AI8在高低位读取方式上的差异,以及BGV寄存器读取异常的问题,以下为专业分析:

AI8与AI8051作为不同架构的微控制器,其寄存器访问机制存在本质区别。AI8采用的是传统8位单片机架构,而AI8051则基于增强型8051内核,两者在内存映射、数据类型定义及寄存器操作方式上均有显著差异。

在AI8中,PWM1CCR1是一个16位寄存器,通过定义:
  1. c
  2. define PWM1CCR1 ((unsigned int volatile xdata )0xfed5)
复制代码
可直接读取16位值。同时提供高位字节(PWM1CCR1H)和低位字节(PWM1CCR1L)的单独访问接口,分别映射到地址0xfed5和0xfed6。这种设计允许用户按需读取高位或低位字节,适用于需要精确控制寄存器各部分的应用场景。

而在AI8051中,寄存器定义方式发生了变化。例如:
  1. c
  2. define BGV ((unsigned char volatile far )0x7efde7)
复制代码
该定义表明BGV是一个8位寄存器,位于far地址空间。同时定义的CHIPID7和CHIPID8分别对应地址0x7efde7和0x7efde8,说明这些寄存器是连续的8位存储单元。

若尝试通过自定义方式读取BGV寄存器时出现数值异常,可能原因如下:

1. 地址空间访问权限:AI8051的far地址空间需要特定的访问机制,直接使用标准指针可能无法正确读取。建议使用编译器提供的专用访问函数或汇编指令。

2. 数据类型匹配问题:BGV定义为unsigned char类型,若以int或long类型读取,可能导致符号扩展或截断错误。应严格遵循定义的数据类型进行访问。

3. 寄存器保护机制:部分高端MCU对关键寄存器实施写保护,读取时需先解除保护。建议查阅数据手册确认BGV是否受保护及其解除方法。

4. 内存映射冲突:检查0x7efde7地址是否被其他外设占用,避免因地址冲突导致读取异常。

综上所述,AI8与AI8051在寄存器操作层面存在系统性差异,建议严格按照官方头文件定义进行开发,并参考数据手册中的寄存器配置指南。对于特殊寄存器如BGV,需特别注意其访问方式和限制条件,以确保数据读取的准确性和稳定性。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2983

回帖

6363

积分

荣誉版主

无情的代码机器

积分
6363
发表于 2025-7-3 22:50:59 | 显示全部楼层
读两次,蒙出来的我也不知道为什么......
截图202507032253082594.jpg
截图202507032240377877.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:632
  • 最近打卡:2025-08-23 07:52:22
已绑定手机

54

主题

1892

回帖

3566

积分

论坛元老

积分
3566
发表于 2025-7-4 06:12:04 | 显示全部楼层
erci*** 发表于 2025-7-3 22:50
读两次,蒙出来的我也不知道为什么......

你这个不是因为读了2次出来的,这个本来就应该出来啊
截图202507040611255490.jpg

点评

我意思32bit要分别读高低字节,8bit不是直接16位指针就读出来了么~  详情 回复 发表于 2025-7-4 08:01
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2983

回帖

6363

积分

荣誉版主

无情的代码机器

积分
6363
发表于 2025-7-4 08:01:52 | 显示全部楼层
jw*** 发表于 2025-7-4 06:12
你这个不是因为读了2次出来的,这个本来就应该出来啊

我意思32bit要分别读高低字节,8bit不是直接16位指针就读出来了么~
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:632
  • 最近打卡:2025-08-23 07:52:22
已绑定手机

54

主题

1892

回帖

3566

积分

论坛元老

积分
3566
发表于 2025-7-4 08:04:51 | 显示全部楼层
erci*** 发表于 2025-7-4 08:01
我意思32bit要分别读高低字节,8bit不是直接16位指针就读出来了么~

CHIPID7/8是8位的嘛,我就是想用16位指针读出来嘛
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:632
  • 最近打卡:2025-08-23 07:52:22
已绑定手机

54

主题

1892

回帖

3566

积分

论坛元老

积分
3566
发表于 2025-7-4 08:08:12 | 显示全部楼层
erci*** 发表于 2025-7-4 08:01
我意思32bit要分别读高低字节,8bit不是直接16位指针就读出来了么~

原来的8系列头文件都自带,AI8051没有,所以想自己定义下,读出来就是错的

点评

无法解释,蹲大佬回答  发表于 2025-7-4 09:09
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-08-23 08:57:24
已绑定手机

45

主题

2172

回帖

7590

积分

论坛元老

积分
7590
发表于 2025-7-4 09:22:02 | 显示全部楼层
jw*** 发表于 2025-7-4 08:08
原来的8系列头文件都自带,AI8051没有,所以想自己定义下,读出来就是错的 ...

251核芯片暂不支持16位寄存器,16位寄存器内容需要一个字节一个字节读取,然后组合。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:632
  • 最近打卡:2025-08-23 07:52:22
已绑定手机

54

主题

1892

回帖

3566

积分

论坛元老

积分
3566
发表于 2025-7-4 09:28:23 | 显示全部楼层
乘风*** 发表于 2025-7-4 09:22
251核芯片暂不支持16位寄存器,16位寄存器内容需要一个字节一个字节读取,然后组合。 ...

好的,知道了,谢谢!
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-24 02:31 , Processed in 0.154625 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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