1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > stc c语言编程 谁有STC 的 EEPROM C程序

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

时间:2024-01-24 00:03:23

相关推荐

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

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

我先贴个 11F04E

//目标IC: STC-11F04E

//功能: EEPROM使用

//硬件:

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

#include

sfrIAP_DATA = 0xC2;

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

sfrIAP_ADDRH = 0xC3;

// 读写 地址的高8位

sfrIAP_ADDRL = 0xC4;

// 读写 地址的底8位

sfrIAP_CMD = 0xC5;

//命令模式寄存器

//0x00待机模式

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

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

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

sfrIAP_TRIG = 0xC6;

//命令触发寄存器

sfrIAP_CONTR = 0xC7;

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

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

#define uchar unsigned char

#define uint unsigned int

ucharDATA;

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--);

}

}

voidIAP_Disable()//关闭IAP

{

IAP_CONTR=0;//关闭IAP

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

IAP_TRIG=0; //可以不要

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

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

}

uchar IAP_read(ucharaddr) ///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

}

voidIAP_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

}

voidmain()

{

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);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。