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:
Postar um comentário