本帖最后由 ZXHREG 于 2017-9-27 19:28 編輯
各位如果使用stp-isp 6.86F 的注意,是不是eeprom設(shè)置不正常
各位大神看看我這程序錯哪了,是eeprom 讀寫驗證過了沒有問題,程序主要是移位操作,沒有復(fù)雜的地方;
直接看while()循環(huán)部分吧,別的地方不重要
#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; //設(shè)置定時器模式 T0GATE=0,T0_C/T=0,T0M1=0,T0M0=0;16位自動重裝模式
TL0 = 0x00; //設(shè)置定時初值
TH0 = 0xDC; //設(shè)置定時初值
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++; //按鍵按下松開計一次按鍵過程
}
}
|