hola ..por cuestiones personales no pude contestar antes ...estudiando un poco el tema considere q seria mejor hacer una INT_EXT (por RB0)...ya q me da miedo q RB5,RB6,RB7,me entre ruido ....(no quiere entrar en la interrupcion)..todo esto simulado en PROTEUS ...
les pego todo el codigo para q sea mas claro todo ...
//------Directivas para el compilador--------
#include <16f877a.h> //PIC utilizado
#fuses XT,NOWDT,NOPROTECT,NOLVP //Configuramos los fuses
#use delay (clock=4000000) //Oscilador a 4Mhz
#use fast_io(A) //Optimizamos E/S del PORTA
//#use standard_io(B)
#use fast_io(B) //Optimizamos E/S del PORTB
#use fast_io(C) //Optimizamos E/S del PORTC
#use fast_io(D) //Optimizamos E/S del PORTD
#use fast_io(E) //Optimizamos E/S del PORTE
#INCLUDE "lcd.c" //Incluyo LCD.C
//------Prototipos de funciones-----
void corrigo_salida(void);
void lcd_saludo_inicial(void);
void inicio_proceso(void);
void busca_pica1(void);
void nohay_pica1(void);
int lleno_agua(void);
int calor_agua(void);
int lavando_pica1(void);
void busca_pica2(void);
int lavando_pica2(void);
//VARIABLES GLOBALES
int vhaypica1 ; //ESTAS VARIABLES VOY HACER Q SI HAY UN 0 ES POR Q NO SE CARGO EL
int vhayagua ; //AGUA(CARGO EL AGUA Y PONGO UN 1 EN LA VARIABLE)Y ASI CADA VES Q PASA
int vhaycalor ; //UNA PICA SI LA VARIABLE ESTA EN 1 NO CARGA PASA AL LAVADO(O SIMPLEMENTE
int paso_pica1 ; //LO USO CON EL SENSOR 1 DE PICA Y VA A PASAR UNA SOLA VES Y DESPUES ME
long cant_pica ;
//INTERRUPCION RB0---------------------
#INT_EXT
void isr(void) {
delay_ms(20); //antirrebote
if(input(PIN_A3)==1) output_low(PIN_C0); //paro la cinta
if(input(PIN_A3)==1)vhaypica1=1;
if(input(PIN_A3)==1) cant_pica++;
}
// #INT_EXT
//void
//{
//if (!bit_test(PIN_A2)) {
// output_bit( PIN_A2, 0);
//Ddelay_ms(1000);
//direccion=1;
/// }
// }
//------Programa principal----------
void main(void) {
//------Puertos y pines-------------
#byte PORTA=0x05
#byte PORTB=0x06
#byte PORTC=0x07
#byte PORTD=0x08
#byte PORTE=0x09
set_tris_A(0xFF); //PUERTO A como entrada.
set_tris_B(0xFF); //PUERTO B como entrada.
set_tris_C(0x90); //PUERTO C 0,1,2,3 como salida y 4,5,6,7 como entrada
set_tris_D(0x108); //PUERTO D como salida
set_tris_E(0xFF); //PUERTO E 3 como entrada y 0,1,2,4,5,6,7 como salida
ext_int_edge(L_TO_H);
disable_interrupts(INT_EXT);
disable_interrupts(GLOBAL);
//-----Inicializo el LCD y muestro el saludo inicial----------
corrigo_salida();
lcd_init();
lcd_saludo_inicial();
inicio_proceso();
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
busca_pica1();
lleno_agua();
calor_agua();
lavando_pica1();
buscapica2:
busca_pica2();
lavando_pica2();
goto buscapica2;
}
//------------------------------------------------------------------------------
//FUNCIONES
//------------------------------------------------------------------------------
//----IMPRIME SALUDO INICIAL.-------------
void lcd_saludo_inicial(void) {
lcd_gotoxy(4,1);
Lcd_putc ("LAVAMATIC"); //Escribo en la primera fila
lcd_gotoxy(3,2); //columna 4, fila 2
Lcd_putc( "VERSION 1.00"); //Escribo en la segunda fila
delay_ms(2000); //Espero tres segundos
}
//-----INICIO PROCESO------------------
void inicio_proceso(void) {
Lcd_putc( "\f"); //Limpio pantalla
salta:
lcd_gotoxy(3,1);
Lcd_putc ("PRESIONE EL"); //Escribo en la primera fila
lcd_gotoxy(2,2); //columna 2, fila 2
Lcd_putc( "BOTON *INICIO*"); //Escribo en la segunda fila
if(!input(PIN_A0)) //COMPRUEBO Y NIEGO LA SALIDA DE RA0
{goto salta; }
Lcd_putc( "\f"); //Limpio pantalla
}
//----PONGO EN CERO PINES--------------
void corrigo_salida(void)
{
output_low(PIN_C0);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
}
//-------BUSCA PICA1--------------------
void busca_pica1(void) {
long i ;
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(5,1);
Lcd_putc ("BUSCANDO"); //o en la primera fila
lcd_gotoxy(2,2); //columna 4, fila 2
Lcd_putc( "PICADORA 1"); //Escribo en la segunda fila
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
output_high(PIN_C0); //mueve cinta tramsportadora
delay_ms(2500); //Espero tres segundos
for (i==0 ; i<1600 ; i++) //con el valor de i regulo el tiempo
{ //en que busco la pica
delay_ms(50);
IF(vhaypica1==1) //si hay vhaypica1=1 ,i=2536 y salgo
{ //del bucle for
i=1600;
}
}
IF(vhaypica1==0)
nohay_pica1();
}
//-------BUSCA PICA2--------------------
void busca_pica2(void) {
long i ;
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(5,1);
Lcd_putc ("BUSCANDO"); //o en la primera fila
lcd_gotoxy(3,2); //columna 4, fila 2
cant_pica++;
printf(lcd_putc, "PICADORA %lu",cant_pica); //Escribo en la segunda fila
cant_pica--;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
output_high(PIN_C0); //mueve cinta tramsportadora
delay_ms(2500); //Espero tres segundos
for (i==0 ; i<80 ; i++) //con el valor de i regulo el tiempo
{ //en que busco la pica
delay_ms(80);
IF(vhaypica1==1) //si hay vhaypica1=1 ,i=2536 y salgo
{ //del bucle for
i=80;
}
}
IF(vhaypica1==0)
nohay_pica1();
}
//--------LLENO DE AGUA------------------
int lleno_agua(void) {
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(4,1);
Lcd_putc ("LLENANDO "); //Escribo en la primera fila
lcd_gotoxy(4,2); //columna 4, fila 2
Lcd_putc( "DE AGUA"); //Escribo en la segunda fila
delay_ms(1000); //Espero tres segundos
salta2:
output_high(PIN_C1); //conecto bomba agua
if(!input(PIN_A1)) //COMPRUEBO Y NIEGO LA SALIDA DE RA0
{goto salta2; }
output_low(PIN_C1); //apago bomba agua
vhayagua =1 ;
return vhayagua;
}
//----------CALIENTO AGUA--------------------
int calor_agua(void) {
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(3,1);
Lcd_putc ("CALENTANDO "); //Escribo en la primera fila
lcd_gotoxy(4,2); //columna 4, fila 2
Lcd_putc( "EL AGUA"); //Escribo en la segunda fila
delay_ms(1000); //Espero tres segundos
salta3:
output_high(PIN_C2); //enciendo resistencias
if(!input(PIN_A2)) //COMPRUEBO Y NIEGO LA SALIDA DE RA0
{goto salta3; }
output_low(PIN_C2); //apago resistencias
vhaycalor=1;
return vhaycalor;
}
//----------LAVANDO PICADORA 1-----------------
int lavando_pica1(void){
long cant_pica1 ;
cant_pica1 = cant_pica ;
disable_interrupts(GLOBAL); //deshabilito las interrupciones
disable_interrupts(INT_EXT); //deshabilito las interrupciones
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(3,1);
Lcd_putc ("LAVANDO "); //Escribo en la primera fila
lcd_gotoxy(3,2); //columna 4, fila 2
printf(lcd_putc, "PICADORA %lu",cant_pica1); //Escribo en la segunda fila
delay_ms(100);
output_high(PIN_C3); //conecta leva, cepi y agua presion
delay_ms(6000); //Espero seis segundos
output_low(PIN_C3); //apago leva y cepillo
vhaypica1=0;
return paso_pica1;
}
//----------LAVANDO PICADORA 2-----------------
int lavando_pica2(void){
long cant_pica1 ;
cant_pica1 = cant_pica ;
disable_interrupts(GLOBAL); //deshabilito las interrupciones
disable_interrupts(INT_EXT); //deshabilito las interrupciones
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(3,1);
Lcd_putc ("LAVANDO "); //Escribo en la primera fila
lcd_gotoxy(4,2); //columna 4, fila 2
printf(lcd_putc, "PICADORA %lu",cant_pica1); //Escribo en la segunda fila
delay_ms(100);
output_high(PIN_C3); //conecta leva, cepi y agua presion
delay_ms(6000); //Espero seis segundos
output_low(PIN_C3); //apago leva y cepillo
vhaypica1=0;
return vhaypica1;
}
//------NO HAY PICA1-------------------
void nohay_pica1(void) {
long cant_pica1 ;
cant_pica1 = cant_pica ;
disable_interrupts(GLOBAL); //deshabilito las interrupciones
disable_interrupts(INT_EXT);
// disable_interrupts(INT_RTCC);
output_low(PIN_C0); //apago la cinta
repito:
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(3,1);
Lcd_putc ("NO HAY JUEGO"); // la primera fila
lcd_gotoxy(3,2); //columna 4, fila 2
Lcd_putc( "DE PICADORA"); //bo en la segunda fila
delay_ms(1000); //Espero 10 segundos
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(5,1);
Lcd_putc ("PROCESO"); //o en la primera fila
lcd_gotoxy(4,2); //columna 4, fila 2
Lcd_putc( "TERMINADO"); //Escribo en la segunda fila
delay_ms(1000); //Espero 10 segundos
Lcd_putc( "\f"); //Limpio pantalla
lcd_gotoxy(1,1);
Lcd_putc ("TOTAL PICADORAS"); //Escribo en la primera fila
lcd_gotoxy(2,2); //columna 4, fila 2
printf(lcd_putc, "LAVADAS %lu",cant_pica1); //Escribo en la segunda fila
delay_ms(2000);
goto repito; //repitoel mensaje
}
otra duda q tengo es cual es la diferencia entre usar #use fast_io(B y #use standard_io(B) ...son dos librerias distintas q cumplen la misma funcion ???
PD:disculpen si los he mariado con mi codigo..soy nuevo en el tema ...acepto todo tipo de sugerencias ..para mejorar el codigo ..gracias