一、Attiny 13A 与 EEPROM
EEPROM:(Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。
Attiny 13A 也有一个64bytes 的EEPROM,我们可以利用记录上一次程序运行的结果,达到某些设计目的。比如用开关管理手电筒电源,同时完成模式切换等。
本次记录我学习EEPROM的读写过程,也希望能给大家带来帮助。
二、程序目标
利用EEPROM记录上次程序运行的结果,实现用电源开关控制不同脚输出的目的。即开关开合,Attiny 13A能在不管脚0、1、2 中进行输出切换。
三、实现电路
电路接线如图
四、程序
//目标:用开关 改变输出脚 PB0、PB1、PB2顺序切换
//版本:V1.0 时间 2021.2.7//
//调EEPROM 库
#include <EEPROM.h>
// 变量声明
unsigned char EP;
// 初始化
void setup() {
//引脚初始化
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
//Read first EEPROM cell.(读第一个EEPROM内容)
EP = EEPROM[ 0 ];
// 读出EEPROM后,对EEPROM第一个单元进行改写,用于下一次断合记录。
if(EP == 0x00){
EEPROM[ 0 ] = 0x01;
}
else {
if(EP == 0x01){
EEPROM[ 0 ] = 0x02;
}
else { EEPROM[ 0 ] = 0x00;
}
}
}
//主程序
void loop() {
// put your main code here, to run repeatedly:
if (EP == 0x00){
digitalWrite(0, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(0, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
if (EP == 0x01){
digitalWrite(1, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(1, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
if (EP == 0x02){
digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
}
这里偷懒不写闪光函数了,不影响学习结果 。
另,Arduino EEPROM的指令集见:https://www.arduino.cc/en/reference/EEPROM
五、运行结果
经测试,运行结果可用。
Attiny13A 烧录参见 。https://blog.csdn.net/sadanubis2008/article/details/105984422
其中,Attiny13A 接线方式与与ATTINY85一样。