AVR IO口设置方法详解

发布者:暗里著迷最新更新时间:2019-10-29 来源: 51hei关键字:AVR  IO口  设置方法 手机看文章 扫描二维码
随时随地手机看文章

看到好多新手对AVR单片机位变量使用不明白,现在提供一个I/O口位操作方法供大家学习:

下面是我用的宏定义方式:

#define LED_SET    PORTD |= (1 << PD5)           //位置高

#define LED_CLR    PORTD &= ~(1 << PD5)          //位置低

#define LED_COM    PORTD ^= (1 << PD5)           //位取反

#define LED_R      PIND & (1 << PD5)             //位读取

通过上面的定义就可以在程序中直接操作I/O了。

判断PD5是否为‘1’:

if (LED_R != 0) {

    ;

}

那么如果要判断PD5是否为‘0’时:

if ((LED_R) == 0) {

    ;

}


呵呵,还是C语言没看好。

a |= b; 这是C语言里面的一种简化写法,前面的语语句和后面等同:a = a | b;

PIND & (1 << PD5) 这个语句我也是从书上学的,反正结果就是告诉编译器,在处理的时候把这个处理成位操作指令。


PD5知道了,它就是头文件里面定义的,实际数值是数字5;

1 << 5用二进制来看的话:0000 0001 被左移了5位,结果就是0010 0000。

PIND & 0010 0000这个二进制数,结果不就是取PIND.5这一位吗。

我是这样理解的,你也可以这样理解虽然不能百分之百保证标准,但不会错。要是上面有看不懂的,你就应该看书和学习了。


如何用C语言操纵AVR的IO端口(以ICCAVR为例):

举例一:将PB0定义为输出,且输出为高电平

DDRB=BIT(0); //定义 PB0为输出 

PORTB|=BIT(0); // PB0 输出高电平

举例二:将PB0、PB1定义为输出,且PB0输出低电平,PB1均为高电平

DDRB|=BIT(0)|BIT(1); //定义 PB0、PB1为输出 

PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平

举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1

PORTB^=BIT(0); // PB0 输出高电平

举例四:将PB0、PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1

PORTB^=BIT(0)|BIT(1); // PB0 输出高电平

举例五:将PB2、PB3定义为输入,不带上拉电阻

DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入

PORTB&=~(BIT(2)|BIT(3)); // 将 PORT 置0,没有上拉电阻

举例六:将PB2、PB3定义为输入,带上拉电阻。即没有引用这些引脚时,缺省值为高电平

SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD置0,在整个代码中,这句话可以不出现,或仅出现一次即可。因为它是一个控制全部上拉电阻的控制位。

DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入

PORTB|=BIT(2)|BIT(3); // 将 PORT 置1,满足上拉电阻的另一个条件 

举例七:DDRB=BIT(0)|BIT(1) 与 DDRB|=BIT(0)|BIT(1) 的区别

假定在执行上面两句指令前,DDRB 的状态为: 1000 0000 

如果执行 DDRB=BIT(0)|BIT(1) ,DDRB的状态变为: 0000 0011 

如果执行 DDRD|=BIT(0)|BIT(1),,DDRB的状态变为: 1000 0011 

那前一句会先清空以前的所有状态,后一句保留前面的状态。 

在实际应用中,后一句更常用。 

举例八:将第三位置1,除了用BIT(3),还有其它的表达方法吗?

DDRB|=BIT(3);

DDRB|=1<<3;

DDRB|=0x08;

DDRB|=0b00001000;


关键字:AVR  IO口  设置方法 引用地址:AVR IO口设置方法详解

上一篇:AVR片内两个串口互相通信的单片机源码
下一篇:AVR红外遥控解码代码

推荐阅读最新更新时间:2024-11-18 05:00

AVR AD转换的C语言编程
#include io8535v.h #define uchar unsigned char #define uint unsigned int uchar Table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar Da ta ={0,0,0,0}; void DelayMs(uint i) //0.25ms {uchar j; for(;i!=0;i--) {for(j=250;j!=0;j--) {;}} } void Display(uchar *p) //间隔5ms显示 {uchar i,sel=0x01; for(i=0;i 4;i++)
[单片机]
AVR单片机闪烁灯程序-第一个程序
自从无线通信完成后我没做什么,而是把AVR的学习列上日程,AVR的学习我是纯手工打造,所有的实验板全部自己焊接,因为用51习惯了,他是那么的方便,到AVR这却是一件很简单的事情显得如此复杂,那下载来说吧,51的ISP是通过串口直接写到FLASH,而AVR的还要设置熔丝位,如果搞不好芯片锁死就完蛋了,至少我的水平是够呛解决的。遇到的第一个问题是价格,AVR的价格比51的贵将近2-5倍,我选的是16L,因为他的FLASH足够我这种菜鸟用的,16KB,另一个是他的宽电压,以前51就没有这个优势,最重要的其实学哪种都无所谓,编程吗,其实就是一个中心思想的问题,只要你有好的算法,用什么语言描述就无关紧要了,关键AVR有个架构是不同于51的,
[单片机]
一种新的实现DDS的AVR信号发生器
这是一个AVR DDS信号发生器V2.0新的实施,已经在scienceprog.com出版。 很明显,对于原原理图和固件完全归功于它的原创者。这里呈现的是一个不同的PCB,结构紧凑,单只通孔,便于建筑构件片面的。函数发生器有两个BNC输出:为高速 一平方信号(BNC1)和DDS的信号(BNC2)另一个。偏移和幅度可以用两个调节电位器:在+5 V至- 5V(POT1)和0至10V(POT2)范围幅度范围偏移。向上和向下箭头按钮用于改变函数的类型(正弦,三角等),而左,右箭头按钮用于改变频率值。还有一个改变频率步进单独的菜单。当中间按钮按下时,产生的信号启动。示意图      EAGLE示意图(仅一个状态LED和开/关
[单片机]
一种新的实现DDS的<font color='red'>AVR</font>信号发生器
PB3,PB4,PA13,PA14,PA15用作普通IO的特殊配置
最近博主用STM32F103C8T6做了一个温度测控模块,用到PB3,PB4,PA15等引脚控制外设。发现不管怎么配置,这三个引脚都不能置零。后来发现是包括这三个引脚在内的PB3,PB4,PA13,PA14,PA15是特殊的IO口,用作JTAG/SWD仿真器的调试接口。其中PA13,PA14分别作为SWD调试的SWIO和SWCLK;PB3,PB4,PA13,PA14,PA15共同用于JTAG。这五个引脚的中英文描述如下图所示,图片来源于STM32F1参考手册: 这五个IO引脚非常特殊,正常情况下作为SWJ仿真器的调试引脚,如果要作为普通IO口使用需要特别的配置。以PA13引脚为例,该引脚在STM32F1数据手册中的描述如下图
[单片机]
PIC单片机以及51和AVR单片机的IO操作方法解析
对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间研究pic单片机的各类技术。而谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希望大家认真研读,以在pic单片机的学习之路上更为精进。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量
[单片机]
PIC单片机以及51和<font color='red'>AVR</font>单片机的<font color='red'>IO</font><font color='red'>口</font>操作<font color='red'>方法</font>解析
基于PWM功能的AVR单片机定时-计数器设计
  一、定时/计数器PWM设计要点   根据PWM((脉宽调制(PWM:(Pulse Width ModulaTION)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的模式))的特点,在使用ATmega128的定时/计数器设计输出PWM时应注意以下几点:   1.首先应根据实际的情况,确定需要输出的PWM频率范围,这个频率与控制的对象有关。如输出PWM波用于控制灯的亮度,由于人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz,否则人眼会察觉到灯的闪烁。   2.快速PWM可以的到比较高频率的PWM输出,但占空比的调节精度稍微差一些。此时计数器仅工作在单程正向计数方式,计数器的上限值决定PWM的频率,而
[单片机]
AVR单片机学习按键与数码管的程序设计
简介:按键与数码管的程序设计 AVR IO口的输入模式与上拉电阻 选择结构语句与按键的查询方式程序设计 数码管基本原理 扫描方式显示多位数码管 一、输入状态IO寄存器设置 1、DDRx 某一位置0,相应位的IO口被设置为输入 2、PORTx某一位置1,使能对应IO口相应位的上拉电阻 3、PINx的对应位是输入的数据,0或1 选择结构语句 一、关系运算符和关系表达式 小于 小于等于 = 大于 大于或等于== 不等于!= 二、逻辑运算符和逻辑表达式 逻辑与&&逻辑或||逻辑非! 三、if 语句结构 if(表达式1)语句1 else if(表达式2)语句2 else 语句3 四
[单片机]
<font color='red'>AVR</font>单片机学习按键与数码管的程序设计
基于AVR单片机的中频电源测试系统
1引言   电参数的测量和监控是电力系统的重要组成部分,本文从测试系统的工程学实际出发,完成了对中频电源系统的电压、电流、频率、功率因数、有功功率等参数的测量和实时监控,较好的实现了中频电源测试系统的功能和工程要求。   AVR单片机相对传统的 51系列单片机,具有更高的集成度和更强的功能,与 C语言有很好的兼容性,RISC指令架构使其运行速度可达 1MIPS/MHZ。随着其越来越广泛的应用,必将取代 51系列成为单片机的主流。其主要功能包括看门狗、FLASH程序存储器、 E2PROM、 A/D转换器、定时器、计数器、USART接口等多种功能,这使得本测试系统的硬件实现变得简单,可靠。   2硬件结构设计与实现   
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved