⑴ 51单片机C语言工作寄存器问题
头文件里定义了PSW
当PSW中的RS1、RS0发生变化时对应的工作区发生相应的变化,对应关系为:
00:工作区0,R0~R7对应地址00H~07H
01:工作区1,R0~R7对应地址08H~0FH
10:工作区2,R0~R7对应地址10H~17H
11:工作区3,R0~R7对应地址18H~1FH
RS1/RS0是靠软件来设置的,你可以根据不同情况自由设置,一般中断时用得较多,避免影响正常流程下的工作寄存器值。
⑵ C语言中,如何定义单片机的寄存器
位地址在汇编语言中,只能直接寻址,不支持间接寻址。那么,在 C 语言中,也就不能用指针来操作。所以不能定义单片机的寄存器。
访问寄存器可以通过直接地址引用来完成。
例如52单片机的寄存器有4组,分别为00H-07H,08H-0FH,10H-17H,18H-1FH,各组均8字节,要结合程序状态字寄存器PSW(D0H)中的RS0,RS1的组合来确定是哪一组。
可以定义一个访问Rn的函数
typedefunsignedcharuchar;
uchardacRn(ucharn)//n=[0..7]
{
uchardata*p;
n+=(PSW&0x18);//PSW7:CY6:AC5:F04:RS13:RS02:OV1:F10:P
//本来要右移三位变为0-3,但由于是8个一组要乘以8(左移3位),所以直接加上寄存器编号就可以了
return*(uchardata*)n;
}
⑶ 单片机有寄存器c吗
有,也叫位寄存器CY,是PSW中的一个位,用于进位标志,位寻址
⑷ 在单片机c语言中断服务中为什么需要指定寄存器组
可以加快程序运行速度。因为指定了寄存器组,中断时寄存器不用入栈,这样速度就快多了。
⑸ 单片机的实质,就是利用c语言来对 寄存器的操作
c语言也好,汇编语言也好,也只不过是一种编程语言罢了,真正的应用是通过用户编写的程序来控制单片机完成各种工作,也就是各种操作,来实现单片机对各种设备的控制工作。因此,你说的“对寄存器的操作”只是一些基本的操作而已,或者是一些基本的控制方式而已,而真正的控制对象是外部配置的设备,比如简单的设备有:数码管用来显示的设备,液晶屏也是显示的设备,按键或者叫键盘,是输入设备,以及各种传感器等,根据需要控制的设备种类太多了。
⑹ 51单片机中如何用C语言自定义一个寄存器,求大神帮忙
寄存器是CPU内部重要的数据存储资源,主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间,也就是说CPU操作寄存器比操作内存快(寄存器是直接存取,而内存是寻址存取)。
汇编比C语言效率高,经常操作寄存器也是一个原因吧。
C语言可以把变量定义为寄存器类型的,将数据直接存放在CPU的寄存器中,使用关键字register定义变量。
例如register a=123;定义a为寄存器类型变量。
使用register定义的变量尽可能存放到寄存器中,但不绝对。
⑺ c语言单片机寄存器是怎么操作的
可以说是对寄存器的操作吧,不过不只是c语言,汇编语言也可以。。。。。其实单片机对寄存器的操作不外乎是采集外部信息,然后在内部处理后,再通过寄存器输出控制信息,对外部信息作出相应的反应,其实单片机就相当于计算机。。。。
⑻ 请问单片机用c语言编程,如何对中断使用的寄存器进行分配
那些通用寄存器,c编译器会自动分配的,那些特殊功能寄存器,你也改不了,只能按手册的定义进行读写
⑼ 单片机c语言编程怎么给内部的寄存器赋值
void init(void)
{
TCON &= 0xCF; // ﹍てTimer0
TMOD &= 0xF0;
TMOD |= 0x00;
TH0 = TL0 = 0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
就是这样子赋值就可以了,上面TCON、TMOD、TH0这几个都是寄存器,其它三个就其它寄存器中的位。