HeP028 发表于 2012-10-8 23:32:59

51单片机波特率公式

        //-----------------------------------------------------
        //查询波特率是否加倍
             TimerTH = 256 - (Focs/(384*2400));
             TimerTL = 256 - (Focs/(384*2400));
             P0 = TimerTH;请问为何这样算出来的值不是0xF4 而是 0x74呢?
如果直接用公式笔算是0xf4,但进过单片就就是0x74了?为何?

lmserver 发表于 2012-10-9 04:10:10

本帖最后由 lmserver 于 2012-10-9 04:11 编辑

编译器会自动转换类型
256=0X100,是双字节,如果编译器把它转为单字节就是0X00
试下这样写:
    TimerTH = 255 - (Focs/(384*2400))+1;
         

dingshidong214 发表于 2012-10-9 09:19:57

F:1111和7:0111的差别就知道问题在哪里了

HeP028 发表于 2012-10-9 11:15:34

lmserver 发表于 2012-10-9 04:10 static/image/common/back.gif
编译器会自动转换类型
256=0X100,是双字节,如果编译器把它转为单字节就是0X00
试下这样写:


其实我建立一个数组也可以解决问题就是不明白怎么回事,

谢谢你,大侠应该说的对,我试试

HeP028 发表于 2012-10-9 11:17:09

dingshidong214 发表于 2012-10-9 09:19 static/image/common/back.gif
F:1111和7:0111的差别就知道问题在哪里了

HI,能详细点吗?F :157就是7,这个能分析出什么问题呢?请赐教啊

HeP028 发表于 2012-10-9 11:21:42

lmserver 发表于 2012-10-9 04:10 static/image/common/back.gif
编译器会自动转换类型
256=0X100,是双字节,如果编译器把它转为单字节就是0X00
试下这样写:


//-----------------------------------------------------
           TimerTH = 256 - (Focs/(384*getUsersetbaudrate())) | 0x80;
           TimerTL = 256 - (Focs/(384*getUsersetbaudrate())) | 0x80;
        //-----------------------------------------------------
        P0 = TimerTH;这样就么有问题了。 | 0x80,

lmserver 发表于 2012-10-9 14:53:24

TimerTH = 255 - (Focs/(384*getUsersetbaudrate())) +1;
这样写才对.
页: [1]
查看完整版本: 51单片机波特率公式