引 言
MCS-51单片机是目前国内应用最广泛的一种单片机型。全球各单片机生产厂商在MCS-51内核基础上,派生了大量的51内核系列单片机,极大地丰富了MCS-51的种群。其中STC公司推出了STC89系列单片机,增加了大量新功能,提高了51的性能,是MCS-51家族中的佼佼者。早期的单片机控制系统,采用单片机加片外EEPROM配合,来存储一些需要预置的重要参数,并在数码管上显示出来。由于单片机控制的整流器要求实时性很强,而早期EEPROM的写周期在10 ms左右,因此运行参数的预置是在整流器待机的情况下进行的。而很多情况下需要在运行的同时记录数据,如用单片机控制的12脉波汽车电泳整流器要求在运行的同时实时记录重要数据,而且在掉电时不丢失。由于在12脉波整流器中运行的单片机程序,其周期必须小于1.67 ms(交流电网的1个周期是20 ms,除以12就是l_67 ms),这就要求实时记录的时间在1ms以下甚至更短(考虑到程序的执行时间)。经查阅资料发现,目前很多EEPROM达不到这个要求[1],即使时间最短的AT89S8252单片机片内。EEP-ROM的写周期也是2.5 ms。本文通过对EEPROM的巧妙应用,实现了整流器在线记录数据的功能。
1 寻找符合要求的单片机
设备使用的是Atmel公司的AT89C52(40DIP封装)单片机和EEPROM芯片2817A。要想在不改变原设备电路板的情况下完成要求的功能,就只能在兼容的MCS-51系列单片机中想办法。AT89S8252片内含有2 KB的EEPROM,经编程测试发现,它虽然能实时记录数据并且断电不丢失,但是在向片内EEPROM中记录1个数据时,能引起输出电压和电流的波动,不能满足实际运行的需要。其原因是AT89S8252单片机片内EEPROM的写周期为2.5 ms,超过了1.67 ms的程序的执行周期,从而影响了程序的正常运行。所以执行周期是解决问题的关键。
由参考文献[2-3]知:STC89C51RC/RD+系列单片机片内含有EEPROM(Data Flash),读1个字节/编程1个字节/擦除1个扇区(512字节)的时间分别为10/μs/60μs/10 ms。编程1个字节的时间为60μs,远小于AT89S8252片内EEPROM 2.5 ms的编程时间,这为解决问题提供了思路。
2问题的解决
单片机STC89C55RD+(40DIP封装),其引脚、功能完全与AT89C52兼容,与MCS-51程序也兼容,片内含有20KB的Flash程序存储器,16KB的EEPROM数据存储器。把原用于AT89C52中的程序写到STC89C255RD+中,放到原设备上运行,可长期稳定地运行。经修改的在整流器中运行的单片机程序,实时记录一些数据到STC289C55RD+的EEPROM中,整流器可正常运行,但不能执行扇区擦除操作。执行扇区擦除操作将严重影响整流器的正常运行,引起输出电压和电流的很大波动。执行扇区擦除操作时,从示波器来看整流器的输出间断了20 ms,电压电流显示很大的波动。用示波器捕捉到了EEPROM写时的波形,输出波形暂停了20 ms,1个周波电压,电压波形如图1所示,不执行扇区擦除操作时的波形如图2所示。从图中可以看出,问题得到了很好的解决。