// eeprom_16bits plus rs232
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
char Keypress = 0x00;
char Command = 0x00;
long x,y;
#int_rda
void serial_isr() {
Keypress=0x00;
if(kbhit()){
if(Keypress!=0x00){
if(Keypress=='r'){
Command=Keypress;
}
keypress=0x00;
}
}
}
void write_eeprom_16bits(int address, long* val){
int pLow, pHigh;
printf("write_eeprom_16bits( address=%u, val=%lx)\r\n",address
,val
); pLow = val;
pHigh = val>>8;
printf("write_eeprom( address=%u, val=%x)\r\n",address
,pHigh
); write_eeprom(address,pHigh);
delay_ms(12);
++address;
printf("write_eeprom( address=%u, val=%x)\r\n",address
,pLow
); write_eeprom(address,plow);
delay_ms(12);
}
long read_eeprom_16bits(int address){
int pLow, pHigh;
long result;
printf("read_eeprom_16bits( address=%u)\r\n",address
); pHigh = read_eeprom(address);
printf("read_eeprom( address=%u) = %x\r\n",address
,pHigh
); ++address;
pLow = read_eeprom(address);
printf("read_eeprom( address=%u) = %x\r\n",address
,pLow
); result=(pHigh<<8);
result+=pLow;
return result;
}
void main(){
disable_interrupts(global);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_0(RTCC_OFF);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
set_tris_e(0b00010000);
set_tris_c(0b10000000);
delay_ms(1000);
output_High(PIN_E0);
output_High(PIN_E1);
output_High(PIN_E2);
printf("18F4550 in RRBOARAD2\r\n"); printf("Test EEPROM with 18 bits\r\n\n"); delay_ms(500);
output_Low(PIN_E0);
output_Low(PIN_E1);
output_Low(PIN_E2);
Command=0x00;
enable_interrupts(int_rda);
enable_interrupts(global);
x=0x1f2f;
y=0;
printf("initial 16 bits x = %lx (%lu), y = %lx (%lu)\r\n",x
,x
,y
,y
); write_eeprom_16bits(0,x);
while(TRUE) {
if(Command=='r'){
Command=0x00;
y=read_eeprom_16bits(0);
printf("final 16 bits x = %lx (%lu), y = %lx (%lu)\r\n",x
,x
,y
,y
); }
}
}