buena noche estoy haciendo un sumo el cual funciona muy bien pero tengo un pequeño problema programe por medio de un case para las funciones adelante, atrás, izquierda, derecha y otro para que envíe una señal que activa un arma todos están programados en cada caso dentro de un ciclo FOR para que se active durante 254 ciclos eso da nos cuantos segundos esto funciona muy bien el problema ocurre si oprimo cualquiera de los botones de forma repetida es como si el pic no alcanzara a procesar toda esta información y se bloquea tengo desconectar la fuente y volverlo a iniciar, agradezco quien me de una opción de poder solucionar este inconveniente gracias NOTA: es mi primer programa CCS C compiler
inicialmente lo tenia comunicándose entre dos PIC 18f4550 uno transmite y el otro solo recibe instrucciones no transmite
el problema es programación pero no se como solucionarlo. gracias
este el código que mencione
estos son los fusibles en un archivo .h
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOLVP,PLL5,CPUDIV1,NOMCLR
#device ADC=10
#use delay(crystal=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORTCOM)
//#include <stdio.h>
#include <lcd.c>
#include <kbd_lib.c> //D:\embebidos7\temporizador\
//int t=0;
//int com=0;
int dr,b;
char teclado;
esta es la programación en un archivo .c
#include <micro1RS232.h>
#define use_portd_lcd true
#int_RDA
void main()
{
/*set_tris_A(0x00);
output_A(0);*/
port_b_pullups(true); // deshabilita las resistencias de proteccion del puerto b; habilita el puerto B para los datos del teclado matricial
lcd_init();
//for (m=1;m<=100;m++){
lcd_gotoxy(1,1); //salta a la siguiente linea
lcd_putc("iniciando...");
delay_ms(200);
lcd_putc("\f");
lcd_putc("digite un numero");
//delay_ms(100);
//enable_interrupts(int_RDA);
enable_interrupts(GLOBAL);
while(true){
teclado=kbd_getc();
if (teclado)
{
lcd_putc("\f");
lcd_putc(teclado);
//printf(lcd_putc,"\f enviando %c",teclado);
}
if(kbhit()){
//fputc(dr,PORTCOM2);
dr=fgetc();
lcd_putc(dr);
if(dr)
{
lcd_putc(dr);
}
switch(dr)
{
case '2':
for(b=0;b<=254;b++){
output_high(pin_A0); output_low(pin_A1); //llanta delantera izquierda hacia adelante
output_high(pin_A3); output_low(pin_A2); //llanta delantera derecha hacia adelante
output_high(pin_C1); output_low(pin_C2); //llanta trasera izquierda hacia adelante
output_high(pin_A4); output_low(pin_A5); // llanta trasera derecha hacia adelante
//output_high(pin_c0); output_low(pin_c1);
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("adelante"); //configuracion adelante RA0 motor1, RC1 motor 2, RC4 motor 3, RA4 motor 4
dr=' ';
if(b==254){
output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
}
}
break;
case '8':
for(b=0;b<=254;b++){
output_high(pin_A1); output_low(pin_A0); //llanta delantera izquierda hacia atras
output_high(pin_A2); output_low(pin_A3); //llanta delantera derecha hacia atras
output_high(pin_C2); output_low(pin_C1); //llanta trasera izquierda hacia atras
output_high(pin_A5); output_low(pin_A4); // llanta trasera derecha hacia atras
lcd_putc('\f');
lcd_putc("atras"); //configuracion atras RA1 motor1, RC2 motor 2, RC5 motor 3, RA5 motor 4
dr=' ';
if(b==254){
output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
}
}
break;
case '4':
for(b=0;b<=150;b++){
output_high(pin_A1); output_low(pin_A0); //llanta delantera izquierda hacia atras
output_high(pin_A3); output_low(pin_A2); //llanta delantera derecha hacia adelante
output_high(pin_C2); output_low(pin_C1); //llanta trasera izquierda hacia atras
output_high(pin_A4); output_low(pin_A5); //llanta trasera derecha hacia adelante
lcd_putc('\f');
lcd_putc("rotacion izquierda");//configuracion izquierda RA1 motor1, RC2 motor 2, RC4 motor 3, RA4 motor 4
dr=' ';
if(b==150){
output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
}
}
break;
case '5':
for(b=0;b<=254;b++){
/*output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada*/
output_high(pin_c0); //llanta trasera derecha apagada
lcd_putc('\f');
lcd_putc(" ARMA ");
dr=' ';
if(b==254){
output_low(pin_C0); // apagar el arma despues de 254 ciclos
}
}
break;
case '6':
for(b=0;b<=150;b++){
lcd_putc("rotacion derecha"); //configuracion izquierda RA0 motor1, RC1 motor 2, RC5 motor 3, RA5 motor 4
output_high(pin_A0); output_low(pin_A1); //llanta delantera izquierda hacia adelante
output_high(pin_A2); output_low(pin_A3); //llanta delantera derecha hacia atras
output_high(pin_C1); output_low(pin_C2); //llanta trasera izquierda hacia adelante
output_high(pin_A5); output_low(pin_A4); //llanta trasera derecha hacia atras
lcd_putc('\f');
if(b==150){
output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
}
}
break;
}
}
/**/
//TODO: User Code
}
}