原创 AVR单片机专辑——I/O口

2008-12-15 14:17 2799 9 11 分类: MCU/ 嵌入式

AVR单片机简介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


1.       8位增强型内置Flash的精简指令集CPURISC


2.       哈佛结构


3.       应用在计算机外部设备、工业实时控制、仪器仪表、通信设备、家用电器等领域


AVR的主要特性


1.       废除机器周期(时钟分频)


2.       大多数为单周期指令,取指周期短,可预取指令,流水作业


3.       硬件结构:采用局部寄存器存堆(32个寄存器文件)和单体高速输入输出方案(输入捕获寄存器、输出比较匹配寄存器及其相应控制逻辑)


4.       高质量Flash,长寿命E2 PROM,大容量SRAMI/O口驱动能力强,脉冲调制PWM


本文主要介绍高档ATmega系列AVR单片机,主要有ATmega<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8/16/32/64/128等,我就以ATmega128说起吧,其他型号基本相似。


第一讲:I/O口功能


Atmega128I/O口具有真正的读-修改-写功能,可直接驱动LED和直流电机。在这里主要涉及到三个寄存器,分别为端口方向寄存器DDxn,数据寄存器PORTxn和输入引脚寄存器PINxn。在实际使用时,主要是使用加粗的,PUDSFIOR中的,不过我以前编程没用到。




DDxn


PORTxn


PUD


I/O


上拉电阻


说明


0


0


X


输入


无效


高阻态(Hi-Z


0


1


0


输入


有效


被外部电路拉低时输出电流


0


1


1


输入


无效


高阻态(Hi-Z


1


0


X


输出


无效


输出低电平(吸收电流)


1


1


X


输出


无效


输出高电平(输出电流)


I/O口可以实现LED显示、数码管显示、继电器以及键盘操作等。下面我来简单的介绍一下。由于我没有实物只能使用Proteus仿真。


LED显示:主要是使用I/O口实现LED的亮灭、流水灯以及LED闪烁。


数码管显示:主要是数码管显示和滚动。


继电器:主要是控制LED的亮灭。


键盘操作:主要是4个独立按键和一个4*4矩阵键盘,其中来说一下矩阵键盘的识别,用I/O口的低四位控制行,高四位控制列,在检测是否有键按下时,将I/O设置为输出,低四位输出低电平,高四位输出高电平,再将高四位设置为输入,低四位依然输出低电平,当有键按下时,高四位如果有低电平输入就代表有键按下。


接着就要检测是哪个键按下,将I/O口设置为输出,其中首先是第一行输出0,其他为1,然后将高四位设置为输入,当M1按下,第一列为0,以此类推,然后依次将其他行输出0


在这些功能的实现中,主要是设置好端口的方向以及端口的输出数据寄存器的值。其中经常会用到置位复位操作,例如:PORTA|=BIT(2)——将A2位置1PORTA&=~BIT(2)——将A2位清0


硬件Proteus连接图和程序看附件。如果有错误,请指教。谢谢。rar


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1513083 2008-12-20 18:22

对矩阵键盘中按键的读取通常称为“键盘扫描”。读取时将接行或列的引脚设置为输入,将列或行的引脚设置为输出。 矩阵键盘可以通过软件实现连击、组合键、滤波同时按下多个键等复杂的功能。 上拉电阻的目的包括避免输入端口悬浮、改善信号边沿波形、为开漏输出提供电平转换等。

用户1400544 2008-12-15 14:18

支持原创,谢谢共享!
相关推荐阅读
用户1513083 2009-07-14 14:52
ucos2.86在44b0上移植问题
程序使用从ucos主页上下载的最新ucos2.86和开发板的启动代码,但是怎么也得不到想要的结果,main.c应用程序中利用ucos2系统提供函数创建的3个任务本来应该循环得到调度的,但却均只被调度一...
用户1513083 2009-06-11 19:47
气晕了
今天四点从实验室出来直奔邮局,到了大厅,说挂号,告诉我到那边买信封。我写好后,给她,他在电子秤上称了一下,给我5.4元的邮票。我就到对面去贴邮票,贴好后我就投进去了,现在才发现,原来没有挂号成。突然想...
用户1513083 2009-05-31 21:29
心已决
拿一年的时间来分手已经很长了,应该考虑清楚了,这一年里,我完全变了,最明显的就是自己静不下来学习,自己都讨厌自己,累了,身心疲惫,为何要如此折磨,已经没有信任了,又何必再让别人伤心流泪。我现在这样是对...
用户1513083 2009-05-12 12:14
MCU和CPLD实现VGA图像显示可行否
请问各位一个问题。我手上有块CPLD板EPM3256,板上没有SRAM,所以只是实现了VGA接口横条、竖条和棋盘格显示,汉字也就只能显示设定好的。我手上还有一块自己做的ATmega128,上面外扩了3...
用户1513083 2009-05-10 20:11
累呀
觉得自己很累,很累。摸不清自己的方向,应该多和人交流交流。从去年七月份出了点问题后,总感觉自己不在状态,不能很好的静下心来,个人问题没处理好,搞得自己很狼狈,最近一阶段自己学习,感觉好像懂了,其实真正...
用户1513083 2009-04-28 22:05
有点开小差
感觉最近一个星期学习的效果不理想,有点不在状态,有点没有方向不知该学些什么,学的很累,要好好调整一下,我觉得只要问题还是自己闭门造车,没有人可以交流。总的来说,就是在做UCOS移植,其实UCOS我去年...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /3 下一条