久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

AVR移位算法詳細解釋 (1<
作者:liht1634   來源:轉自liht1634   點擊數:  更新時間:2014年07月28日   【字體:

很多初學者都會被移位算法迷惑,移位算法形如(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

相關文章

主站蜘蛛池模板: 免费高潮视频95在线观看网站 | 日韩在线观看视频一区 | 一区二区视频 | 中文精品视频 | 日韩午夜 | 91精品国产91综合久久蜜臀 | 久久久久亚洲国产| www精品美女久久久tv | 国产毛片毛片 | 日韩和的一区二区 | 国产午夜精品久久久 | 欧美日韩在线一区二区三区 | 欧美一级网站 | 91原创视频在线观看 | 精品日韩一区 | 日韩成人中文字幕 | 精品久久久久一区 | 国产精品国产精品国产专区不卡 | 91精品入口蜜桃 | 国产精品日韩欧美一区二区三区 | 久久精品 | 中文av字幕| 日本免费一区二区三区四区 | 久久亚洲春色中文字幕久久久 | 久久婷婷国产香蕉 | 国产成人精品一区二区三区 | 欧美一级免费看 | 久久毛片| 青青草在线视频免费观看 | 91在线精品视频 | 亚洲人人 | 日韩一级| 国产精品日韩一区二区 | 国产在线观看网站 | 四虎精品在线 | 一本一道久久a久久精品蜜桃 | 欧美国产亚洲一区二区 | 日韩a视频| 国内自拍真实伦在线观看 | 欧美精品一区三区 | 综合网中文字幕 |