搜索
bottom↓
回复: 14

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

[复制链接]

出0入0汤圆

发表于 2013-5-18 18:53:13 | 显示全部楼层 |阅读模式
void InitUart()
{
        SCON = 0x5a;                        
        TMOD |= 0x20;                       
    TH1 = TL1 = -(FOSC/12/32/BAUD);   
    TR1 = 1;                           
}
一直都这样用  但是不知道啥意思哦

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-5-18 18:59:32 | 显示全部楼层
是不是0xFF-(a)的意思啊?

出0入0汤圆

 楼主| 发表于 2013-5-18 19:06:02 | 显示全部楼层
ahuang227 发表于 2013-5-18 18:59
是不是0xFF-(a)的意思啊?

不知道啊 得研究下  

出0入4汤圆

发表于 2013-5-18 18:53:14 | 显示全部楼层
负数在计算机里是用补码表示的,即原码的反码再加一,如果是8位的变量,-3在计算机里表示为:256-3 = 253。所以TH1 = TL1 = -(FOSC/12/32/BAUD)与TH1 = TL1 = 256-(FOSC/12/32/BAUD)等价。

出0入8汤圆

发表于 2013-5-18 20:41:55 | 显示全部楼层
负值不就是按补码来表示的吗~

出70入0汤圆

发表于 2013-5-29 14:59:09 | 显示全部楼层
ibichao 发表于 2013-5-18 20:18
负数在计算机里是用补码表示的,即原码的反码再加一,如果是8位的变量,-3在计算机里表示为:256-3 = 253。 ...

正解!一般写的时候还是写成256-(FOSC/12/32/BAUD),到加(FOSC/12/32/BAUD)到256溢出,感觉要好理解一点。

出0入0汤圆

发表于 2013-5-29 17:44:04 | 显示全部楼层
4、6楼正解!一般:256-(FOSC/12/32/BAUD)

出0入0汤圆

发表于 2013-7-6 22:58:21 | 显示全部楼层
感觉这个东西就是计算波特率初值公式的变换转换出来的结果。
FOSC = 晶振
BAUD = 波特率
网上找点公式,然后转换一下应该就是结果了!

出20入70汤圆

发表于 2013-7-6 23:30:04 | 显示全部楼层
补码,前面几楼正解。

出0入0汤圆

发表于 2013-7-6 23:33:21 | 显示全部楼层
楼主一定是抄STC的程序了

出0入0汤圆

发表于 2013-7-7 11:34:53 | 显示全部楼层
这个是类型的处理,   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 仿真查看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-7 16:22:44 | 显示全部楼层
补码正解,具体数值要慢慢算

出0入0汤圆

发表于 2013-7-8 00:05:53 | 显示全部楼层
  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.

出0入0汤圆

发表于 2013-10-25 20:06:36 | 显示全部楼层
这个是AD显示的吧,那是不是要占用一个定时器呢~求解~~

出0入85汤圆

发表于 2013-10-25 20:42:12 | 显示全部楼层
同意2楼
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 06:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表