#include <16f876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock=4000000)
#use standard_io(C)
#use standard_io(A)
#include <flex_lcd.c>
#define use_portb_lcd TRUE
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, FORCE_SW)
void error(void);
void configurar(void);
void memorizar(void);
void trabajar(void);
void rs232(void);
int factor[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int lat=0,flag=0,ti=0,err=0;
int rx=1,ry=1,z=1,zz=1,menu=0,pas=0,pul=0,avc=0,u=0,w=0,chek=0,menu2=0;
char y=1,LAST_VOLUME=0;
signed char x=1;
boolean v=0;
#int_timer0
void interrupcion()
{
if(flag==20){
lat++;
flag=0;
if(lat>15)
lat=0;
}
set_timer0(61);
flag++;
if(ti==1)
err++;
}
void main(void)
{
set_tris_c(0b00000000);
set_tris_a(0xff);
enable_interrupts(INT_TIMER0);
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
set_timer0(61);
lcd_init();
LAST_VOLUME=0;
rx = read_EEPROM (LAST_VOLUME);
LAST_VOLUME++;
ry = read_EEPROM (LAST_VOLUME);
LAST_VOLUME++;
z = read_EEPROM (LAST_VOLUME);
LAST_VOLUME++;
zz = read_EEPROM (LAST_VOLUME);
LAST_VOLUME=0;
puts("Maquina de Afilar JCS, S.L.,\n");
puts("Pulsa \" R \" para manejar desde el pc");
do{
if(!input(pin_a0)){
while(!input(pin_a0)){}
menu++;
lcd_putc("\f");
}
configurar();
}while(true);
}
void configurar(void)
{
switch(menu){
case 0: lcd_gotoxy(1,1);
lcd_putc("Afiladora JCG,SL
por: Juan Cruz");
flag=0;
lat=0;
err=0;
pas=0;
pul=0;
avc=0;
u=0;
w=0;
v=0;
output_c(0x00);
break;
case 1: lcd_gotoxy(1,1);
lcd_putc("Tiempo
Barrido:");
lcd_gotoxy(10,2);
printf(lcd_putc,"%u",factor[ rx ]);
if(!input(pin_a1)){
while(!input(pin_a1)){}
lcd_putc("\f" );
rx++;
if(rx>15)
rx=1;
}
break;
case 2: lcd_gotoxy(1,1);
lcd_putc("Pasadas para
avance:");
lcd_gotoxy(10,2);
printf(lcd_putc,"%u",factor[ ry ]);
if(!input(pin_a1)){
while(!input(pin_a1)){}
lcd_putc("\f" );
ry++;
if(ry>15)
ry=1;
}
break;
case 3: lcd_gotoxy(1,1);
lcd_putc("Avance en
decimas:");
lcd_gotoxy(10,2);
printf(lcd_putc,"%u",factor[ z ]);
if(!input(pin_a1)){
while(!input(pin_a1)){}
lcd_putc("\f" );
z++;
if(z>10)
z=1;
}
break;
case 4: lcd_gotoxy(1,1);
lcd_putc("Cantidad de
Avances:");
lcd_gotoxy(10,2);
printf(lcd_putc,"%u",factor[ zz ]);
if(!input(pin_a1)){
while(!input(pin_a1)){}
lcd_putc("\f" );
zz++;
if(zz>15)
zz=1;
}
break;
case 5:
memorizar();
}
}
void memorizar(void)
{
if(chek==0){
lcd_gotoxy(1,1);
lcd_putc("Pulse: Guardar>+
Empezar>Menu");
if(!input(pin_a1)){
LAST_VOLUME=0;
write_eeprom(LAST_VOLUME,rx);
LAST_VOLUME++;
write_eeprom(LAST_VOLUME,ry);
LAST_VOLUME++;
write_eeprom(LAST_VOLUME,z);
LAST_VOLUME++;
write_eeprom(LAST_VOLUME,zz);
while(!input(pin_a1)){}
lcd_putc("\f");
chek=1;
}
if(!input(pin_a0)){
while(!input(pin_a0)){}
lcd_putc("\f");
chek=1;
}
}
if(chek==1){
trabajar();
}
}
void trabajar(void)
{
if(menu2==0){
lcd_gotoxy(1,1);
lcd_putc("Ti.Pas.Avan.Pul." ) ;
lcd_gotoxy(1,2);
printf(lcd_putc,"%u",lat);
lcd_gotoxy(4,2);
printf(lcd_putc,"%u",pas / 2);
lcd_gotoxy(8,2);
printf(lcd_putc,"%u",avc);
lcd_gotoxy(13,2);
printf(lcd_putc,"%u",pul);
enable_interrupts(global);
if(lat==rx){
lat=0;
if(avc<=zz)
v++;
pas++;
}
if(avc<=zz){
if(pas-ry==ry){
avc++;
pas=0;
pul=0;
if(avc<=zz)
output_high(pin_c1);
ti=1;
}
}
if(avc>zz){
v=1;
flag=0;
w=1;
pas=0;
output_high(pin_c2);
ti=1;
if(pul==z * zz + 20){
output_low(pin_c2);
ti=0;
avc=0;
lcd_putc("\f");
lat=0;
pul=0;
menu2=1;
}
}
}
if(menu2==1){
lcd_gotoxy(1,1);
lcd_putc("TERMINADO");
lcd_gotoxy(1,2);
lcd_putc("Pulsos:");
lcd_gotoxy(10,2);
printf(lcd_putc,"%u",pul);
if(!input(pin_a0)){
while(!input(pin_a0)){}
u=1;
output_high(pin_c1);
}
}
if(u==0){
if(w==0){
if(!input(pin_a2)){
err=0;
delay_ms(130);
while(!input(pin_a2)){}
pul++;
if(pul==z){
pul=0;
output_low(pin_c1);
ti=0;
}
}
}
if(w==1){
if(!input(pin_a2)){
err=0;
delay_ms(130);
while(!input(pin_a2)){}
pul++;
if(pul>z * zz + 20)
pul=0;
ti=0;
}
}
}
if(u==1){
ti=1;
if(!input(pin_a2)){
err=0;
delay_ms(130);
while(!input(pin_a2)){}
pul++;
if(pul==20){
disable_interrupts(global);
pul=0;
menu2=0;
lcd_putc("\f" );
ti=0;
u=0;
chek=0;
menu=0;
}
}
}
if(!input(pin_a0)){
menu2++;
lcd_putc("\f" );
}
while(!input(pin_a0)){}
if(menu2>1)
menu2=0;
if(v==1)
output_high(pin_c0);
else
output_low(pin_c0);
if(err>9){
lcd_putc("\f");
error();
}
}
void error(void)
{
disable_interrupts(global);
printf("Ha fallado el final de carrera");
do{
output_c(0x00);
lcd_gotoxy(1,1);
lcd_putc("ERROR EN A1
REVISE, REINICIE");
}while(true);
}