/
函数名: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单片机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)