TH1=TL1= -(FOSC/12/32/BAUD)那个负号啥意思哦?一直这样用但是都...
void InitUart(){
SCON = 0x5a;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
}
一直都这样用但是不知道啥意思哦 是不是0xFF-(a)的意思啊? ahuang227 发表于 2013-5-18 18:59 static/image/common/back.gif
是不是0xFF-(a)的意思啊?
不知道啊 得研究下 负数在计算机里是用补码表示的,即原码的反码再加一,如果是8位的变量,-3在计算机里表示为:256-3 = 253。所以TH1 = TL1 = -(FOSC/12/32/BAUD)与TH1 = TL1 = 256-(FOSC/12/32/BAUD)等价。 负值不就是按补码来表示的吗~ ibichao 发表于 2013-5-18 20:18 static/image/common/back.gif
负数在计算机里是用补码表示的,即原码的反码再加一,如果是8位的变量,-3在计算机里表示为:256-3 = 253。 ...
正解!一般写的时候还是写成256-(FOSC/12/32/BAUD),到加(FOSC/12/32/BAUD)到256溢出,感觉要好理解一点。 4、6楼正解!一般:256-(FOSC/12/32/BAUD) 感觉这个东西就是计算波特率初值公式的变换转换出来的结果。
FOSC = 晶振
BAUD = 波特率
网上找点公式,然后转换一下应该就是结果了! 补码,前面几楼正解。 楼主一定是抄STC的程序了 这个是类型的处理, int i=-1(-1 的实际数据是 0XFFFF)char i=-1(0XFF)、-2(0XFE)、 -3(0XFD) 。。。。-128(0X80)
计算定时值的时候一般用
TH0 = (65536-1000)>>8;
TL0 = 65536-1000;
来表示,
而
TH0 = (-1000)>>8;
TL0 = -1000; 结果是一样的
所得出的结果均可以在KEIL 仿真查看。
补码正解,具体数值要慢慢算 TH1 = TL1 = -(FOSC/12/32/BAUD); you can think of an incrementing timer as one that starts from a negative number and generates an interrupt when it reaches 0.
The code above essentially does that and it is fairly common for such code.
However,TH1 = TL1 = -...is almost surely wrong.
The typical implementation is this:TH1 = -(FOSC/12/32/BAUD) >> 8;
TL1 = -(FOSC/12/32/BAUD); or, in case you have TH1:TL1 next to each other and in the right order:T1 = -(...);ADCs frequently allow that. 这个是AD显示的吧,那是不是要占用一个定时器呢~求解~~ 同意2楼
页:
[1]