Autor Tema: Problema con el ciclo de instruccion de un PIC18F4550, cuanto deberia durar ??  (Leído 4980 veces)

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

Desconectado canival35

  • PIC10
  • *
  • Mensajes: 36
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

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
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

Desconectado LucasBols

  • PIC16
  • ***
  • Mensajes: 129
    • Desarrollos y Servicios Digitales
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
Un experto es alguien que te explica algo sencillo de forma confusa de tal manera que te hace pensar que la confusión sea culpa tuya.

DSD http://www.dysd.com.ar/

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
pues hay que ver como estás configurando el bloque oscilador, porque allí depende la velocidad que trabajará el CPU del micro.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
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