avr单片机c语言程序设计中的位操作

avr单片机c语言程序设计中的位操作

ID:19969443

大小:142.00 KB

页数:3页

时间:2018-10-08

avr单片机c语言程序设计中的位操作_第1页
avr单片机c语言程序设计中的位操作_第2页
avr单片机c语言程序设计中的位操作_第3页
资源描述:

《avr单片机c语言程序设计中的位操作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、动手学AVR单片机十二、AVR单片机C语言程序设计中的位操作在标准C语言的的教材中,对于位运算的操作是基本不涉及的,但是在单片机系统的程序中,需要经常操作各类以字节为单位的寄存器,而这些寄存器通常都是以二进制中的位为控制单位的数据组合。往往一个8位寄存器中的每一位都有各自的控制对象,例如端口B的方向寄存器DDRB,如下图所示  它实际上控制着PB口的8个端口PB0-PB7的方向,也就是说它的每一位都控制一个端口的方向,如果我们要把端口PB0-PB3设置为输出口,而把PB4-PB7设置为输入口,在不用位运算符的情况下,我们可以直接使用赋值语句DDRB=0x0f来实现,这样是完全可以实现的。  但

2、是如果出现下面的情况:在程序中PB口的8位端口的状态本来是1、3、5、7为输入。0、2、4、6为输出(即DDRB=0x55),接下来要将PB口的第1位设置为输出,其它端口的状态不变,然后又要将第2位设置为输入,其它端口的状态不变。该怎么实现?也许我们仍然可以使用赋值语句来实现,比如DDRB=0x55;接下来设置DDRB=0x57;然后再设置DDRB=0x53;首先要肯定的是,这种做法是绝对正确的。但是我们可能有没有注意到,在改变其中一位的值的时候,我们同时还要考虑其它7位的状态,并且要小心翼翼的避免不小心改变了其它位的值。  那么有没有一种方法,可以简单的实现修改某一位的状态,同时不会改变其它

3、位的状态呢?  这就牵出了单片机C语言程序设计中的位运算的概念。  我们来看这个语句:DDRE

4、=(1<

5、define   PE5      5#define   PE4      4#define   PE3      3#define   PE2      2#define   PE1      1#define   PE0      0   可以看出,实际上PE5=5;那么1<

6、=(1<

7、(1<

8、”表示的是“或”操作DDRE是端口E的方向寄存器,在iom64.h中定义为:#defineDDRE     _SFR_IO8(0x02

9、);它实际上是定义了一个标识符,这个标识符对应数据存储区RAM中的某个地址,这个我们暂且不去深究。我们还是回过头来看DDRE=DDRE

10、(1<

11、设置为1)。   现在我们来看一下从语言中有几种位运算符:移位运算符:左移<<,右移>>与运算符:&或运算符:

12、取反运算符:~异或运算符:^    就这些了,总共只有6中位运算符。现在我们来看一下这些运算符都起什么作用;左移运算符:表达形式为x<

13、运算结果为0b00000010n=2时,x<=8以后,x的值就一直是0了,这是因为x是一个只有8位的整形变量,它的最大二进制长

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。