TH1=TL1= -(FOSC/12/32/BAUD)那个负号啥意思哦?一直这样用但是都...

2020-01-26 12:52发布

void InitUart()
{
        SCON = 0x5a;                        
        TMOD |= 0x20;                       
    TH1 = TL1 = -(FOSC/12/32/BAUD);   
    TR1 = 1;                           
}
一直都这样用  但是不知道啥意思哦
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
woshiaokeman
1楼-- · 2020-01-27 07:22
感觉这个东西就是计算波特率初值公式的变换转换出来的结果。
FOSC = 晶振
BAUD = 波特率
网上找点公式,然后转换一下应该就是结果了!
techbaby
2楼-- · 2020-01-27 12:25
补码,前面几楼正解。
mii
3楼-- · 2020-01-27 13:33
楼主一定是抄STC的程序了
a13736925316
4楼-- · 2020-01-27 17:25
这个是类型的处理,   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 仿真查看。

360截图20130707113402968.jpg (20.91 KB, 下载次数: 0)

下载附件

2013-7-7 11:34 上传

xingyuezh
5楼-- · 2020-01-27 20:02
 精彩回答 2  元偷偷看……
millwood0
6楼-- · 2020-01-27 20:40
  1. 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,
  1. TH1 = TL1 = -...
复制代码is almost surely wrong.

The typical implementation is this:
  1. TH1 = -(FOSC/12/32/BAUD) >> 8;
  2. TL1 = -(FOSC/12/32/BAUD);
复制代码or, in case you have TH1:TL1 next to each other and in the right order:
  1. T1 = -(...);
复制代码ADCs frequently allow that.

一周热门 更多>