完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
1个回答
|
|
|
很多初学者都会被移位算法迷惑,移位算法形如(1《《X)这样的形式,高手写程序时,习惯用移位算法来写出各个寄存器的使用。比如下面一段是AVR的USART 的初始化代码。
UCSRC =(1《《URSEL)|(1《《UCSZ1)|(1《《UCSZ0); UCSR0B =(1《《RXCIE)|(1《《TXCIE)|(1《《RXEN)|(1《《TXENRXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1 这样的写法对高手是福,这些代码里面说明了操作了寄存器的哪些位,能够看出它的操作的意义;对新手确是祸害,因为新手看不懂这样的程序。 回到开始的地方,解释一下,什么是移位算法: 如:A = (1《《2),1写成二进制就是00000001,这个一左移2位就是0000 0100,所以得到的数A为0000 0100,即0x04。 再如:B = (2《《4),2写成二进制就是00000010,这个一左移4位就是0010 0000,所以得到的数B为0010 0000,即0x20。 上面两个移位算法都是正确的,第一种写法,表示第三位为1其余都是0的数,数的时候是从0数起的,再比如(1《《0)表示的是00000001,(1《《7)表示的是10000000,但是第二种写法没有没有这种意义,移位也用于乘除法,左移一位乘以2,右移移位除以2,上面的第二种写法2左移四位得到的数是2×2×2×2×2=32,也就是上面的0x20。 我们再来看上面的这句话:UCSRC =(1《《URSEL)|(1《《UCSZ1)|(1《《UCSZ0); UCSRC是一个和串口通讯有关的一个八位寄存器,他的每一位都有特殊的定义,我们通过查数据手册可以看到,如下的内容。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
3038 浏览 0 评论
800浏览 1评论
1048浏览 0评论
823浏览 0评论
1005浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:58 , Processed in 0.619157 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1322
