Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1265805
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类:

2011-02-25 11:48:39


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-()呢?

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

负数,在什么时候产生中断呢?

================================================================
回复于:2010-06-23 14:45:22
我感觉你上面程序错啦! 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)

  我的理解。

================================================================
回复于:2010-06-23 15:06:15
我想应该是这样

256的二进制是多少?

1 0000 0000

对于八位来说为0

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

所以,把减法计算丢给了编译器

================================================================
回复于:2010-06-23 15:09:09
256 =单字节的0
所以负数就表示 256-。。。
回复于:2010-06-24 08:07:59
看来楼上两位高手已经给出答案了,建议楼主了解下单片机负值时的二进制编码就能看懂这程序了
阅读(1518) | 评论(1) | 转发(0) |
0

上一篇:进程的创建

下一篇:为什么需要系统调用

给主人留下些什么吧!~~

chinaunix网友2011-03-05 13:17:53

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com