stc c语言编程,谁有STC 的 EEPROM C程序

STC的具体什么型号。因为04和12的 要写入的CMD不一样。

我先贴个 11F04E

//目标IC: STC-11F04E

//功能: EEPROM使用

//硬件:

//       P10-P12外接3个LED到正级

#include

sfr  IAP_DATA =   0xC2;

// 对对DATA FLASL/EEPROM读或者写的时候 数据全暂放的地方

sfr  IAP_ADDRH =   0xC3;

// 读写 地址的高8位

sfr  IAP_ADDRL =   0xC4;

// 读写 地址的底8位

sfr  IAP_CMD =   0xC5;

//命令模式寄存器

//0x00  待机模式

//0x01  对DATA FLASL/EEPROM 字节读

//0x02  对DATA FLASL/EEPROM 字节写

//0x03  对DATA FLASL/EEPROM 扇区搽

sfr  IAP_TRIG =   0xC6;

//命令触发寄存器

sfr  IAP_CONTR =   0xC7;

//IAP_CONTR.7  IPEN:读写功能允许为 1:允许  0:禁止

//IAP_CONTR.6  SWBS:。。。。。

#define uchar unsigned char

#define uint unsigned int

uchar  DATA;

sbit led1=P1^0;

sbit led2=P1^1;

sbit led3=P1^2;

void _delay_ms(uint time)

{

uint sj;

for(;time>0;time--)

{

for(sj=115;sj>0;sj--);

}

}

void  IAP_Disable()//关闭IAP

{

IAP_CONTR=0;  //关闭IAP

IAP_CMD=0;    //命令模式清0 可以不要

IAP_TRIG=0;     //  可以不要

IAP_ADDRH=0x80;   // 之向高地址 非EEPROM区域

IAP_ADDRL=0x00;   //  防止误操作

}

uchar IAP_read(uchar  addr)       ///IAP 读 程序  //读addr地址的数据 返回

{

IAP_CONTR=0x82;//使能IAP 660个时钟的速度

IAP_CMD=0x01  ;//命令模式是扇区读

IAP_ADDRH = (uchar)(addr >> 8);

IAP_ADDRL = (uchar)(addr & 0x00ff);

EA=0;

IAP_TRIG=0X5A;

IAP_TRIG=0XA5;

_delay_ms(1);

EA=1;

IAP_Disable();  //关IAP

return (IAP_DATA); //读数据

}

void IAP_SectorErase(uchar addr)   ///IAP  察除 程序  //察除addr地址数据

{

IAP_CONTR=0x82;//使能IAP 660个时钟的速度

IAP_CMD=0x03  ;//命令模式是扇区搽除

IAP_ADDRH = (uchar)(addr >> 8);

IAP_ADDRL = (uchar)(addr & 0x00ff);

EA=0;

IAP_TRIG=0X5A;

IAP_TRIG=0XA5;

_delay_ms(1);

EA=1;

IAP_Disable();  //关IAP

}

void  IAP_Program(uint addr, uchar dat)    ///IAP 写 程序  在addr地址 写入 dat数据

{

IAP_CONTR=0x82;//使能IAP 660个时钟的速度

IAP_CMD=0x02  ;//命令模式是扇区写

IAP_ADDRH = (uchar)(addr >> 8);

IAP_ADDRL = (uchar)(addr & 0x00ff);

IAP_DATA=dat;// 写dat数据

EA=0;

IAP_TRIG=0X5A;

IAP_TRIG=0XA5;

_delay_ms(1);

EA=1;

IAP_Disable();  //关IAP

}

void  main()

{

IAP_SectorErase(0);///察除0地址内容

IAP_SectorErase(1);///察除0地址内容

IAP_SectorErase(2);///察除0地址内容

IAP_Program(0,0x56);  //在0 1 2地址写如2个数据

IAP_Program(1,0x66);

IAP_Program(2,0x76);

if(IAP_read(0)==0x56)   led3=0;  //读3个数据 用LED判断数据有错误没/

if(IAP_read(1)==0x66)   led2=0;

if(IAP_read(2)==0x76)   led1=0;

while(1);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值