TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: canival35 en 18 de Mayo de 2009, 15:14:42

Título: Problema con el ciclo de instruccion de un PIC18F4550, cuanto deberia durar ??
Publicado por: canival35 en 18 de Mayo de 2009, 15:14:42
Aver si alguien puede ayudarme, estoy programando en asm, (QUIZAS ESTO TENGA QUE VER CON EL PROBLEMA PARA COMNICACION CON USB QUE TENGO TAMBIEN),

segun tengo entendido cada instrucciondel PIC18f4550 dura 4 ciclos de osc, por ejemplo si tengo un osc de 12MHz cada instrucciondeberia de durar 333.33ns

pero no es asi me dura 3 veces mas de lo que deberia, osea 1us por ciclo de instruccion, esto lo comprobe haciendo un toogle a un led y midiendo con osciloscopio, que podira estar pasando ????

y por el contrario simulando con proteus me marca como si cada uno durara 333.33ns, no croe que sea problema de hardware porque ya lo probe con 3 PICs diferentes

realmente duran 4 ciclos o seran 12 ciclos de oscilacion por instruccion del PIC, esta es la secuencia que utilize:

    #INCLUDE <p18F4520.inc>
        MOVLW 0xFE            ;RD0=SALIDA
        BSF PORTD,0            ;sALIDA=1
bucle:
        BTG PORTD,0       
        BTG PORTD,0       
        goto bucle   
       

end
Título: Re: Problema con el ciclo de instruccion de un PIC18F4550, cuanto deberia durar ??
Publicado por: ema en 18 de Mayo de 2009, 15:31:48
Si no me equivoco la multiplicacion que estas obserbando lo genera tu propio codigo. Osea cada vez que se prende y apaga tu led estas ejecutando 3 instrucciones, osea 3x4 ciclos te da 12 ciclos para cada oscilacion del led. Se entiende?


Saludos
Título: Re: Problema con el ciclo de instruccion de un PIC18F4550, cuanto deberia durar
Publicado por: LucasBols en 18 de Mayo de 2009, 15:44:44
Hola canival

En el datasheet del pic explica muy bien por que cada instrucción dura 4 ciclos de reloj (extracción de instrucción ejecución etc). Esto por un lado

Por otro lado, hay instrucciones que duran 2 ciclos, como el goto

No conozco la linea 18, no conozco la instrucción BTG, pero te daré un ejemplo con bcf y bsf

bucle
    bsf  PORTD, 0 ; pone en alto RD0 - 1 ciclo
    bcf  PORTD, 0 ; pone en bajo RD0 - 1 ciclo
    goto  bucle      ; 2 ciclos

esto te mostraria algo como:

    -___-___-___

por que RD0 esta en alto 1 cilco, en bajo 1 ciclo y sigue en bajo por los dos ciclos del goto

proba con

bucle
    bsf  PORTD, 0 ; pone en alto RD0 - 1 ciclo
    nop                ; 1 ciclo
    nop                ; 1 ciclo
    bcf  PORTD, 0 ; pone en bajo RD0 - 1 ciclo
    goto  bucle      ; 2 ciclos

Saludos
Título: Re: Problema con el ciclo de instruccion de un PIC18F4550, cuanto deberia durar ??
Publicado por: PalitroqueZ en 18 de Mayo de 2009, 16:36:37
pues hay que ver como estás configurando el bloque oscilador, porque allí depende la velocidad que trabajará el CPU del micro.

Título: Re: Problema con el ciclo de instruccion de un PIC18F4550, cuanto deberia durar ??
Publicado por: migsantiago en 18 de Mayo de 2009, 17:28:48
Cierto, es como dice Palitroquez. El cristal es de 12MHz pero internamente el pic puede correr a más o menos velocidad dependiendo del fusible que se configure.

http://picmania.garcia-cuervo.net/conceptos.php#USB4Mhz