单片机串口通信,TH1,TL1的初值为啥是负数?负数是什么意思?

sarahchou 2010-06-23 02:17:03

void init(void)
{
TMOD=0x20; //计数器1工作在方式2;
SCON=0X50; //串口控制设置,串口工作在方式1
PCON=0x80; //波特率设置为2倍
TL1=TH1=(-12000000/12/32/9600); //计数器1赋初值
EA=0; //禁止中断
TR1=1; //计数器以开始工作
}






不明白,为啥TL1,TH1会是负数呢?为什么不是256-()呢?


如果是负数,这个通信波特率又是多少呢?

负数,在什么时候产生中断呢?
...全文
1026 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenshunxiao 2010-06-24
  • 打赏
  • 举报
回复
看来楼上两位高手已经给出答案了,建议楼主了解下单片机负值时的二进制编码就能看懂这程序了
zb213015 2010-06-23
  • 打赏
  • 举报
回复
256 =单字节的0
所以负数就表示 256-。。。
lbing7 2010-06-23
  • 打赏
  • 举报
回复
我想应该是这样

256的二进制是多少?

1 0000 0000

对于八位来说为0

而负值相当于0 - (正值)

所以,把减法计算丢给了编译器
x409402425 2010-06-23
  • 打赏
  • 举报
回复
我感觉你上面程序错啦! TL1=TH1=(-12000000/12/32/9600); //计数器1赋初值 (错了)
应该是TH1=TL1=256-[(2^1)*12*(10^6)/(9600*32*12)] 你程序中的波特率为9600b/s吧?

你应该去查下手册,现弄明白从波特率到初值的转换。

初值=256-【fosc*(SMOD+1)/(384*波特率)】(定时器1模式2,串行口1)

我的理解。
sarahchou 2010-06-23
  • 打赏
  • 举报
回复
难道没人知道。。。
sarahchou 2010-06-23
  • 打赏
  • 举报
回复
自己先顶一下。。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧