您可以使用内置EEPROM的微控制器。8位PIC16F84A具有64个字节的EEPROM,通常可存储10,000,000个字节,每个字节的写入量最少为1,000,000个(这称为字节耐力)。在另一个答案中选择的PIC12F635具有128字节EEPROM和100,000次写入的字节耐久力。的PIC24F16KA102,一个16位的处理器,具有512个字节的EEPROM,也100,000写入一个字节耐力。
OP不会指示LED闪烁的频率。为了便于讨论,假设它是每分钟四次。
一年后它将闪烁
4∗60∗24∗365=2,102,400 times.
由于EEPROM需要同时捕获最后的打开和关闭事件,因此它将被写入该数字的两倍,即大约420万次。在五年中,这是2100万次。
显然,这将超出我现在内置在微控制器中的任何EEPROM的规格。
但是有一个简单的解决方案。不用一遍又一遍地使用相同的字节来跟踪开或关状态,而是可以使用字节数组来填充整个芯片。
数组中的每个元素都需要两个字节。因此,一个64字节的EEPROM(如PIC16F84A中的EEPROM)可以容纳32个元件。每次写入EEPROM时,都将0写入状态字节(表示此元素有数据),或者将0写入数据字节(LED最后熄灭)或0xFF(LED最后点亮)。下次访问EEPROM时,将对元素进行索引,直到找到一个状态字节为0xFF的元素,然后使用该元素。如果没有剩余,则重新初始化EEPROM并重新开始(对于低端PIC,这意味着向每个状态字节写入0xFF;对于PIC24,有一条命令擦除整个EEPROM)。如果您需要了解LED的最后状态,则可以像以前一样对阵列进行索引,但是现在返回一个元素并读出数据字节。
对于PIC16F84A,这本质上是将对单个字节的访问次数除以16的因数(16个而不是32个,因为每个状态字节被写入两次)。这样一来,它总共可以处理1600万次写入,足以容纳近四年的数据。PIC12F635的EEPROM更大,但字节耐力更小,仅为100K,将能够处理320万次写入,足够用9个月。
具有512字节EEPROM和批量擦除功能的PIC24F16KA102将能够处理2560万次写入,足够五年以上。
如果闪烁速度仅为每小时四次,而不是每分钟四次,则意味着每年总共写入70,080次。甚至具有每字节100,000次写入能力的PIC12F635也可以持续使用45年!