For now I'm doing it with a switch board...
Code: Select all
#include <system.h>
void setup_hardware(void)
{
trisb = 0xff;
trisa = 0xe0;
porta = 0x00;
}
void write_eeprom(unsigned char address, unsigned char data)
{
while (eecon1 & WR);
eeadr = address;
eedata = data;
clear_bit(eecon1, EEPGD);
set_bit(eecon1, WREN);
clear_bit(intcon, GIE);
eecon2 = 0x55;
eecon2 = 0xAA;
set_bit(eecon1, WR);
set_bit(intcon, GIE);
clear_bit(eecon1, WREN);
}
unsigned char read_eeprom(unsigned char address)
{
unsigned char data = 0;
eeadr = address;
clear_bit(eecon1, EEPGD);
set_bit(eecon1, RD);
data = eedata;
return data;
}
int read_eeprom_int(unsigned char address)
{
unsigned char high, low;
int data;
low = read_eeprom(address);
high = read_eeprom(address+1);
data = high * 256;
data = data + low;
return data;
}
void write_eeprom_int(unsigned char address, int data)
{
unsigned char high, low;
low = data % 256;
high = data / 256;
write_eeprom(address, low);
write_eeprom(address+1, high);
}
unsigned char get_digit(void)
{
unsigned char count = 0;
unsigned char oldv, newv;
oldv = portb ^ 0x00;
while(count < 20)
{
newv = portb ^ 0x00;
if (oldv == newv)
{
count++;
}
else
{
count = 0;
oldv = newv;
}
}
return oldv;
}
int get_value(void)
{
int total = 0, x;
unsigned char i, k;
for(i=0;i<4;i++)
{
while(get_digit() == 0);
k = get_digit();
total = total * 10;
total = total + k;
for(x=0;x<16000;x++);
}
return total;
}
void main(void)
{
setup_hardware();
int key, attempt, v;
write_eeprom_int(1, 1536);
key = read_eeprom_int(1);
if (key == 1536)
{
porta = 0x01;
}
}