Este é um pequeno programa para escrever e ler endereços da EEPROM de um PIC12F675.
O compilador é o MPLAB XC8, que já possui umas macros para fazer isto... mas optei por ser eu mesmo a fazê-las.
A descrição é simples, em escrita ele vai tirando 255 ao valor a aguardar e vai incrementando o número do endereço. Quando termina guarda o número do último endereço no endereço zero.
Aquando da leitura, é lido o endereço zero, que me diz qual é o ultimo endereço a ler e após isso são somados todos os valores (guardados em cada endereço) até lá.
#include <xc.h>

__CONFIG(FOSC_INTRCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF);


#define _XTAL_FREQ 4000000


EEPROM_escrita(unsigned int num)
{
signed char i;

i=1;
while(num>255)
{
num=num-255;

//escrita na EEPROM
PIR1bits.EEIF=0;
EEADR=i;
EEDATA=255;
EECON1bits.WREN=1;
EECON2=0x55;
EECON2=0xAA;
EECON1bits.WR=1; //clear por hardware
while(!PIR1bits.EEIF);

i++;
}

//escrita na EEPROM
PIR1bits.EEIF=0;
EEADR=i;
EEDATA=num;
EECON1bits.WREN=1;
EECON2=0x55;
EECON2=0xAA;
EECON1bits.WR=1; //clear por hardware
while(!PIR1bits.EEIF);

//escrita na EEPROM
PIR1bits.EEIF=0;
EEADR=0;
EEDATA=i;
EECON1bits.WREN=1;
EECON2=0x55;
EECON2=0xAA;
EECON1bits.WR=1; //clear por hardware
while(!PIR1bits.EEIF);
}

unsigned int EEPROM_leitura(void)
{
unsigned char i;
unsigned int num;

num=0;

EEADR=0;
EECON1bits.RD=1;
i=EEDATA; //numero de endereços

while(i>0)
{
EEADR=i;
EECON1bits.RD=1;
num+=EEDATA;
i --;
}

return num;
}

void main()
{
unsigned int tempo;

GPIO=0b000000;
CMCON=0b00000000;
TRISIO=0b00001000;

//ADC
ANSEL=0b00000000;


EEPROM_escrita(1000);

tempo=EEPROM_leitura();

__delay_ms(100);


while(1);

}
Diagrama de blocos do PIC12F675.

0 Responses so far.

Enviar um comentário