单片机 的寄存器赋值 为 -1 是什么意思?

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:22:30
#include<ADuC834.h> //sfr定义用头文件

// Delay routine //延时用子程序
void delay(int a)
{
int length;
for(;a>0;a--)
{
length=10000;
while (length >=0)
length--;
}
}

void main(void)
{

PLLCON=PLLCON&0XF8; //CPU主频为12.58MHZ
SCON=SCON|0X50; //UART WORK IN MODE 2

RCAP2H=-1;
RCAP2L=-41; //使用定时器T2,产生9600的波特率

T2CON=T2CON|0X30; //设定定时器T2的工作方式
TR2=1; //开启定时器T2

for(;;)
{
SBUF='a'; //将要发送到串口的数据送入缓冲
for(;;)
{
if(SCON&0X02==0X02) //是否发送完毕
TI=0; //关串口接收中断
break; //退出查寻
}
delay(2); //延时
}

}

其中的RCAP2H=-1;
RCAP2L=-41;
是什么意思啊..

是不是这是补码
相当于
RCAP2H=FF;
RCAP2L=D7; ?

给寄存器赋值-1,事实上就是将寄存器各位设为“1”,因为-1的补码就是全部是“1”。

RCAP2H、RCAP2的最高位是1。
实际上不是负数,这个写程序的估计是个不愿意让人读懂他程序的人,他是故意搅和的。对MCU的控制寄存器赋值,目的就是针对某个控制位赋值,从而实现某个控制功能。

比如 RCAP2L=-41;
实际就是 RCAP2L=0xA9;
我想他是故意把0xA9写成-41的。

你试试,效果应该一样。

负数的补码是:取反加1
00000001取反为11111110
加1为11111111即0XFF
不同的编译器可能有所差异。

这就是补码的形式赋值,你说的不错