keil51中如何用C语言定义寄存器的地址并给地址赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil51中如何用C语言定义寄存器的地址并给地址赋值相关的知识,希望对你有一定的参考价值。

比如STC12C5628AD转换的特殊功能寄存器ADC_CONTR的地址是C5H,现在想把这个地址赋值为0x80,用C语言怎么编写,谢谢啦
就是把0x80这个值赋给特殊功能寄存器ADC_CONTR的地址是C5H,应该怎么编写定义地址并赋值的程序呢

KeilC51中定义寄存器变量的方法如下:

1、特殊功能寄存器的定义:
sfr和sfr16,比如:
sfr P1=0x90;

sfr16 T2=0xcc;
2、普通寄存器变量定义:
使用DBYTE和XBYTE来实现,比如
unsigned char temp=XBYTE[0x1000];//这是访问外部地址的语句,也可以是外部IO口地址
unsigned char temp=DBYTE[0x40];//这是将内部寄存器40H定义为变量temp
参考技术A sfr ADC_CONTR= 0xc5;
寄存器的地址在头文件里都有,你自己重新赋值会造成重复定义啊
赋值时直接给值就可以了
ADC_CONTR = 0x80;本回答被提问者采纳
参考技术B 你可以去下个头文件,头文件里面有寄存器的定义
#include "STC12C5628AD.H"//倒入头文件
ADC_CONTR = 0x80;
参考技术C sbit ADC_CONTR=0XC5;
main()

ADC_CONTR=0x80;
参考技术D 我建议你去败笔网络安全小组那学习C语言吧,那里有很多的教程可以免费下载看的

参考资料:败笔网络安全小组

关于Keil C关键字xdata和data的问题

1.xdata表示这是一个外部RAM地址内的数据,数据最终将被保存至外部RAM的某个地址单元中;
但是,外部RAM只能通过寄存器间接寻址来访问,也就是说,其地址需要保存在内部RAM中(其实或许是SFR中,8位地址一般是R0、R1,16位地址一般通过DPTR间址)
这里,DPTR里保存的内容就相当于指向外部RAM单元的指针了…… 所以,用了内部数据类型(data)的指针,和外部数据类型(xdata)
2. 这里变量pAddress应该是指针型变量,所以给pAddress赋值应是外部地址, *pAddress才是在外部RAM地址的内容,因此它的数据类型是xdata(换句话说,pAddress是指针,*pAddress是指针指向的数据)

以上是关于keil51中如何用C语言定义寄存器的地址并给地址赋值的主要内容,如果未能解决你的问题,请参考以下文章

keil2编51单片机程序c 指针赋值提示重复定义,怎么解决

keil中 如何向指定地址写入数据

keil C51 中 为啥用XBYTE[0xC8000]读不进值呢

keil4 我写了一个起始地址不是0x8000000 的程序怎么仿真?

c语言中sbit的意思是?

5 . 如何用c语言封装寄存器