Autor Tema: Bucle infinito  (Leído 2329 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
Bucle infinito
« en: 23 de Abril de 2004, 02:08:00 »
Estoy acostumbrado a programar en NEC y ahora al hacer mi primer codigo para PIC me doy cuenta que al contrario que en los NEC parece que no hace falta un bucle infinito en el main (para que esa parte de codigo no pare nunca de hacerse, es eso normal ?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Bucle infinito
« Respuesta #1 en: 23 de Abril de 2004, 02:24:00 »
El testeo contínuo de entradas y actualización de salidas se hace en el while.

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Bucle infinito
« Respuesta #2 en: 23 de Abril de 2004, 03:29:00 »
Quizas sea un problema de la placa, la revisaré
Gracias.

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Bucle infinito
« Respuesta #3 en: 23 de Abril de 2004, 05:20:00 »
La placa parece qu va bien he cambiado de PIN y estamos en las mismas

este es el codigo es una prueba para enviar DTM con un Holtek9200A

Tengo que generar un clock que lo hago con el A0

No meto el codigo dentro del while y miro la pata A0 y esta continuamente haciendo el clock ¿?

#include <p18f8720.h>
#include <delays.h>
 

#define CLK_920 PORTBbits.RA0
#define DATA    PORTAbits.RA1
#define CE      PORTAbits.RA0
   
char D0,D1,D2,D3,D4;          

/*****************************************
 *            Función que envia recibe                           *            
 *****************************************/
 
void sendDTMF(char data) {
 
switch (data){
  case 1:
    D0 = 1;
    D1 = 0;
    D2 = 0;
    D3 = 0;    
    D4 = 0;
  break;

  case 2:
    D0 = 0;
    D1 = 1;
    D2 = 0;
    D3 = 0;    
    D4 = 0;
  break;

  case 3:
    D0 = 1;
    D1 = 1;
    D2 = 0;
    D3 = 0;    
    D4 = 0;
  break;

  case 4:  
    D0 = 0;
    D1 = 0;
    D2 = 1;
    D3 = 0;    
    D4 = 0;
  break;

  case 5:
    D0 = 1;
    D1 = 0;
    D2 = 1;
    D3 = 0;    
    D4 = 0;  
  break;

  case 6:
    D0 = 0;
    D1 = 1;
    D2 = 1;
    D3 = 0;    
    D4 = 0;
  break;

  case 7:  
    D0 = 1;
    D1 = 1;
    D2 = 1;
    D3 = 0;    
    D4 = 0;  
  break;

  case 8:  
    D0 = 0;
    D1 = 0;
    D2 = 0;
    D3 = 1;    
    D4 = 0;  
  break;

  case 9:  
    D0 = 1;
    D1 = 0;
    D2 = 0;
    D3 = 1;    
    D4 = 0;  
  break;

  case 0:  
    D0 = 0;
    D1 = 1;
    D2 = 0;
    D3 = 1;    
    D4 = 0;  
  break;

  case 11:
    D0 = 1;
    D1 = 1;
    D2 = 0;
    D3 = 1;    
    D4 = 0;  
  break;

  case 12:
    D0 = 0;
    D1 = 0;
    D2 = 1;
    D3 = 1;    
    D4 = 0;  
  break;

  case 13:
    D0 = 1;
    D1 = 0;
    D2 = 1;
    D3 = 1;    
    D4 = 0;  
  break;

  case 14:
    D0 = 0;
    D1 = 1;
    D2 = 1;
    D3 = 1;    
    D4 = 0;  
  break;

  case 15:
    D0 = 1;
    D1 = 1;
    D2 = 1;
    D3 = 1;    
    D4 = 0;  
  break;

  case 16:
    D0 = 1;
    D1 = 1;
    D2 = 1;
    D3 = 1;    
    D4 = 1;  
  break;    

  case 941:
    D0 = 1;
    D1 = 1;
    D2 = 0;
    D3 = 0;    
    D4 = 1;  
  break;    

  case 1633:
    D0 = 1;
    D1 = 1;
    D2 = 1;
    D3 = 0;    
    D4 = 1;  
  break;    

   
}                      
  CE = 0;

Delay10TCYx(20);
 
                                                     

  DATA = D0;      
  CLK_920 = 0;
  Delay10TCYx(2.6);  
  CLK_920 = 1;  
  Delay10TCYx(2.6);

 
  DATA = D1;                                                                                    
  CLK_920 = 0;  
  Delay10TCYx(2.6);        
  CLK_920 = 1;  
  Delay10TCYx(2.6);
 
  DATA = D2;
  CLK_920 = 0;  
  Delay10TCYx(2.6);
  CLK_920 = 1;  
  Delay10TCYx(2.6);

  DATA = D3;
  CLK_920 = 0;  
  Delay10TCYx(2.6);
  CLK_920 = 1;  
  Delay10TCYx(2.6);  

  DATA = D4;
  CLK_920 = 0;  
  Delay10TCYx(2.6);
  CLK_920 = 1;  
  Delay10TCYx(2.6);

//  if (data == 16)  CE = 1;
// El tono 16 nos para la emision de ese tono DTMF
   
     

}  

void main (void)
{
 
 TRISA = 0x00;
 
 PORTA = 0x00;
 
 CLK_920 = 1;          
 CE = 1;
 DATA = 0;


  // for(;;) {    
 

 sendDTMF(1);  

//}

En teoria asi deberia parar el clock, hacer 5 pulsos y parar ya que solo pasa una vez por el codigo,  en cambio CLK_920 (pata A0) sique haciendo el clock.

¿?¿?

Gracias.


Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Bucle infinito
« Respuesta #4 en: 23 de Abril de 2004, 06:57:00 »
Es mas este simple codigo lo hace infinitamente ¿?

#include <p18f8720.h>

#define CLK_920 PORTAbits.RA3


void main (void)
{
 
 TRISA = 0x00;
 
 CLK_920 = 0;          
 
 CLK_920 = 1;  
 
}


Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Bucle infinito
« Respuesta #5 en: 23 de Abril de 2004, 07:14:00 »
Estás seguro?? El anterior vale, ya que tienes un for(;{} que equivale a un while(1){}, osea, que se repitiría siempre. Pero en el último no. Es más, lo he pasado al CCS para ver el código que crea en asm y no hay ningún bucle.
El código que has puesto antes era erroneo. Lo he hecho así:
Codigo:

#include <18f8720.h>

#byte TRISA=0x85
#byte PORTA=5
#bit  CLK_920 = PORTA.3
void main (void)
{

TRISA = 0x00;

CLK_920 = 0;

CLK_920 = 1;

}



Y esto es lo que genera:
Codigo:

CCS PCH C Compiler, Version 3.187, 16465

               Filename: C:WINDOWSEscritorioa.LST

               ROM used: 28 (0%)
                         Largest free fragment is 0
               RAM used: 5 (0%) at main() level
                         5 (0%) worst case
               Stack:    0 locations

*
0000:  GOTO   0004
....................  #include <18f8720.h>
....................  //////// Standard Header file for the PIC18F8720 device ////////////////
.................... #device PIC18F8720
.................... #list
....................
....................
....................
.................... #byte TRISA=0x85
.................... #byte PORTA=5
.................... #bit  CLK_920 = PORTA.3
.................... void main (void)
.................... {
0004:  CLRF   FF8
0006:  BCF    FD0.7
0008:  CLRF   FEA
000A:  CLRF   FE9
000C:  MOVLW  0F
000E:  MOVWF  FC1
0010:  MOVLW  07
0012:  MOVWF  FB4
....................
.................... TRISA = 0x00;
0014:  CLRF   x85
....................
.................... CLK_920 = 0;
0016:  BCF    05.3
....................
.................... CLK_920 = 1;
0018:  BSF    05.3
....................
.................... }
....................
001A:  SLEEP



Saludos
Saludos desde Huelva (ESPAÑA)

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Bucle infinito
« Respuesta #6 en: 23 de Abril de 2004, 07:24:00 »
Tengo el compilador C18 de Microchip.

Lo que has posteado no me funciona, tu tienes el compilador  CCS, y en el primer codigo si te fijas el for y las { estan comentadas con //. Muchas gracias de  todas formas, seguiré probando a ver que es.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Bucle infinito
« Respuesta #7 en: 23 de Abril de 2004, 07:47:00 »
Ah!, es cierto, se me pasó. Y no me fijé en que usabas el C18. Ya decía yo que había muchas cosas raras... Lo siento.
Al menos en CCS no lo hace...
Saludos desde Huelva (ESPAÑA)

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Bucle infinito
« Respuesta #8 en: 24 de Abril de 2004, 05:35:00 »
Probare el CCS a ver ¿?, detodas formas si aguien sabe que pasa please un cablecillo, aunque hasta el lunes no podre probar nada.  Gracias