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