今天收拾控制盒,还算顺利。板子上有一个排阻,没怎么焊好,让别人帮焊了下就好了。
STC11L16XE功能挺强,没想到还有32K的EEPROM,相当于一片24C32了,而且速度也很快,正好可以作为开关机及其它设定的掉电存储。编了个简单的测试程序,运行没问题。
在单片机程序里加上了每5分钟检测一次是否自动开关机,结果发现编绎出错,提示空间不够。查了下,原来在Keil C51的编绎优化设置里设为了1,导致所有变量顺序编址都是data型,堆栈空间都没有了。改为4后,编绎通过,但感觉堆栈空间还是有点小。而且代码达到了8K,要是89c52都要放不下了。精简了strcmp()函数后,本想再精简下printf函数。但HEX转BCD不用汇编效率太低,也没搞定。而且Keil生成的prinf共860个字节,相比另外两个自己字的函数也不算太大,决定放弃了,等有时间了再研究。
附eprom测试,测试第1个和{zh1}1个扇区.
void eprom_test()
{
xdata unsigned char xram=0;
INT16U i;
printf("eprom test\n");
//共32K Eprom
eprom_Sector_Erase(0); //扇区0
for(i=0;i<512;i++)
{
eprom_Byte_Program(i,i%64);
}
eprom_Sector_Erase(32*1024-256); //{zh1}一Sector
for(i=(32*1024-512);i<(32*1024);i++)
{
eprom_Byte_Program(i,i%128);
}
printf("\nEprom Sector 0:\n");
for(i=0;i<512;i++)
{
unsigned char ep_data;
ep_data=eprom_Byte_Read(i);
printf("0x%x\t",ep_data);
}
printf("\nEprom Sector 63:\n");
for(i=(32*1024-512);i<(32*1024);i++)
{
unsigned char ep_data;
ep_data=eprom_Byte_Read(i);
printf("0x%x\t",ep_data);
}
}