سلام به همه دوستان
من یه برنامه نوشتن به زبون 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 }
دیدگاه