本帖最后由 ZXHREG 于 2017-9-27 19:28 编辑
各位如果使用stp-isp 6.86F 的注意,是不是eeprom设置不正常
各位大神看看我这程序错哪了,是eeprom 读写验证过了没有问题,程序主要是移位操作,没有复杂的地方;
直接看while()循环部分吧,别的地方不重要
#include <stc8.h>
#include <eeprom.h>
#include <lcd.h>
unsigned char key1Down,key1Up;
unsigned int xx;
unsigned int xxAddr=0x0100;
sbit key1 =P1^6;
void Timer0Init(void) //10毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式(cpu12分频)
TMOD &= 0xF0; //设置定时器模式 T0GATE=0,T0_C/T=0,T0M1=0,T0M0=0;16位自动重装模式
TL0 = 0x00; //设置定时初值
TH0 = 0xDC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void Display(unsigned char a,unsigned int n)
{
unsigned int x;
x=n;
lcdWriteCmd(0x80+a);//lcd显示指针的地址
lcdWriteData(x/10000+0x30);
lcdWriteData(x%10000/1000+0x30);
lcdWriteData(x%1000/100+0x30);
lcdWriteData(x%100/10+0x30);
lcdWriteData(x%10+0x30);
}
void main()
{
unsigned int yy;
Timer0Init();
lcdInit();
ET0=1;
EA=1;
if(xx<6000) xx=6000;
yy=IapRead(xxAddr);
yy=yy<<8;
yy=yy+IapRead(xxAddr+1);
xx=yy;
Display(2,xx);
while(1)
{
if(key1Up>=10) //按下松开KEY1, xx 加3000
{
if(xx<=60000) xx+=3000;
else xx=6000;
IapErase(xxAddr);
IapPrograme(xxAddr,xx>>8);
IapPrograme(xxAddr+1,xx);
yy=IapRead(xxAddr);
yy=yy<<8;
yy=yy+IapRead(xxAddr+1);
Display(0x42,xx); //当 xx=12000的时候,yy=11744;xx=15000,yy=14744,当xx=18000,yy=18000
Display(0x02,yy); //错在哪了呢 21000对21000,24000对23744
/*Display(2,xx);
Display(0x42,IapRead(xxAddr)); Display(0x48,IapRead(xxAddr+1)); */
key1Down=0; key1Up=0;
}
}
}
void TM0_Isr() interrupt 1
{
if(key1Up<10)
{
if(key1==0 && key1Down<10) key1Down++; //key1按下去抖
if(key1Down==10 && key1==1) key1Up++; //按键按下松开计一次按键过程
}
}
|