头文件为啥没有定义p0到p2寄存器里的位

头文件为啥没有定义p0到p2寄存器里的位,第1张

头文件定义了。

1、头文件里面定义了P0,P1,P2,而没有定义位,所以,你的程序在开始时,就要进行位亮陵定义sbit,而不用对口进行定义。

2、在头文件里,明确的将P0到P2映射到对应的寄存器地址上,P0到P2就变成一个代号,也就是说,P0到P2已经登记在册,只要我们在文态拆件中使用它,编译器知道它指的是什么东西。以上是头文件为啥没敬闭戚有定义p0到p2寄存器里的位的原因。

位地址在汇编语言中,只能直接寻址,不支持间接寻址。那么,在 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

}

一个一个渗咐回答你吧:

1)

‘u’

的意义

-----无符号整形;

2)

(0*0x800u)

(1*0x800u)

等如何解释丛握纯-----ADC10CTL0是一个16位的寄存器,ADC10SHTx占

其中的Bit11

Bit12.

ADC10SHTx

为01(也就是

ADC10SHT_1)时,

ADC10CTL0寄存器的第11位为0,第12位为1,

此时整个寄存器的值就是

0x0800,

ADC10SHTx

为10(也就是

ADC10SHT_2)时,

ADC10CTL0寄存器的第11位为1,第12位为0,

此时整个寄存器的值就是

0x1000,也就是

把0x800左移了一位;

2*0x800

同理,可理解0*0x800u

3*0x800u;

3)

ADC10SHTx

的值决定皮腊

ADC10的采样和保持时间(sample-and-hold

time)。4

×

ADC10CLKs

意思是采样和保持时间为4个ADC时钟周期


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12273696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存