AVR单片机简介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1. 8位增强型内置Flash的精简指令集CPU(RISC)
2. 哈佛结构
3. 应用在计算机外部设备、工业实时控制、仪器仪表、通信设备、家用电器等领域
AVR的主要特性
1. 废除机器周期(时钟分频)
2. 大多数为单周期指令,取指周期短,可预取指令,流水作业
3. 硬件结构:采用局部寄存器存堆(32个寄存器文件)和单体高速输入输出方案(输入捕获寄存器、输出比较匹配寄存器及其相应控制逻辑)
4. 高质量Flash,长寿命E2 PROM,大容量SRAM,I/O口驱动能力强,脉冲调制PWM
本文主要介绍高档ATmega系列AVR单片机,主要有ATmega<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8/16/32/64/128等,我就以ATmega128说起吧,其他型号基本相似。
第一讲:I/O口功能
Atmega128的I/O口具有真正的读-修改-写功能,可直接驱动LED和直流电机。在这里主要涉及到三个寄存器,分别为端口方向寄存器DDxn,数据寄存器PORTxn和输入引脚寄存器PINxn。在实际使用时,主要是使用加粗的,PUD是SFIOR中的,不过我以前编程没用到。
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)——将A口2位置1,PORTA&=~BIT(2)——将A口2位清0。
硬件Proteus连接图和程序看附件。如果有错误,请指教。谢谢。
用户1513083 2008-12-20 18:22
用户1400544 2008-12-15 14:18