AVR 的 IO 端口特性与应用

发布者:bobojrt最新更新时间:2016-10-06 来源: eefocus关键字:AVR  端口 手机看文章 扫描二维码
随时随地手机看文章
AVR的IO端口特性分析:

  AVR 的 IO 端口特性与应用 - wanghengzhi@126 - 代码豆子

分析IO引脚Pxn。DDRxn 只有为1时,可控单向开关才工作,PORTxn 的数值才能通过可控单向开送到 Pxn.

结论:DDRxn=1 时,为输出状态。输出值等于PORTxn。所以,DDRxn 为方向寄存器。PORTxn 为数据寄存器。

 

分析上拉电阻。E的电位为0时,即D为1时,上拉电阻有效。

从与门的输入分析,只有以下的条件同时满足时,上拉电阻才有效

1、PUD 为0

2、DDxn 为0

3、PORTxn 为1

结论是:只有DDRxn = 0 即管脚定义为输入状态,并且 PORTxn=1, 而且UPD设置为0时,上拉电阻才生效。

 

分析 Pxn 及 SLEEP。只有当 SLEEP = 0 时,可控开关2才导通,SD1不工作,施密特触发器的输入等于Pxn, 信号送到同步器后读取。

结论:Pxn 无论在输入或输出状态都能被AVR读取。SLEEP=0时输入才能被读取。

AVR的IO端口的使用注意事项:

如果有引脚末被使用,建议些引脚赋予一个确定电平。最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。

如果刚定义了引脚的输入状态,就要立即回读,可以在回读前,插入一句 _nop()。

系统复位时,DDR全部为0,Port也全部为0,故上拉电阻在复位时会失效。

如何用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 、PB1口

举例五:将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  端口 引用地址:AVR 的 IO 端口特性与应用

上一篇:AVR定时器CTC模式的测试
下一篇:IAR For AVR 两线串行接口 TWI 应用

推荐阅读最新更新时间:2024-03-16 15:13

使用AVR Studio 设置熔丝位并烧写程序
使用AVRStudio设置AVR熔丝位及烧写程序 AVR Studio是ATMEL指定用于开发AVR MCU的官方软件,其编程功能最为强大。下面介绍使用AVRStudio烧写程序及熔丝快速入门。 ●使用AVRISP方式烧写程序及配置熔丝位 对软硬件进行初始配置,并正确设备连接,就可使用AVRISP进行联机了。 打开AVRStudio,点击主窗口中的图标 前面标有Con的那个图标。出现如下图画面: 正常联机后,将弹出如下窗口: (1)程序编程面板: ● Device里面选择好对应的芯片类型,后面的Erase Device可以擦除芯片。 ● Programming mode编程模式:注意这里必须是ISP mod,表示用的ISP
[单片机]
使用<font color='red'>AVR</font> Studio 设置熔丝位并烧写程序
STM32的库如何实现对同一组IO口的一部分引脚进行读写
以写数据为例,提供的函数有 GPIO_SetBits GPIO_ResetBits GPIO_WriteBit GPIO_Write 比如我在PD口的高八位接了个并行的数据线,低八位为控制,有输入有输出。怎么实现对高八位写任意数而第八位不受影响呢。 前两个函数肯定都不可以。 第三个也不行,是对一个或多个IO口置位或复位。 第四个是写整个口,势必影响到第八位的控制信号啊。 能想到的是写一个for循环,判断每一位然后调用八次 GPIO_SetBits GPIO_ResetBits 是不是太麻烦了。。。。 知道一个方法,读输出再写输入就可以了。 GPIO的寄存器BSRR和BRR 端口位设置/复位寄存器BSRR: 注:如果
[单片机]
数字温度传感器TC77与AVR单片机的接口设计
  AVR系列的单片机内部集成了TWI(Two-wire SerialInterface)总线。该总线具有I2C总线的特点,即接线简单,外部硬件只需两个上拉电阻,使用时钟线SCL和数据线SDA就可以将128个不同的设备互连到一起;而且支持主机和从机操作,器件可以工作于发送器模式或接收器模式,数据传输率高达400 kHz。正因为TWI总线具有这么多的优点,因此受到了使用者的青睐。   由于该总线与传统的I2C总线极其相似。因此不少人误以为TWI总线就是I2C总线,其实这只是一种简单化的理解。TWI总线是对I2C总线的继承和发展。它定义了自已的功能模块和寄存器,寄存器各位功能的定义与I2C总线并不相同;而且TWI总线引入了状奁寄
[单片机]
数字温度传感器TC77与<font color='red'>AVR</font>单片机的接口设计
浅谈STM32的端口输出方式
STM32有两个寄存器可以控制IO输出, 一个是ODR寄存器, 只使用了低16位. 向此寄存器写数据, 就可以控制某个引脚的输出电平. BSRR寄存器是端口位设置/清除寄存器. 此寄存器和ODR寄存器有类似的功能, 都可以来用设置GPIO端口输出.此寄存器分为高16位和低16位, 向高16位的某位写1清除对应ODR寄存器位(输出0), 写0无影响. 向低16位某位写1置位对应ODR寄存器位(输出1), 写0无影响. 可见两个寄存器均可以控制IO输出, 从上文可知写BSRR实际上是可以影响ODR寄存器的值的, 那么使用这两个寄存器控制输出有什么区别呢? 在ST的手册中有这样的说明(RM0090 266页): Each I/O por
[单片机]
Maxim推出业内尺寸最小的IO-Link环境光传感器
Maxim Integrated推出业内尺寸最小的IO-Link环境光传感器,可精确检测透光、RGB可见光和红外信号 Maxim Integrated的Santa Cruz环境光传感器集成IO-Link协议,简化高精度工业传感器设计。 中国,北京,2014年2月25日。Maxim Integrated Products, Inc. (NASDAQ: MXIM)推出Santa Cruz (MAXREFDES23#)环境光传感器(ALS),能够在工厂快速配置和监测多路红、绿、蓝(RGB)可见光和红外(IR)信号环境光传感器,适用于需要高精度检测的工业应用。 为保持竞争力和高质量水准,现代化工厂必须具备相当的灵活性,在降
[传感器]
任意2个io直接驱动LCD1602,并且不需外加芯片
这就是电路,细心的朋友会发现实物图中有几个贴片的阻容件,秘密就在这里,利用电容的记忆效应,把并行的数据转为串行。 iframe id="iframe_0.7900579490233213" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_587522P120CC.PNG?_=3976554%22%20style=%22border:none
[单片机]
任意2个<font color='red'>io</font>直接驱动LCD1602,并且不需外加芯片
用于高速信号端口ESD防护最优方案
集微网消息,随着电子设备智能化的发展,人们对智能设备的依赖越来越高。然而,日常生活中无处不在的静电给电子设备带来多样化的考验,如何进行有效的ESD防护已成为电子设备制造商面对的重要课题。 常见的ESD事件包括秋冬季节去触摸门把手时,伴随着静电响声,指尖的那一下刺痛;北方冬季脱掉外衣时噼里啪啦的静电响声;远处拖拽来的长网线插向路由器时的那一道短暂的弧光等。 在经历ESD袭击后,人会有痛感,但不会形成“缺陷”,这归功于人体对地的电阻足够大,静电电压无法形成大电流造成损伤。而静电进入电子设备后所经过的路径并不都能提供足够大的电阻来防止损伤,元器件内部薄弱的栅氧化层或反向偏置的PN结会成为静电泄放路径,静电电压将这些
[手机便携]
用于高速信号<font color='red'>端口</font>ESD防护最优方案
Atmel推出基于AVR32内核的32位数字信号控制器
Atmel推出AP7000系列32位数字信号控制器(DSC),这是首个基于该公司二月份推出的大流量AVR32内核。 AVR32内核在性能和代码密度等方面一直超过32位内核,并可以执行C/C++算法。AP7000是首个集成了所有多媒体系统所需功能的单芯片处理器,适合手机、数码相机、PDA、汽车信息系统、STB和家庭娱乐系统及网络交换机/路由器和打印机。该DSC包括向量化乘法协处理器、32K字节片上SRAM、16K字节指令和16K字节数据缓存、存储器管理单元、用于高速外设的DMA及可在外设和存储器间传输数据的外设DMA控制器。 它的外设包括16位立体声DAC、2048 x 2048像素TFT/STN LCD控制器、具有片上收发器(
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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