单片机 的寄存器赋值 为 -1 是什么意思?
#include<ADuC834.h>//sfr定义用头文件//Delayroutine//延时用子程序voiddelay(inta){intlength;for(;a>...
#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; ? 展开
// 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; ? 展开
4个回答
展开全部
RCAP2H、RCAP2的最高位是1。
实际上不是负数,这个写程序的估计是个不愿意让人读懂他程序的人,他是故意搅和的。对MCU的控制寄存器赋值,目的就是针对某个控制位赋值,从而实现某个控制功能。
比如 RCAP2L=-41;
实际就是 RCAP2L=0xA9;
我想他是故意把0xA9写成-41的。
你试试,效果应该一样。
实际上不是负数,这个写程序的估计是个不愿意让人读懂他程序的人,他是故意搅和的。对MCU的控制寄存器赋值,目的就是针对某个控制位赋值,从而实现某个控制功能。
比如 RCAP2L=-41;
实际就是 RCAP2L=0xA9;
我想他是故意把0xA9写成-41的。
你试试,效果应该一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
负数的补码是:取反加1
00000001取反为11111110
加1为11111111即0XFF
不同的编译器可能有所差异。
00000001取反为11111110
加1为11111111即0XFF
不同的编译器可能有所差异。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就是补码的形式赋值,你说的不错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询