lllll 发表于 2009-10-16 18:24:24

在马潮的atmega16书中,有个问题请教

在USART那章中
设置波特率
UBRRH=(unsigned char)(baud>>8);
UBRRL=(unsigned char)(baud);
我的问题就是baud是12位,
第一句右移8位是取高四位
第二句为什么是12位呢?应该是低8位啊??????????????????????????????????

machao 发表于 2009-10-16 18:56:20

打那么多的问号是什么意思?

学过C语言程序设计的课程吗?手边应该有本C的参考书把,那么请你看书找这些问号的答案。

char是什么数据类型,几位?那么(unsigned char)(baud); 得到什么数?

yajira 发表于 2009-10-16 19:19:54

哈哈哈哈, 的确,的确, 就好像你给PORTA口赋一个Int32的数值其实也可以的

lllll 发表于 2009-10-16 20:35:48

#include"reg52.h"
#define BAUD_SETTING9600
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)(BAUD_SETTING)
void main()
{
unsigned char a,b;
a=BAUD_H;
b=BAUD_L;
while(1);
}

我用这个程序测试过了,的确第二句是取低八位,不过用关键字来取数值范围,我倒不常见,算长见识了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

machao 发表于 2009-10-17 17:27:24

在网上找一下,什么叫“类型显式强制转换”,有什么规律。这个不是我发明创造的。

nuno 发表于 2009-10-27 14:54:08

LZ拿本谭大爷的书 翻到第二章,里面有一节专门介绍运算符看看就清楚了

machao 发表于 2009-10-27 17:16:56

为PC编写C代码的,主要是碰到低到高的转换(8转换成16或32位),而且是隐式转换,在表达式里(由编译器)自动完成转换。

而为单片机编写C代码,由于RAM资源和提高效率,通常尽量使用小的变量,这是就需要使用“类型显式强制转换”的方法了。

0712 发表于 2009-10-27 17:18:51

LZ是外行

qiuxiangkai 发表于 2009-10-29 19:14:49

真没礼貌和教养,你当你是谁?鄙视之

stm32user 发表于 2009-10-29 19:20:49

楼上没必要说那么明白,让他出社会后慢慢学习做人

lllll 发表于 2009-10-30 09:06:05

真是好笑,一个已经解决的问题,竟然还有这么多人回复,首先我要说明一下,我不是不懂类型转换,我所说的不常见是指这个12位的数加个unsigned char ,就取后面8位,因为我一般看见的是定义一个类型如int s,float t,然后s=(int)(t....)这种格式,况且那个式子有2个uchar,第一个没问题,我怎么晓得第二个暗藏玄机,没听过思维定式吗?一时想不出来也很正常,然后听别人一说,就明白了。对于那些言语恶劣的人,难道你们就没提过问题?尤其对于那种积分一点点,在这指手划脚的人,你们有本事就去帮别人解决问题,少在这帖子里唧唧歪歪。本来不想说这么多的,登陆后打开我的主题,发现这帖置顶,打开后看见骂声一片,才写的。。

lin638 发表于 2009-10-30 11:37:12

同情楼上的遭遇,以后有问题还是不要在这论坛上讨论马老的书。因为马老的书是给高手们看,像你我这类入门级(他们觉得)不单得不到鼓励。还会受到打击

longfeixue 发表于 2009-10-30 14:22:41

我能理解LZ的,对于没到高手水平的人来说,他遇到问题实在想不通身边又没有其他人可帮助时,才来论坛里问问的,因为感觉论坛里有真正热心指教的高手存在。赶快加油努力啊

rayingpx 发表于 2009-11-1 14:09:19

“尤其对于那种积分一点点,在这指手划脚的人,你们有本事就去帮别人解决问题,少在这帖子里唧唧歪歪。”楼主不要认为积分一点点的就不是高手,不要忘了,真人不露相啊!这里藏龙卧虎的有的是。像我等初学者向别人请教时基本的礼貌还是要有的,别人也没有义务解答你的问题是吗?
页: [1]
查看完整版本: 在马潮的atmega16书中,有个问题请教