En el .LST me muestra estos datos
Stack used: 9 locations (4 in main + 5 for interrupts)
Stack size: 8
Este es el código
#INCLUDE <16F887.H>
#DEVICE ADC=10 //Define que el conversor trabaja a 10 bits
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#BYTE PORTA=5
#BYTE PORTB=6
#BYTE PORTC=7
#BYTE PORTD=8
#INCLUDE <LCD.C>
#BYTE tmrl1= 14
#DEFINE start portb,1
#DEFINE inc portb,2
#DEFINE dec portb,3
#DEFINE motor_cajas portb,4
#DEFINE motor_bolsas portb,5
int8 n_bolsas=10, L_entera=0,L_desc=0, N_entera=0, N_desc=0;
int8 cajas=0,bolsas_aux=0, bolsas_neto=0;
int8 bolsas=0;
int1 st=0;
#int_ext
void ext_isr() // Rutina de interrupción por cambio en el pin RB0
{
lcd_putc("\f"); // Borra pantalla
lcd_putc("PROGRAM");
delay_ms(2000);
lcd_putc("\f"); // Borra pantalla
lcd_gotoxy(1,1); // Linea 1, primer caracter
printf(lcd_putc,"N_entera=%c", N_entera);
lcd_gotoxy(1,2); // Linea 2, primer caracter
printf(lcd_putc,"N_desc=%c", N_desc);
}
//******************************************
// Función para mostrar datos en pantalla
//******************************************
void visual(int8 bolsas, int8 cajas)
{
lcd_putc("\f"); // Borra pantalla
lcd_gotoxy(1,1); // Primera fila primer caracter
printf(lcd_putc,"Bol_Ent=%u",bolsas);
lcd_gotoxy(1,2); // Segunda fila primer caracter
printf(lcd_putc,"Bol_Des=%u",bolsas);
lcd_gotoxy(11,2); // Segunda fila
printf(lcd_putc," Ca=%u",cajas);
delay_ms(10);
}
//***********************
// Programa principal
//***********************
void main()
{
set_tris_a(0B11111111);
set_tris_b(0B00000111);
set_tris_c(0B00000111);
set_tris_d(0B00000000);
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1); //Configuración TMR1
set_timer1(0); // Inicia TMR1 en cero
lcd_init(); // Función para inicializar la LCD
lcd_putc("\f"); // Borra pantalla
lcd_gotoxy(1,1); // Linea 1, primer caracter
lcd_putc(" AUTOMATIZACION ");
lcd_gotoxy(1,2); // Linea 2, primer caracter
lcd_putc(" EMPAQUE BOLSAS ");
enable_interrupts(int_ext); // Activa interrupción por cambio de RB0
enable_interrupts(global); // Activa interrupción global
bolsas=tmrl1; // Lectura del del byte bajo del timer1
bolsas_aux=bolsas;
WHILE(true)
{
if(bit_test(start)) // Se dió start?
{
bit_set(motor_bolsas); // Arranca motor banda bolsas
delay_ms(50);
bolsas=tmrl1;
visual(bolsas, cajas); // Llama función mostrar valores en pantalla
st=1; // Bandera para indicar el start
}
if(st==1)
{
bolsas=tmrl1;
if(bolsas_aux != bolsas)
{
bolsas_neto ++;
bolsas=tmrl1;
bolsas_aux=bolsas;
visual(bolsas, cajas);
if(bolsas_neto==10)
{
cajas++;
visual(bolsas, cajas);
bolsas_neto=0;
bit_clear(motor_bolsas);
bit_set(motor_cajas);
delay_ms(2000);
bit_set(motor_bolsas);
bit_clear(motor_cajas);
}
}
}
}
}