arduino UNO R3的寄存器写法(1)-----引脚电平状态变化

学习过51或STM32的,尤其是会STM32的开发者对寄存器有非常深的了解和痛苦,因为arduino的封装好的函数,使我们在使用中,不用去找相应的寄存器,我们只需要使用对应的函数,配置好就可以使用了。这一点真是小白的福音。arduino UNO使用的是ATMEGA328P是AVR单片机的一个型号,常用的Ardunio UNO和Arduino Pro Mini都是基于这款芯片,我研究了一下arduino的寄存器写法,记录一下。省的以后忘记了。

声明:笔者从未接触过AVR单片机的写法,所有研究资料来自于度娘。语法错误或用法错误,欢迎饱学之士指点迷津

在官方中有对arduino的相关寄存器和引脚的的详细标注
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/369a3b2b7eb84d9fb2846a3bec8549cf.png
可以从图片中看出,
D0–D7是PD寄存器
D8–D13是PB寄存器
A0–A5+RESET是PC寄存器

现在寄存器的位置我们已经知道了,那么如何使用呢?假设我们需要改变引脚状态
咱们需要先了解三个指令

DDRx ---------控制输出方向; //设定寄存器引脚输入输出模式(0:输入;1:输出)
PORTx -控制输出数据0、1; //改变寄存器引脚电平状态
PINx —控制(读取)输入数据; //读取寄存器引脚的电平状态

指令中加粗的x表示的要使用的寄存器,
比如要使用D0—D7的中的某个引脚,我们就用到了PD寄存器,那么就是

DDRD
PORTD
PIND

基础介绍已经说完了,直接上程序对比,大家感受一下,假如要点亮D2这个引脚

先看一下通常写法
在这里插入图片描述

在看一下寄存器写法
在这里插入图片描述

//#include <avr/io.h>    //如果编译错误,则引入此函数
void setup() {
 DDRD=0B00000100;  //  二进制顺序为D7--D0;1为输出,0为输入  
 PORTD=0B00000100; //  二进制顺序为D7--D0;1为高电平,0为低电平 
}
void loop() {  

}

仿真结果如下
在这里插入图片描述

从一个引脚对比,我们可以看到,使用寄存器用法,可以使用到非常小的程序存储空间。当然,这样直接对比,没有意义,和耍流氓一样。函数是对寄存器的封装,要调用的很多,相当于中间商。用起来简单当然也要付出一定的成本。
下面我们看一下读取引脚状态,这次我们使用A0-A5来查看数据

//#include <avr/io.h>    //如果编译错误,则引入此函数
void setup() {
 
 DDRC=0B000100;    //  二进制顺序为A5--A0;1为输出,0为输入  
 PORTC=0B000100;   //  二进制顺序为A5--A0;1为高电平,0为低电平 
 Serial.begin(9600);
 Serial.print(PINC,BIN); //  读取PC寄存器的引脚状态
}
void loop() {  

}

在这里插入图片描述
仿真结果
在这里插入图片描述
后面我会进行持续介绍,不定时更新

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值