找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1892|回复: 3
打印 上一主题 下一主题
收起左侧

关于单片机头文件中数据存储区地址宏定义的问题

[复制链接]
跳转到指定楼层
楼主
ID:504174 发表于 2019-4-3 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define status                                        (*(volatile unsigned char*)0x80)
sbit                inscolor                                =                status^0;
sbit                voltagesel                                =                status^1;
sbit                E1                                        =                status^2
sbit                E2                                        =                status^3;
sbit                E3                                        =                status^4;

各位大佬看一下这一段宏定义,如果我这么定义数据存储区的话,inscolor指向的是0x80的最低位吗?还是会被自动分配到位寻址区去?
这样定义的汇编操作又是怎么样的呢?有什么更简便的方法吗?除对存储区数据进行逻辑运算之外的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2019-4-4 13:08 | 只看该作者
你想一下:status 是不是一定是80H?
如果是:status^0 将是什么?
如果不是:status^0 又是什么?
回复

使用道具 举报

板凳
ID:401564 发表于 2019-4-4 14:04 | 只看该作者
你这么干的目的是什么?你用的是51单片机吗?如果 是51的话,你就参考包含的头文件中的reg52.h的寄存器命名方法来命名
但51和别的单片机却是有点不同的,就是在寄存器和数据存储地址上,80H以上的地址名称它是寄存器和数据存储器共用的,也就是说0X80这个地址名称是有两个东西在用的,一个是P0端口的地址,它是0X80,另一个是数据存储器,它也是0X80,当你要对0X80这个地址进行操作的时候,它是通过寻址方式的不同来区分你是要操作寄存器还是操作数据存储器的。
既然你用C,那就应该没有理由要用汇编去操作硬件,那就没有必要用C去定义一个数据地址,那就和用汇编是一样的了,那就是用汇编的方法去用C,没意义
回复

使用道具 举报

地板
ID:504174 发表于 2019-4-8 14:45 | 只看该作者
感谢大佬们的解答!
其实我现在属于卡在汇编和C之间的感觉,经常不知道该用哪种方式去调用数据和操作数据,再加上老板汇编用习惯了经常要求我们一个寄存器掰成8个位来用,一点资源也不能浪费,于是就变成上面这种写法了,其实我也想用汇编来写啊,奈何汇编用不熟练,太长的代码我自己都绕晕了
另外,我看reg51里的写法,P0口之类对应的端口地址不都是用sfr P0=0x80;这种方式来写的吗?sfr应该就是您写的不同寻址方式吧?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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