Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351137
  • 博文数量: 206
  • 博客积分: 10571
  • 博客等级: 上将
  • 技术积分: 2610
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-30 11:50
文章分类
文章存档

2014年(1)

2013年(4)

2012年(18)

2010年(14)

2009年(31)

2008年(3)

2007年(135)

分类:

2007-08-15 20:32:33

AVR单片机的I/O操作(ATmega16为例)
1、简介
AVR的I/O端口
ATmega16,共有32个I/O端口,分别是PA(8位),PB(8位),PC(8位),PD(8位)。这32个I/O端口都是可以作为双向I/O端口使用的,和51比起来要强些。PA,PB,PC,PD这些端口,既可以作为普通的I/O端口使用又有其他附加功能。
下面是简要介绍:
PA:PA口可以作为8路ADC使用。
PB:PB7~PB4是SPI接口。
PC:PC0~PC1是双线串行总线接口,亦可以作为I2C接口。PC2~PC5是JTAG接口,PC6~PC7为定时器外部的时钟源。
 
2、输入输出端口的使用
AVR单片机的I/O端口标准的双向口,每个端口对应3个寄存器,即DDRX,PORTX,和PINX(X为相应端口,如对于PA口来说,X为A)。其端口定义如下表:
DDRXn
 PORTXn
 I/O
上拉 
 备注
 0
 0
 输入
 关闭
 三态(高阻)
 0
 1
 输入
 打开
 提供弱上拉,低电平必须有外电路拉低,
 PXn脚输出电流
 1
 0
 输出
 关闭
 输出0
 1
 1
 输出
 关闭
 输出1
 
3,寄存器介绍:
 
DDRX:端口方向寄存器
当DDRX的某一位置1时,相应引脚作为输出使用。反之置0时,为输入使用。
例如:DDRB=0xF0;
此时PB0~PB3位设为输入,PB4~PB7为输出。
 
PORTX:端口数据寄存器
如果引脚设为输出,则对PROTX进行写操作即改变引脚的输出值。
例如:DDRA=0XFF;      //端口A为输出 
    PORTA=0XAB      //端口A输出为10101011
如果引脚为输入,则PORTX的数据决定相应端口的引脚是否打开上拉功能。
例如:DDRA=0X00;      //端口A为输入
    PORTA=0XF0;      //端口A的0~3位不上拉,在没有输入的情况下处于高阻态
 
PINX:端口输入引脚地址
如果希望读取引脚的逻辑电平值,一定要读取PINX,而不是PORTX。注意,PIINX是只读的,不能对其赋值。
例如:DDRA=0X00;       
     result=PINA;    //读取A口路基电平值,赋值给result
 
 
 
阅读(8032) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-15 15:47:31

多谢楼主分享哦,学习了!也欢迎广大linux爱好者来我的论坛一起讨论arm哦!www.lt-net.cn