标题: 关于单片机头文件中数据存储区地址宏定义的问题 [打印本页]

作者: 默法师    时间: 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的最低位吗?还是会被自动分配到位寻址区去?
这样定义的汇编操作又是怎么样的呢?有什么更简便的方法吗?除对存储区数据进行逻辑运算之外的。

作者: yzwzfyz    时间: 2019-4-4 13:08
你想一下:status 是不是一定是80H?
如果是:status^0 将是什么?
如果不是:status^0 又是什么?
作者: Y_G_G    时间: 2019-4-4 14:04
你这么干的目的是什么?你用的是51单片机吗?如果 是51的话,你就参考包含的头文件中的reg52.h的寄存器命名方法来命名
但51和别的单片机却是有点不同的,就是在寄存器和数据存储地址上,80H以上的地址名称它是寄存器和数据存储器共用的,也就是说0X80这个地址名称是有两个东西在用的,一个是P0端口的地址,它是0X80,另一个是数据存储器,它也是0X80,当你要对0X80这个地址进行操作的时候,它是通过寻址方式的不同来区分你是要操作寄存器还是操作数据存储器的。
既然你用C,那就应该没有理由要用汇编去操作硬件,那就没有必要用C去定义一个数据地址,那就和用汇编是一样的了,那就是用汇编的方法去用C,没意义
作者: 默法师    时间: 2019-4-8 14:45
感谢大佬们的解答!
其实我现在属于卡在汇编和C之间的感觉,经常不知道该用哪种方式去调用数据和操作数据,再加上老板汇编用习惯了经常要求我们一个寄存器掰成8个位来用,一点资源也不能浪费,于是就变成上面这种写法了,其实我也想用汇编来写啊,奈何汇编用不熟练,太长的代码我自己都绕晕了
另外,我看reg51里的写法,P0口之类对应的端口地址不都是用sfr P0=0x80;这种方式来写的吗?sfr应该就是您写的不同寻址方式吧?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1