找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1|回复: 0
打印 上一主题 下一主题
收起左侧

最简单的STC8单片机EEPROM读写功能验证代码,无需串口回传

[复制链接]
跳转到指定楼层
楼主
ID:1155837 发表于 2025-7-4 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段代码用于验证EEPROM功能,只需要测试IO电平就可以验证EEPROM读写代码是否正常,使用了一个中间值A,先把0X0A(十进制10)写入EEPROM的0100H,然后再读取把这个值赋予给A,然后再赋予给P3寄存器,改变预期的IO电平。只要测量到IO电平改变,就能证明EEPROM被正确的读写。
#include "STC8G.H"
#include "intrins.H"
unsigned int addr = 0x0100;//EEPROM写入地址为0100H
void IAP_OPERATE(void){//IAP操作集成,每次EEPROM操作都需要调用这个
    IAP_TPS = 0X06;
    IAP_CONTR = 0X80;//使能eeprom操作
    IAP_ADDRL =addr; //取低8位
    IAP_ADDRH =addr >> 8;//取高8位
    IAP_TRIG = 0X5A;
    IAP_TRIG = 0XA5;//写完触发命令后,CPU会进入IDLE,读完才会恢复,无需等待标志
    _nop_();_nop_();_nop_();_nop_();
}
void IAP_IDLE(){//IAP关闭
    IAP_CONTR = 0X00;
    IAP_CMD = 0X00;
    IAP_TRIG = 0X00;
    IAP_ADDRH = 0X80;//将地址设置到非IAP区
    IAP_ADDRL = 0X00;
    IAP_DATA = 0X00;
}
void EEPROM_ERASE(void){//擦除EEPROM
    IAP_CMD = 0X03;//擦除命令
    IAP_OPERATE();
    IAP_IDLE();
}
void EEPROM_WRITE(unsigned char B){
    EEPROM_ERASE();//先擦除
    IAP_DATA = B;//将计数器值存储在eeprom数据寄存器中
    IAP_CMD = 0X02;//写命令
    IAP_OPERATE();
    IAP_IDLE();
}
unsigned char A;//中间值A
void EEPROM_READ(void){
    IAP_CMD = 0X01;//EEPROM读命令
    IAP_OPERATE();
    A = IAP_DATA;//这里可以写想赋予给的值
    IAP_IDLE();
}
void main(void){
    P3 = 0X0F;
    P3M0 = 0X00;
    P3M1 = 0X00;
    EEPROM_WRITE(0X0A);//1010,应该在P33和P31测得高电平
    EEPROM_READ();
    P3 = A;
    while(1);
    }



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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