找回密码
 注册
关于网站域名变更的通知
查看: 311|回复: 1
打印 上一主题 下一主题

AVR的IO用法笔记

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-5 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
AVR的IO用法笔记
8 A: c6 B5 ?, A) x6 l- Q( E
3 P' ^8 [8 t8 X* C  ~
3 i, |  O$ c4 ~0 p$ g$ {* R

AVR的IO有三个寄存器,DDRX,PORTX,PINX。

DDRX 方向,DDRX=1,输出;DDRX=0,输入。

例如设置PA0口为输入,即可写成DDRA&=~(1<

PORTX 分两种情况

如果DDR=1,即在输出状态的话,那么通过设置PORTX的值改变IO端口的电平

如果DDR=0,即在输入状态的话,那么PORT=1则使能上拉电阻,否则不使能。

PINX 此寄存器表示了该端口的实际电平,所以读IO口的话,应该读PINX,而不是PORTX。

每个IO口可以输出或吸纳20mA的电流,这一点在设计上要注意。

比如连接LED,键盘等。

以LED为例,LED上的压降是2v左右,正常的工作电流应该是10mA-20mA,可以通过此计算限流电阻的值。

如供电电压为5V,则限流电阻应为(5-2)/10mA=300(Ohm).

一旦将IO口的工作方式设为输入方式后,必须等待一个时钟周期才能正确读到PIN值。

AVR单片机复位之后所有的IO均为输入方式,上拉电阻不使能,所以呈现三态高阻输入态。

AVR的IO寄存器被分配在SRAM地址空间中,可以通过IN、OUT、SBI、CBI这些指令直接访问IO寄存器,也可以通过访问SRAM访问它们。

如数据手册中所示,例如PORTA,前面的$1B是IO寄存器的空间地址,括号内的$3B是数据存储器的实际映射地址。

可以通过SBI和CBI指令方便地设置某一位,但是只能对$00-$1f即前32个IO寄存器进行这种操作。

例如SBI 0x1B,0即是设置PORTA0为1,在速度要求很高的情况下可以直接嵌入这种汇编语句。


& i# F' K0 B4 _% o

该用户从未签到

2#
发表于 2019-3-5 23:45 | 只看该作者
研究一下,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-20 14:04 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表