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

Python010

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

位地址在汇编语言中,只能直接寻址,不支持间接寻址。那么,在 C 语言中,也就不能用指针来操作。所以不能定义单片机的寄存器

访问寄存器可以通过直接地址引用来完成。

例如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

}

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