avr移位算法详解

或许很多初学者都会被移位算法迷惑,移位算法形如 (1《《x)这样的形式,高手写程序时,习惯用移位算法来写出各个寄存器的使用。比如下面一段是avr 的usart的初始化代码。
ucsrc = (1《《ursel)|(1《《ucsz1)|(1《《ucsz0);
ucsr0b = (1《《rxcie)|(1《《txcie)|(1《《rxen)|(1《《txen); // rxcie=1;txcie=1;udreie=0;rxen=1;txen=1
这样的写法对高手是福,这些代码里面说明了操作了寄存器的哪些位,能够看出它的操作的意义;对新手确是祸害,因为新手看不懂这样的程序。
什么是移位算法:
如:a = (1《《2),1写成二进制就是0000 0001,这个一左移2位就是0000 0100,所以得到的数a为0000 0100,即0x04。
再如:b = (2《《4),2写成二进制就是0000 0010,这个一左移4位就是0010 0000,所以得到的数b为0010 0000,即0x20。
上面两个移位算法都是正确的,第一种写法,表示第三位为1其余都是0的数,数的时候是从0数起的,再比如(1《《0)表示的是0000 0001,(1《《7)表示的是1000 0000,但是第二种写法没有没有这种意义,移位也用于乘除法,左移一位乘以2,右移移位除以2,上面的第二种写法2左移四位得到的数是2×2×2×2×2=32,也就是上面的0x20。
我们再来看上面的这句话:ucsrc = (1《《ursel)|(1《《ucsz1)|(1《《ucsz0);
ucsrc是一个和串口通讯有关的一个八位寄存器,他的每一位都有特殊的定义,我们通过查数据手册可以看到,如下的内容。
我们在程序中包含的头文件iom16v.h类似的文件会有#define ursel 7 这样的定义,1《《ursel即是wei7,1《《ucsz1选择位2,1《《ucsz0选择位1,整句话ucsrc = (1《《ursel)|(1《《ucsz1)|(1《《ucsz0);的效果就是让ucsrc的位七,位二,位一为高,其他都为低,然后在数据手册里面你可以看到各个位的作用。ucsrc = (1《《7)|(1《《2)|(1《《1) 即ucsrc = 1000 0110

FIR与IIR滤波器的区别与特点比较
Alif与Telit联手推出边缘AI相机参考设计
YXC晶振为音频调节器服务提供解决方案
LiteBee编程无人机教程分享 ,小白从入门到精通必备!
区块链的冰与火是怎样的
avr移位算法详解
2013年国际CES将揭晓移动联网领域最新的无线技术和发展趋势
特斯拉的双电机、全轮驱动的Model 3 Performance即将面世
LED透明屏是完全透明的吗 它的通透率和透光率有多少呢
智慧农业气象站的功能特点
中芯国际被美国出口管制对中国芯片行业有哪些影响
RFID的分类、应用及使用案例
高通芯片体积大幅减小 智能手机有望进一步瘦身
在ZedBoard下SPI接口和ARM处理器端实现以太网远端传输的设计
microSD/micro-SIM组合式连接器外形更薄,尺寸更小
Pure Storage开创行业先河:以全闪存解决方案满足各种存储需求
安徽来安三湾30MW风电项目获批
Veritone Developer应用程序已全面上市
优质功率接续器的制作
CPU概念及运作原理