Pesquisar neste blog

08/03/2023

Memória eeprom com PIC 18F4550

Objetivo: Gravar um valor que tem + de 8 Bits na memoria eeprom

Código feito em CCS C Compiler

// COMO GRAVAR UM VALOR QUE TEM + de 8 Bits NA MEMÓRIA EEPROM
#include <18F4550.h>
#device adc = 10        // conversor analogico de 10 bits
# fuses HS, NOWDT, MCLR //clock de alta velocidade, sem hodc time, com reset setado
#use delay(clock = 20MHz)

#define LCD_DB0   PIN_D0
#define LCD_DB1   PIN_D1
#define LCD_DB2   PIN_D2
#define LCD_DB3   PIN_D3
#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5
#define LCD_DB6   PIN_D6
#define LCD_DB7   PIN_D7

#define LCD_E     PIN_E1
#define LCD_RS    PIN_E2

#include <flex_lcd.c>

void main(){
   
   unsigned int16 leitura;
   unsigned int baixo, alto;
   
   lcd_init();
   
   setup_adc( ADC_CLOCK_INTERNAL ); // modulo adc
   setup_adc_ports( AN0 );    // porta apenas AN0
   set_adc_channel( 0 );      // seta com 0
      
   while(true){
      
      leitura = read_adc();   // leitura do canal analógico
      
      if(input(PIN_B0) == 0){
      
         baixo = make8(leitura, 0); // função que pega variavel até 32 bits e separa parte 8 bits, 0 = 8 1° bits
         alto = make8(leitura, 1);   //extrai a parte + significativa de 8 bits
         
         write_eeprom(2, baixo);    // escreve no endereço 2
         delay_ms(10);
      
      }else{
         
         char letra = read_eeprom(0);
         baixo = read_eeprom(1);
         alto = read_eeprom(2);
         
         // 0b 1101 0001 0100 0001
         // 0100 0001 = menos siguinificativa
         // 1101 0001 = mais siguinificativa
         unsigned int16 salvo = make16(alto, baixo); // monta 1 número de 16 bits
         printf(LCD_PUTC, "\fLEITURA: %lu", leitura);
         printf(LCD_PUTC, "\nSALVO: %lu",  salvo);
         delay_ms(100);
      }
   }
}

Saída gerada no PicSimlab


Nenhum comentário: