历史上的今天
今天是:2025年01月11日(星期六)
2020年01月11日 | avr移位算法详解
2020-01-11 来源:elecfans
或许很多初学者都会被移位算法迷惑,移位算法形如 (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&TImes;2&TImes;2&TImes;2&TImes;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
史海拾趣
|
底薪 + 提成 + 分红 请Linux Wince 软硬件合作高手 行业PDA研发、销售 ARM7 ARM9 ARM11硬件平台 WINCE LINUX软件平台 QQ:1459635026 广东地区为佳。… 查看全部问答> |
|
问个无知的问题,我们都知道Windows Mobile上的安装包是CAB格式,解压后有一个setup.xml来描述 内部安装文件和注册表,但是有些第三方应用解压后看不到setup.xml,不知道是用什么工具打包的,微软的工具打包出来是有setup.xml的。 比如arcsoft的软 ...… 查看全部问答> |
|
应用产品:EchoPod型号:DL14-00罐材质:PE介质:氯气 技术参数量程:2〞-48.9〞供电电压:12-24VDC信号输出:4﹡SPST继电器触点容量:60VA, 1A标定:WebCal符合标准:RoHS级别:GP认证:CE 新鲜农产品和相关加 ...… 查看全部问答> |
|
有一块xilinx spartan 3e的开发板,就是原厂那个。因为老师又给了板子,这块闲置很久了。可以卖,也可以交换板子,卖的话,我觉得950应该可以,以交换为主吧。因为这个板子还是比较贵的,所以交换的话,估计要补差价才行。想换的就是msp430的板子, ...… 查看全部问答> |
|
以前做过一个1.0,但是其中存在着不少问题,经过改进现在发布2.3版本。。。 板子正在制作过程中。。。 板子的资源: 1. STC 89S52单片机 2. 8*8双色点阵 ,使用3颗74HC595控制 3. 8个流水灯 4.&nbs ...… 查看全部问答> |
|
有25年的工作经验的TI 电源工程师讲WEBENCH 设计工具(中文) 有25年的工作经验的TI 电源工程师讲WEBENCH 设计工具(中文) 数秒间向您展示数十亿个完整的电源供应器设计选择,这个视频将指导您如何迅速地修改设计参数,并实时审视该DC-DC电源供应器设计的性能变化,以便从系统物料成本、方案大小及效率间获得 ...… 查看全部问答> |




