PIC18单片机怎么读写EEPROM,我使用的是18F4520的单片机,求一个读写EEPROM的程序实例

PIC18单片机怎么读写EEPROM,我使用的是18F4520的单片机,求一个读写EEPROM的程序实例,第1张

/

函数名:EE_readbyte

功 能:片内EEPROM 读1字节

说 明:Read_AddrH:待写入的高地址;Read_Addr:待写入的低地址

函数执行完返回一个存放在该地址处的值

/

uchar EE_ReadByte(uchar Read_AddrH,uchar Read_Addr)

{

EEADRH = Read_AddrH; //写入高地址

EEADR = Read_Addr; //写入低地址

EECON1bitsEEPGD = 0; //访问EEPROM存储区

EECON1bitsCFGS = 0; //访问EEPROM或程序区

EECON1bitsRD = 1;

return EEDATA;

}

/

函数名:EE_writebyte

功 能:片内EEPROM 写1字节

说 明:Write_AddrH:待写入的高位地址;Write_Addr:待写入的低位地址;Write_Byte:待写入的字节

/

void EE_WriteByte(uchar Write_AddrH,uchar Write_Addr,uchar Write_Byte)

{

ClrWdt(); //喂狗

while(EECON1bitsWR);

EEADRH = Write_AddrH; //写入高地址

EEADR = Write_Addr; //写入低地址

EEDATA = Write_Byte; //写入数据

EECON1bitsEEPGD = 0; //访问EEPROM存储区

EECON1bitsCFGS = 0; //访问EEPROM或程序区

EECON1bitsWREN = 1; //充许擦写

INTCONbitsGIE = 0; //禁止所有中断

EECON2 = 0x55; //写入密钥

EECON2 = 0xaa;

EECON1bitsWR = 1; //开始写 *** 作

Nop();

Nop();

INTCONbitsGIE = 1; //开中断

EECON1bitsWREN = 0; //禁止擦写

while(EECON1bitsWR) //等待写完成

{

;

}

}

/

函数名:EE_WriteArray

功 能:写入数组数据到EEPROM

说 明:AddrH:EEPROM起始地址高字节,Addr:EEPROM起始地址低字节

WriteByte[]:待存储的数据存放数组

LenArray:待存储的数组长度

举例:存放地址0x0020---0x0029;存放数据array[10]

/

void EE_WriteArray(uchar AddrH,uchar Addr,uchar WriteArray[],uchar LenArray)

{

uchar tempH,tempL,tempByte;

uint i=0;

tempH = AddrH;

tempL = Addr;

for(i=0;i<LenArray;i++)

{

tempByte = WriteArray[i];

EE_WriteByte(tempH,tempL,tempByte);

tempL++;

}

}

/

函数名:EE_ReadArray

功 能:写入数组数据到EEPROM

说 明:AddrH:EEPROM起始地址高字节,Addr:EEPROM起始地址低字节

ReadByte[]:待存储的数据存放数组

LenArray:待存储的数组长度

举例:存放地址0x0020---0x0029;存放数据array[10]

/

void EE_ReadArray(uchar AddrH,uchar Addr,uchar ReadArray[],uchar LenArray)

{

uchar tempH,tempL,tempByte;

uint i;

tempH=AddrH;

tempL=Addr;

for(i=0;i<LenArray;i++)

{

tempByte=EE_ReadByte(tempH,tempL);

ReadArray[i]=tempByte;

tempL++;

}

}

设置TRIS为输入

设置ANSEL为digital

参考“>

的120页, 1222

如果都做了还不行,那应该是芯片的问题。

另外,如果要读取编程口MCLR, 那么还需要额外的设置。

MOVF 30H,W 将寄存器30H的值放入W寄存器

ADDWF 50H,F 把W寄存器与寄存器50H的值相加,结果放在50H

BTFSS STATUS,C 判断STATUS寄存器里的C位是否置1(这是一个进位标志,判断30H和50H的值相加时候有没有产生进位),如果为1则跳过下一条指令(GOTO LOOP)

INCF 20H,F 寄存器20H的值加1,结果存在20H(这是因为低位30H和50H相加时候产生进位了,所以高位要加一)

MOVF 20H,W 把20H的值放入W寄存器

ADDWF 40H,F 20H和40H的值相加,结果保存在40H

其实整个程序的意思就是低位相加:30H+50H

再进行高位相加:20H+40H

中间加入判断了一下30H+50H的时候有没有进位产生

程序没有问题。

以上就是关于PIC18单片机怎么读写EEPROM,我使用的是18F4520的单片机,求一个读写EEPROM的程序实例全部的内容,包括:PIC18单片机怎么读写EEPROM,我使用的是18F4520的单片机,求一个读写EEPROM的程序实例、增强型PIC单片机IO口读取问题、PIC单片机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9307134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存