在马潮的atmega16书中,有个问题请教
在USART那章中设置波特率
UBRRH=(unsigned char)(baud>>8);
UBRRL=(unsigned char)(baud);
我的问题就是baud是12位,
第一句右移8位是取高四位
第二句为什么是12位呢?应该是低8位啊?????????????????????????????????? 打那么多的问号是什么意思?
学过C语言程序设计的课程吗?手边应该有本C的参考书把,那么请你看书找这些问号的答案。
char是什么数据类型,几位?那么(unsigned char)(baud); 得到什么数? 哈哈哈哈, 的确,的确, 就好像你给PORTA口赋一个Int32的数值其实也可以的 #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);
}
我用这个程序测试过了,的确第二句是取低八位,不过用关键字来取数值范围,我倒不常见,算长见识了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 在网上找一下,什么叫“类型显式强制转换”,有什么规律。这个不是我发明创造的。 LZ拿本谭大爷的书 翻到第二章,里面有一节专门介绍运算符看看就清楚了 为PC编写C代码的,主要是碰到低到高的转换(8转换成16或32位),而且是隐式转换,在表达式里(由编译器)自动完成转换。
而为单片机编写C代码,由于RAM资源和提高效率,通常尽量使用小的变量,这是就需要使用“类型显式强制转换”的方法了。 LZ是外行 真没礼貌和教养,你当你是谁?鄙视之 楼上没必要说那么明白,让他出社会后慢慢学习做人 真是好笑,一个已经解决的问题,竟然还有这么多人回复,首先我要说明一下,我不是不懂类型转换,我所说的不常见是指这个12位的数加个unsigned char ,就取后面8位,因为我一般看见的是定义一个类型如int s,float t,然后s=(int)(t....)这种格式,况且那个式子有2个uchar,第一个没问题,我怎么晓得第二个暗藏玄机,没听过思维定式吗?一时想不出来也很正常,然后听别人一说,就明白了。对于那些言语恶劣的人,难道你们就没提过问题?尤其对于那种积分一点点,在这指手划脚的人,你们有本事就去帮别人解决问题,少在这帖子里唧唧歪歪。本来不想说这么多的,登陆后打开我的主题,发现这帖置顶,打开后看见骂声一片,才写的。。 同情楼上的遭遇,以后有问题还是不要在这论坛上讨论马老的书。因为马老的书是给高手们看,像你我这类入门级(他们觉得)不单得不到鼓励。还会受到打击 我能理解LZ的,对于没到高手水平的人来说,他遇到问题实在想不通身边又没有其他人可帮助时,才来论坛里问问的,因为感觉论坛里有真正热心指教的高手存在。赶快加油努力啊 “尤其对于那种积分一点点,在这指手划脚的人,你们有本事就去帮别人解决问题,少在这帖子里唧唧歪歪。”楼主不要认为积分一点点的就不是高手,不要忘了,真人不露相啊!这里藏龙卧虎的有的是。像我等初学者向别人请教时基本的礼貌还是要有的,别人也没有义务解答你的问题是吗?
页:
[1]