Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55080
  • 博文数量: 12
  • 博客积分: 480
  • 博客等级: 下士
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-15 13:42
文章分类
文章存档

2010年(3)

2009年(2)

2008年(7)

我的朋友

分类:

2008-03-25 10:03:33

虽然开始看AVR的数据手册就知道每个I/O端口有DDRx,PORTx和PINx三个寄存器,PORTx是数据寄存器,“PINx无论引脚设置为输入还是输出都可以读出引脚上的电平”,然后就理解成了用PORTx进行数据读写,而PINx有特殊用途...
写程序的时候读PORTE取输入引脚的值,发现没变化,改成PINE才行,然后又仔细看了看手册才发现,PORTx虽然是RW寄存器,但功能是输出数据或设置输入引脚的内部上拉电阻使能,读到的是写入PORTx的内容。要读取引脚的输入,还是要用PINx才行。
看一下摘自“AVR系列MCU问答”的一段话:
问:当我使用SBI 和CBI 指令来设置或清除I/O 端口的一个信号位时是否会影响同一端口的其它位?
答:不会。不像多数单片机那样,在AVR 单片机中允许你100%安全地操作I/O 端口的信号位,这也适用于整个端口的操作,有疑问可参考每个I/O 端口的三个地址。
问:为什么每个I/O 端口有三个地址?
答:为使你能建立100%安全的系统,AVR 支持真正的读-修改-写I/O 端口。如果你希望读取I/O引脚的物理电平读PIN 寄存器,当你希望改变输出时读PORT 锁存,能确保正确的数据写回到端口。这种方式始终能给出你所希望的结果而不依赖于引脚的物理电平。这个特点使你省去了为建立一个安全的系统而拷贝你的端口数据进入存贮器的所有工作,这个工作使用了许多指令。当你使用SBI 和CBI 指令来设置/清除I/O 端口的信号位时必须始终使用PORT 的地址。
阅读(5408) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:avrgcc链接数据文件raw binary

给主人留下些什么吧!~~