Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

17/03/2015 #41


La verdad que lo tuyo es mas logico Joaquin. Me lo voy a estudiar y quizas se lo comente al profe.

Y..sobre mi segunda parte del mensaje, sabrias deducir el código.Te lo pego.

---------------------------------------------------------------------------------------------------------------------------
Ya que estamos a ver si puedes ayudarme con el direccionamiento indirecto, que esto es un autentico lio.

Primeramente , no se que quiere decir/ o para que sirve.
Lo unico que encuentro es que es para mover cosas de sitios y no hacerlo directamente pero sigo sin entenderlo.


En este ejemplo,que es un subrutina que inicializa las posiciones de memoria.No consigo entender el direccionamiento.

Código:
inicializa:
            movlw  0x30 //
             movwf  FSR // el valor 48 -> al acumulador -> y lo paso al registro FSR
             
repite:
            clrf   INDF,F //  limpio INDF es un registro, pero ese F , creo que sobra
            incf  INDF,F//Incrementa el contenido de INDF en una unidad.
 El resultado se almacena de nuevo en INDF si F=1 y en W si F=0(en este caso INDF no varía) 

¡¡PERO NO SABEMOS EL VALOR DE F!!!



             incf   FSR,F // lo mismo de antes 
             btfss  FSR,6 // aqui ya me pierdo
             goto   repite
             return
Joaquin a ver si me ayudas a saber como tira esto de direccionamiento indirecto, ya que lo veo ilógico .

Gracias por todo.

Con todo lo que se ahora creo que el examen del jueves me irá bien
17/03/2015 #42

Avatar de JoaquinFerrero

6.3.4 Direccionamiento indirecto, registros INDF y FSR

El direccionamiento indirecto es un modo de direccionamiento de la memoria de datos, donde la dirección de la memoria de datos en la instrucción, no es fija. El registro FSR se usa como puntero a la posición de la memoria de datos que va a ser leída o escrita. Ya que es un puntero en RAM, los contenidos se pueden modificar por programa. Esto puede ser útil para tablas de datos, en la memoria de datos. La figura 6-7 muestra la operación del direccionamiento indirecto. Muestra el movimiento del valor a la dirección de la memoria de datos especificada por el valor del registro FSR.

El direccionamiento indirecto es posible usando el registro INDF. Cualquier instrucción que use el registro INDF, lo que realmente hace es acceder al registro apuntado por el File Select Register (FSR). Leyendo indirectamente (FSR = '0') el propio registro INDF, se leerá 00h. Escribiendo indirectamente al registro INDF resultará en una no-operación (aunque afectará a los bits de estado). Una dirección de efectiva de 9 bit se genera por la concatenación del bit IRP (STATUS<7>) con los 8 bit del registro FSR, como se muestra en la figura 6-8.
Código PHP:
inicializa:
            
movlw  0x30    inicializamos FSR 0x30
            movwf  FSR

repite
:
            
clrf   INDF    pone a 0 el valor apuntado por FSR
            incf   INDF
,f  pone a 1 el valor apuntado por FSR

            incf   FSR
,f   incrementamos el puntero FSR

            btfss  FSR
,6   ¿Hemos llegado a 0x40? (salta si FSR<6> = 1)

            goto   
repite  norepetimos el bucle

            
return         ; salimos 
Lo que hace este código es poner a 1 todos los bytes que van de la dirección 0x30 a la 0x3F (suponiendo que bit IRP = 0, claro).
18/03/2015 #43


Una duda rápida.

tabla:
addwf PCL,F ;
retlw b'11000000' ; regresa con 0
retlw b'11111001' ; regresa con 1
retlw b'10100100' ; regresa con 2
retlw b'10110000' ; regresa con 3
retlw b'10011001' ; regresa con 4
retlw b'10010010' ; regresa con 5
retlw b'10000010' ; regresa con 6
retlw b'11111000' ; regresa con 7
retlw b'10000000' ; regresa con 8
retlw b'10010000' ; regresa con 9


Si por ejemplo:
-el contador del programa esta en la posicion 5
-hacemos de molvw 2
-entonces addwf PCL = 6(posicion siguiente) + 2 = 8
-vamos al `regresa 2´, volvemos al programa y metemos en W= 10100100

Mi duda es :
La cosa se queda aquí o automaticamente vuelve ha sumar el PCL + W , siendo W ahora = 10100100


Gracias.
18/03/2015 #44

Avatar de JoaquinFerrero

No, la instrucción retlw hace regresar inmediatamente, con el valor de W puesto al literal indicado.

retlw (retorno con un literal en W)
18/03/2015 #45


Muchas gracias Joaquin, ya entiendo el programa.Lo que he puesto era solo un trozo.
Lo explico por si alguien tiene interés.

Cuando copilamos todo el código en el programa ,escribimos en memoria, y activamos uno o mas interruptores de nuestro PIC, este interruptor o esta combinacion de interruptores, hace dar un valor a W .Consecuentemente , esto nos hace ir una posición de la tabla y recoger el valor que tenemos dentro,el cual activará una serie de displays en la pantalla. (El numero al lado de `regreso´
20/03/2015 #46


El examen me fue bastante bien, aunque hubo alguna pregunta casi imposible, pero por lo demas todo bien.

No me tengo que relajar y , tengo que seguir trabajando y estudiando!!

Muchas gracias por la ayuda!!!
20/03/2015 #47

Avatar de JoaquinFerrero

¿Pregunta imposible?

¿¿¿Cuál???
21/03/2015 #48


Fue una pregunta que no tenia nada que ver con lo que había estudiado y me pilló en esa.
Te la adjunto en imagen.

Pero bueno, ya ha pasado.
Imágenes Adjuntas
Tipo de Archivo: jpg ej examen.jpg (47,3 KB (Kilobytes), 11 visitas)
21/03/2015 #49

Avatar de JoaquinFerrero

Madre mía... ¡Y con faltas de ortografía!

Pongo aquí el texto corregido:

«La velocidad de giro de un disco compacto se puede medir a partir de la lectura del código de barras situado en la pista interior._La lectura de las barras generan un pulso por cada avance de 2_°, que se utiliza como señal de interrupción a un PIC._Asumiendo un lector de velocidad 24x, que equivale a un máximo de velocidad de giro de 7200 revoluciones por minuto. ¿Cuál es el valor máximo de la RSI en el peor de los casos?. Asuma una frecuencia de trabajo de 4 MHz».

No estoy muy seguro, pero sería algo así:

Si la velocidad más alta de giro es 7200 rev./m, tenemos

7200 rev./m / 60 s/m = 120 rev./s

Si cada rev./s son 360°,

120 rev./s * 360 °/rev. = 43 200 °/s

Si hay un pulso cada 2 °, tenemos que la velocidad más alta de pulsos es

43 200 °/s / 2 °/pulso = 21 600 pulsos/s

A partir de ahí hay que calcular la RSI, que, a propósito, no sé qué significa
21/03/2015 #50

Avatar de Nuyel

No se si será una versión en español para ISR o sea Rutina de Servicio de Interrupción.
20/04/2015 #51


Hola a todos!!
Estoy de vuelta con esta asignatura.Me fue bien el examen y la he dejado un poco abandonada y me tengo que poner de vuelta con ella ya que tengo que entregar en un par de semanas un proyecto y tengo un examen y necesito aprender temario.

Vale, pues estamos ahora en el temario de :
Interficie de circuitos externos y comunicaciones.

Hemos dado la explicación de lo:"Maestro y esclavo"
Lo de llamar a un periférico para darle una información y este te conteste o te haga algo.Lo del : SCLK,SS,MOSI y MISO.
Pues bien, en clase solo hemos dado teoria y por eso os pedia si teneis algún código "sencillo" de principiante para entender esto de maestro y esclavo para ver como funciona, ya que no tengo ejemplos

Muchas gracias !!!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.