- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《AVR学习资料整理
Atmega16引脚图
I/O端口引脚配置
I/O 端口寄存器的说明
端口A数据寄存器- PORTA
端口A数据方向寄存器-DDRA
端口A输入引脚地址-PINA
Bit 7 6 5 4 3 2 1 PORTA PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 读/写 R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 0 0 0 0 0
AVR的真正双向IO结构就复杂多了,单是控制端口的寄存器也有4个 PORTx.DDRx,PINx,SFIOR(PUD位),不过功能也强劲多了。
作为通用数字I/O 使用时,所有AVR I/O 端口都具有真正的读- 修改- 写功能。这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻) 时,不会无意地改变其他管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻)。
输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。
所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与VCC 和地相连。 (很多数字器件都有保护二极管,在低功耗应用时要考虑保护二极管的电流倒灌的影响)
数据寄存器PORTx和数据方向寄存器DDRx为读/ 写寄存器,而端口输入引脚PINx为只读寄存器。
但是需要特别注意的是,对PINx 寄存器某一位写入逻辑1“ 将造成数据寄存器相应位的数据发生0“ 与“1“ 的交替变化。
当寄存器MCUCR 的上拉禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。
在( 高阻态) 三态({DDxn, PORTxn} = 0b00) 输出高电平({DDxn, PORTxn} = 0b11) 两种状态之间进行切换时,上拉电阻使能({DDxn, PORTxn} = 0b01) 或输出低电平({DDxn,PORTxn} = 0b10) 这两种模式必然会有一个发生。
通常,上拉电阻使能是完全可以接受的,因为高阻环境不在意是强高电平输出还是上拉输出。如果使用情况不是这样子,可以通过置位SFIOR 寄存器的PUD 来禁止所有端口的上拉电阻。
在上拉输入({DDxn, PORTxn} = 0b01)和输出低电平({DDxn,PORTxn} = 0b10)之间切换也有同样的问题。用户必须选择高阻态({DDxn,PORTxn} = 0b00) 或输出高电平({DDxn, PORTxn} = 0b11) 作为中间步骤。
不论如何配置DDxn,都可以通过读取PINxn 寄存器来获得引脚电平。PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟状态发生改变的短时间范围内,由于引脚电平变化而造成的信号不稳定。其缺点是引入了延迟。
AVR IO具备多种IO模式:
高阻态:多用于高阻模拟信号输入,例如ADC数模转换器输入,模拟比较器输入。
弱上拉状态(Rup=20K~50K):输入用。为低电平信号输入作了优化,省去外部上拉电阻,例如按键输入,低电平中断触发信号输入。
推挽强输出状态:驱动能力特强(20mA),可直接推动LED,而且高低驱动能力对称。
使用注意事项:
写用PORTx,读取用PINx。
实验时,尽量不要把管脚直接接到GND/VCC,当设定不当,IO口将会输出/灌入 80mA(Vcc=5V)的大电流,导致器件损坏。
作输入时:
1.通常要使能内部上拉电阻,悬空(高阻态)将会很容易受干扰。(51的抗干扰能力强,是因为51永远有内部电阻上拉)。
2.尽量不要让输入悬空或模拟输入电平接近VCC/2,将会消耗太多的电流,特别是低功耗应用场合------CMOS电路的特点。
3.读取软件赋予的引脚电平时需要在赋值指令out 和读取指令in 之间有一个时钟周期的间隔,如nop 指令。
4.功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。
5.用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入?。
作输出时:采用必要的限流措施,例如驱动LED要串入限流电阻
复位时:复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平
休眠时:作输出的,依然维持状态不变;作输入的,一般无效,但如果使能了第二功能(中断使能),其输入功能有效。例如:外部中断的唤醒功能。
AVR的C语言IO操作:
AVR的C语言基于ANSI C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令。所以需要采用?位逻辑运算来实现,这是必须要掌握的。
IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求,请参看手册。
文档评论(0)