TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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
-
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
-
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
-
pues hay que ver como estás configurando el bloque oscilador, porque allí depende la velocidad que trabajará el CPU del micro.
-
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