微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 学习总结

学习总结

时间:11-28 来源:互联网 点击:
二进制数即可。至于二进制到16进制的转化也是如此,倒过来就是了。反正记着,4位二进制数对应一位十六进制数。
27. 字符类型数据(uint8)在与整数运算时都是以ASII码形式或十进制数存在的。若uint8 型变量里面放的是字母或2个BCD码(8421),8位二进制数,在于整数进行运算时可以看出是ASII码或十进制数的运算。
28. 别误把if 语句当成循环语句了,if语句在执行时先判断括号内的语句是否成立,成立的话就执行{}里的内容(if语句嵌套的内容)。如果成立那么执行{}里的内容,执行完后不再进行一次if的判断,而是执行下一语句,即便判断仍然成立。主要还是要说明if不是循环语句,只判断一次,无论成立与否,在执行完所需内容后就直接执行下一语句。
29. 关于取地址符号&的使用,变量本来就表示地址了,那么就不能再加&这样会报错。特殊例子是数组名a,它本身就代表第一个元素的首地址。但可以使用取地址符号,且不会报错。加去地址符号后&a表示的含义发生了变化而是代表该数组的首地址,数值上似乎与a的相同,但含义却是有差别的。
30. *p+1等价于(*p)+1,因为*优先级高于+;*p++等价于*(p++),因为++优先级高于*;
&a+1等价于(&a)+1.不能出现&(a+1)的情况,系统不认同,会报错!
31. 对于数组 int a[4]={1,2,3,4}; 其中 a+1表示第二个元素的首地址(第一个字节的地址)。而(int)a+1表示第一个元素第二个字节的地址。
32. 关于结构体变量命名。如图

这种命名方法在KEIL下会报错,然而在VC++下却没问题。当你把code改成其他字母(不要与原来的code一样就行),你会发现都没问题。可以看出并不是命名的大小写出问题。原因是KEIL不认同以结构体小写字母来命名(这里是指全小写),当你把其中一个字母该为大写时就没问题了。如把最后一行改成 CODE Code 让变量名的第一个字母为大写就行了。
33. 单片机要进行通信时要注意先关掉所有中断(EA=0),在通信结束后才打开(EA=1).由于通信时通常要遵守时序,而中断一旦被触发便会打乱时序,使得传输数据失败或者异常!注意通信中时序是非常重要的!
34. 在通信过程中需要注意,比如在传输一个字节数据时是一位一位地传让后凑够8位构成一字节的。要从低位开始传还是高位开始传,要传低位开始接还是高位开始接。这些不能处理好的话会直接影响到结果。也就是说发送端和接收端要保持一致,有两种方式,一是从低位开始发(发送方),然后从低位开始接(接收方)。另一种就是从高位开始发(发送方),然后从高位开始接(接收方)。还有一个字节接收和发送的方向也要一致,只有这些保证了,才能保证信息准确传输。比如:在UART通信中,如果你要用单片机IO口模拟UART通信就需要注意这些,一般采取UART通信的统一标准,从低位开始传输。这样跟标准UART器件就能很容易接上,不需要再作处理。当两个通信器件都接标准UART接口时,那么就不用考虑这里了,这个在传输过程中他们自己会进行处理,我们无需考虑。只要把字节的排序弄好就行了。位的处理他们会自己完成。

35. 定时器1工作在模式1时的溢出是指在TH1=255(0xFF),TL1 =0的情况下,TL1达到255再 +1 就溢出了,此时溢出标志位TF1=1,需要清零才能让定时器继续工作。否则不定时,而是处于等待状态,等待TF1=0,然后才开始定时。要弄清什么时候才会溢出!
还有就是TL1每加1表示已经定时一个机器周期,在12T/11.0592MHz的单片机中机器周期为12/11059200 s 大约为1us.也就是说TL1每加1表示已经定时1us 。而TH1加1就表示已经经历了256个机器周期。这里说的+1并不会使定时器溢出,只有TH1达到255了那么接下来的256个机器周期后就会溢出了!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top