سلام به همه دوستان
من یه برنامه نوشتن به زبون C و با کامپایلر C18 توی MPLABX با میکروی PIC18F67K22 هم کار میکنم
که توی آدرسی از EEPROM بنویسه و بخونه توی پروتئوس تست کردم مشکلی نداره روی میکرو هم ریختم اگر اول بنویسم و بعد بخونم کار میکنه
ولی وقتی که تغذیه مدارو قطع میکنم و فقط بخونم 0xFF میخونه
یعنی Data با قطع برق پاک میشه
برنامه رو میذارم دوستان لطف کنن ببینن مشکل کار چییه؟
من یه برنامه نوشتن به زبون C و با کامپایلر C18 توی MPLABX با میکروی PIC18F67K22 هم کار میکنم
که توی آدرسی از EEPROM بنویسه و بخونه توی پروتئوس تست کردم مشکلی نداره روی میکرو هم ریختم اگر اول بنویسم و بعد بخونم کار میکنه
ولی وقتی که تغذیه مدارو قطع میکنم و فقط بخونم 0xFF میخونه
یعنی Data با قطع برق پاک میشه
برنامه رو میذارم دوستان لطف کنن ببینن مشکل کار چییه؟
کد:
/*
* File: EEPROM.c
* Author: Hoax B0Y
*
* Created on January 31, 2013, 10:43 AM
*/
#include <p18f67k22.h>
#include <stdio.h>
#include <stdlib.h>
#include "EEPROM_RW.h"
#pragma config RETEN = OFF
#pragma config INTOSCSEL = HIGH
#pragma config SOSCSEL = DIG
#pragma config FOSC = INTIO2
#pragma config PLLCFG = OFF
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config BORPWR = HIGH
#pragma config RTCOSC = INTOSCREF
#pragma config DEBUG = ON
#pragma config PWRTEN = OFF
#pragma config BOREN = OFF
#pragma config WDTEN = OFF
#pragma config XINST = OFF
unsigned char c;
void main()
{
OSCCON = 0x72;
OSCTUNE |= 0x20;
Nop();
//EEPROM_Write(0,0x10,0x6D); //Write 0x34 to EEPROM address 0x12
Nop();
Nop();
c = EEPROM_Read(0,0x10); // Read EEPROM address 0x12 in to variable C
while (1)
{
}
}
کد:
/*
* File: EEPROM_RW.h
* Author: Hoax B0Y
*
* Created on January 31, 2013, 10:48 AM
*/
void EEPROM_Write(unsigned char addh,unsigned char addl, unsigned char W_Data);
unsigned char EEPROM_Read(unsigned char addh,unsigned char addl);
//This function Writes data to given address in internal EEPROM of PIC MCU
void EEPROM_Write(unsigned char addh,unsigned char addl, unsigned char W_Data)
{
unsigned char INTCON_SAVE;
EEADRH = addh;
EEADR = addl;
EEDATA = W_Data;
EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
EECON1bits.WREN = 1; // enable writes to internal EEPROM
PIR6bits.EEIF=0; //Clear EEPROM write complete flag.
INTCON_SAVE=INTCON; // Save INTCON register contants
INTCON=0; // Disable interrupts, Next two lines SHOULD run without interrupts
EECON2=0x55; // Required sequence for write to internal EEPROM
EECON2=0xaa; // Required sequence for write to internal EEPROM
EECON1bits.WR=1; // begin write to internal EEPROM
INTCON=INTCON_SAVE; //Now we can safely enable interrupts if previously used
Nop();
while (~PIR6bits.EEIF);//Wait till write operation complete
EECON1bits.WREN=0; // Disable writes to EEPROM on write complete (EEIF flag on set PIR2 )
PIR6bits.EEIF=0; //Clear EEPROM write complete flag. (must be cleared in software. So we do it here)
}
// This function reads data from address given in internal EEPROM of PIC
unsigned char EEPROM_Read(unsigned char addh,unsigned char addl)
{
EEADRH = addh;
EEADR = addl;
EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
EECON1bits.RD = 1; // EEPROM Read
Nop();
Nop();
return EEDATA; // return data
}





دیدگاه