找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5048|回复: 7
收起左侧

stc EEPROM 读写错误,折腾一天,换了个下载软件,好了

[复制链接]
ID:218365 发表于 2017-9-26 22:55 | 显示全部楼层 |阅读模式
本帖最后由 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++;         //按键按下松开计一次按键过程
        }
}
        

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:123289 发表于 2017-9-27 07:09 | 显示全部楼层
你要达成的目的是什么?现实情况是什么?
回复

使用道具 举报

ID:218365 发表于 2017-9-27 08:12 | 显示全部楼层
yzwzfyz 发表于 2017-9-27 07:09
你要达成的目的是什么?现实情况是什么?

很简单,就是试试如何写入一个整数,
回复

使用道具 举报

ID:213173 发表于 2017-9-27 09:33 | 显示全部楼层
程序没有看明白,但是EEPROM读写一次只能1个字节,大数值需要分解为多字节读写。
回复

使用道具 举报

ID:218365 发表于 2017-9-27 12:12 | 显示全部楼层
本帖最后由 ZXHREG 于 2017-9-27 19:29 编辑
wulin 发表于 2017-9-27 09:33
程序没有看明白,但是EEPROM读写一次只能1个字节,大数值需要分解为多字节读写。

是下载软件的事,换了低版本没事了
回复

使用道具 举报

ID:218365 发表于 2017-9-27 14:59 | 显示全部楼层
本帖最后由 ZXHREG 于 2017-9-27 19:30 编辑
wulin 发表于 2017-9-27 09:33
程序没有看明白,但是EEPROM读写一次只能1个字节,大数值需要分解为多字节读写。

程序就是想测试如何写入双字节整数



回复

使用道具 举报

ID:213173 发表于 2017-9-27 17:26 | 显示全部楼层
ZXHREG 发表于 2017-9-27 14:59
程序就是想测试如何写入双字节整数
整数 为 uint x, eeprom 地址 xAddr;

建议参考STC程序范例“EEPROM多字节连续操作”
回复

使用道具 举报

ID:218365 发表于 2017-9-27 23:00 | 显示全部楼层
wulin 发表于 2017-9-27 17:26
建议参考STC程序范例“EEPROM多字节连续操作”

应该是最新的下载软件在设置eeprom大小上出现问题,在512字节范围内没有问题,超过512,会出错,换了低版本就没问题了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表