网站大量收购独家精品文档,联系QQ:2885784924

AVR_C語言编程的小技巧-IO口置位.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR_C語言编程的小技巧-IO口置位

AVR C语言编程的小技巧-IO口置位 给单片机IO口置位是编程用的比较多的操作,这是我在学习C语言编程中的一点小小心得,希望大家觉得有用! AVR 单片机的IO口是标准的双向端口,首先要设置IO口的状态,即:输入还是输出 DDRx寄存器就是AVR单片机的端口方向寄存器,通过设置DDRx可以设置x端口的状态。 DDRx端口方向寄存器相应位设置为1则对应的x端口相应位为输出状态,DDRx端口方向寄存器相应位设置为0则对应的x端口相应位为输入状态。 例如: DDRA = 0xFF;? //设置端口A所有口为输出状态,因为0xFF对应的二进制 DDRA = 0x0F? //设置端口A高4位为输入状态,低4位为输出状态,因为0x0F对应的二进制 PORTx寄存器是AVR单片机的输出寄存器,端口输出状态设定好后通过设置PORTx可以使端口x的相应位输入高电平或低电平来控制外部设备。 例如: PORTA = 0xFF;? //端口A所有口线输出高电平 PORTA = 0x0F;? //端口A高4位输出低电平,低4位输出高电平 小贴士: 利用位逻辑运算符对特定的端口进行设定。 PORTA = 13;? //端口A第4位置为高电平,其它为低电平,应移3位后PORTA = 17;? //同理,第8位置高电平 有时候我们期望端口某一位设置成高电平,但是其它位的高低电平要保持不变,如何做呢?C语言是很强大的,有办法!如下: PORTA |=13;? //实现端口A第4位置为高电平,其它位的高低电平不受影响 上面的语句是简化的写法,分解一下就是: PORTA = PORTA | (13);? ? //数字1左移3位后与端口A进行按位或,结果就是端口A第4位置为高电平,其它位的高低电平不受影响 那么大家就会问了,如何实现设置某一位为低电平,其它位的高低电平不变呢?建议大家思考1分钟再看下面的内容。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PORTA =~(13);? //解释一下,首先将1左移3位变,然后再按位取反变,然后再与端口A做按位与运算,这样就实现了设置端口A第4位为低电平,其它位的高低电平不变。 分解后的语句为: PORTA = PORTA (~(13));? //结果是一样的 将某端口相应位的高低电平翻转,即原来高电平变为低电平,低电平变为高电平,呵呵!好简单呦! PORTA = ~PORTA;? //将PORTA按位取反后再赋值给PORTA 按位逻辑运算还有一个异或,这个也非常有意思,它能实现电平翻转,有兴趣大家看看书,算是给大家留个想头吧! 到这里基本的IO口置位的操作就聊完了,希望大家积极跟贴进行讨论,讲一讲自己的体会和心得,一起学习学习! 如何用C语言设置,清除和检查是否置位I/O 寄存器? ? Question 如何用C语言设置,清除和检查是否置位I/O 寄存器? Answer 在AVR Studio的Help菜单中选择the online AVR Tools User Guide然后打开AVR Assembler -- User Guide -- expression_rs,在这里你能获得很多汇编语言关于算术运算方面的应用。 下面是一些简单和常用的算术运算操作,这个例子是改变或检查AVR控制器PORTB端口上PB6和PB4的bit值。 设置PB6和PB4,同时不改变其他管脚状态 PORTB |= (1PB6) | (1PB4); 清除PB6和PB4,同时不改变其他管脚状态 PORTB = ~((1PB6) | (1PB4)); 检查PB6是否被置1 if (PORTB = (1PB6)) { //Do something, for instance set a value in a variable } 检查PB6和PB4是否被置1 if ((PORTB = ((1PB6) | (1PB4))) == ((1PB6) | (1PB4))) { //Do something, for instance set a value in a variable } AVR单片机I/O口位操作,置位、清位、取反。 2008-06-05 11:50 下面是用的宏定义方式: #define LED_SET???? PORTD |= (1 PD5)?????????? //位置高 #define LED_CLR???? PORTD = ~(1 PD5)?????????? //位置低 #define LED_COM???? PO

文档评论(0)

cv7c8hj6b4I + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档