27 de mar. de 2014

Escrevendo e Lendo a EEprom do PIC16F628 em 16bits

Olá pessoal.
Vou postar aqui para vocês de como se  ler e escrever na EEprom  do  microcontrolador PIC16F628A.

Antes de começar a explicar, já vou  dizendo que sou ainda aprendiz de programação em linguagem C,e que estudo por contra própria lendo apostilas e exemplos pela Net.
O compilador ao qual eu melhor me adaptei foi o MIKROC FOR PIC V8.2, é verdade que já existe uma nova versão deste compilador. 


Aqui abaixo vou colocar um exemplo que aprendi,e que poderá servir de base ou ate mesmo ajudar
a quem esta  aprendendo ou servir de ideia para um outro projeto.
Este foi o meu segundo código escrito para acessar a EEprom do PIC16F628A  em 16bits, algumas informações da Net em linguagem C mas nada de concreto simplesmente ideias, mas este código que vou postar ele realmente funciona porque eu já o testei no
microcontrolador PIC16F628.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                 COMO ESCREVER NA EEPROM   PIC16F628A  em 16BITS
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  EEPROM Como Escrever e ler a memória do microcontrolador.
//
//  Configuração:
//  MCU:            PIC16F628A
//  Oscillator:     4.MHz   Interno
//  Ext. Modules:   LCD 2x16
//  SW:             MikroC v8.1

//----------------------- Declarações de Variaveis -----------------------------
    unsigned int dados=0,EEpromH=0,EEpromL=0,EscreveValor=0,EEpromWH,EEpromWL;
//---------------------- Conversor de string para o LCD -----------------------
    unsigned char   longstr[13];
//--------------- funções void Leitura e Escrita ------------------------------

    void EEprom16_Read(void){
    dados=(EEpromH<<8)+EEpromL;
    //Lê Dois bytes da EEPROM interna
    EEpromL = EEPROM_Read(0x00); // Lê o endereço 0x00 e atribuir valor para EEpromL
    delay_ms(20);
    EEpromH = EEPROM_Read(0x01); // Lê o endereço 0x01 e atribuir valor para EEpromH
    delay_ms(20);
    }

    void EEprom16_Write(void){
    EEpromWL=EscreveValor;
    EEpromWH=(EEpromWL/256);
    //Escreve Dois bytes na EEPROM interna
    EEPROM_Write(0x00, EEpromWL); //Escrever na EEPROM interna no endereço 0x00
    delay_ms(20);
    EEPROM_Write(0x01, EEpromWH); //Escrever na EEPROM interna no endereço 0x01
    delay_ms(20);
    }
//----------------------------- Main Comando -----------------------------------
    void  main(){
    CMCON = 7;  // comparador off, digital I/O
    TRISB = 0;
    PORTB = 0;
    TRISA = 0;
    PORTA = 0;
//------------------------  Configurações do LCD -------------------------------
//  Lcd_Custom_Config(&PORTB,D7,D6,D5,D4 ,&PORTA,RS,RW,E);

    Lcd_Custom_Config(&PORTB,5,4,6,7 ,&PORTA ,7,4,6 );  // Initialize Lcd
    Lcd_Custom_Cmd(Lcd_CURSOR_OFF);       // Desliga o cursor do LCD
    Lcd_Custom_Out(1,1, "ESCREV NA EEPROM");
    Lcd_Custom_Out(2,2, "Info-Tecniko");
    Delay_ms(1800);      // Tempo para visualizar no LCD
    Lcd_Custom_Cmd(Lcd_Clear);            // Limpa o LCD
    Lcd_Custom_Out(1,2, "Info-Tecniko");
//---------------------- Execução do Programa ----------------------------------
    while(1){

    EscreveValor=523;   // Aqui Voce Escreve o Valor de 0 a 65535

    EEprom16_Write();
    EEprom16_Read();

    WordToStr(dados,longstr);
    Lcd_Custom_Out(2,4,longstr);   //LCD mostra valor de 0 a 65535

    } // Fim Loop while
    } // Fim Void Man

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

Nenhum comentário:

Postar um comentário