C语言中,如何定义单片机的寄存器

例如已知寄存器的地址为0080H,C语言中如何操作这个寄存器。... 例如已知寄存器的地址为0080H,C语言中如何操作这个寄存器。 展开
 我来答
僪蔼呼瑞云
2019-02-26 · TA获得超过4085个赞
知道大有可为答主
回答量:3192
采纳率:31%
帮助的人:231万
展开全部
1.
位地址在汇编语言中,只能直接寻址,不支持间接寻址。那么,在
C
语言中,也就不能用指针来操作。所以不能定义单片机的寄存器。
2.
访问寄存器可以通过直接地址引用来完成。
例如52单片机的寄存器有4组,分别为00H-07H,08H-0FH,10H-17H,18H-1FH,各组均8字节,要结合程序状态字寄存器PSW(D0H)中的RS0,RS1的组合来确定是哪一组。
可以定义一个访问Rn的函数
typedef unsigned char uchar;
uchar dacRn(uchar n) //n=[0..7]
{
uchar data *p;
n += (PSW & 0x18); //PSW 7:CY 6:AC 5:F0 4:RS1 3:RS0 2:OV 1:F1 0:P
//本来要右移三位变为0-3,但由于是8个一组要乘以8(左移3位),所以直接加上寄存器编号就可以了
return *(uchar data *)n;
}
驹孤简鹏涛
2019-11-13 · TA获得超过3801个赞
知道大有可为答主
回答量:3113
采纳率:24%
帮助的人:468万
展开全部
#define
reg_name
0x0080
//前面定义寄存器名称
....
...
...
#define
name((pointer_type
*)
reg_name
)//后面变成指针方便使用
根据需要看是否需要加volatile~~~
还要看你用什么样的编译器~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式