display y RETLW

HOLA A TODOS,
tengo una duda,bueno varias en el siguiente ejercicio


un display está conectado en catodo comun,se enciende cn "1".inicialmente tenemos los siguientes valores en los registros W=0x73 y NUMERO=00000001.el programa q esta ejecutado en el pic es:
.
.
.
CALL TABLA
MOVWF PORTB
FIN GOTO FIN
TABLA MOVF NUMERO,W
ADDWF PCL,F
RETLW b'00111111'
RETLW b'00100001'
RETLW b '01111100'
RETLW b'01110011'
la pregunta del ejercicio es¿q numero se e en el display cuando el programa esta ejecutando el bucle fin?

y la respuesta es 1

mi duda es.q xq es uno la respuesta, a q se refieren los valosres despues d la instruccion RETLW para q salga el numero 1.
yo pense se ponia un uno en el segmento q kieres q se encienda na mas.
También os manod otro ejemplo, dond tengo la misma duda,es la pregunta numero 15,la ultima del test q os mando.Espero que me podais ayudar que tengo el examen dentro d unos dias,muchisimas gracias.
 

Adjuntos

  • 1146221377_581.pdf
    101.5 KB · Visitas: 58
Hola.

En primer lugar. Si un display es de catodo comun, necesitaras 1's (unos) logicos para encender los leds del mismo, ya que los catodos comunes cerraran el circuito a masa (nivel cero).

Luego dices:

Inicialmente tenemos los siguientes valores en los registros W=0x73 y NUMERO=00000001.el programa q esta ejecutado en el pic es:
.
.
.
CALL TABLA
MOVWF PORTB
FIN GOTO FIN
TABLA MOVF NUMERO,W
ADDWF PCL,F
RETLW b'00111111'
RETLW b'00100001'
RETLW b '01111100'
RETLW b'01110011'
la pregunta del ejercicio es¿q numero se e en el display cuando el programa esta ejecutando el bucle fin?

La instruccion CALL es un llamado a una subrutina. En este caso, la subrutina es TABLA. En ella vas a ingresar -modificando el valor del PCL con el valor de la variable NUMERO, (ADDWF PCL,F)- para extraer un valor determinado de la TABLA y retornar con dicho valor a W (comando RETLW). Recuerda que siempre se retorna de una subrutina con (RETURN).
Luego mostraras dicho valor de TABLA (contenido en W) por PORTB (MOVWF PORTB) y entras en un loop infinito (FIN goto FIN).
En tu caso, retornas con el primer valor de la tabla (b'00111111') ya que NUMERO vale 1, y es ese numero el que mostraras por PORTB.

Luego dices:

También os manod otro ejemplo, dond tengo la misma duda,es la pregunta numero 15,la ultima del test q os mando.Espero que me podais ayudar que tengo el examen dentro d unos dias,muchisimas gracias.

A la brevedad te respondo esta. Un cordial saludo.
 
En primer termino, corrijo algo que se me escapo en la anterior respuesta.

Donde digo:

"En tu caso, retornas con el primer valor de la tabla (b'00111111') ya que NUMERO vale 1, y es ese numero el que mostraras por PORTB."
ESTO ES INCORRECTO. Pido mil disculpas!!!


Debe entenderse, entonces que:

Si el valor de la variable NUMERO es b'00000001', retornaras con el segundo valor de TABLA, es decir con b'00100001'. Este valor binario, fijate, tiene dos unos, por lo que, dependiendo como hayas conectado el display de Catodo Comun, puede llegar a mostrar un 1.

Respecto de tu otra duda, la pregunta 15 del PDF adjunto, la cual transcribo:

15.- Considere el siguiente fragmento de un programa:

movlw b'00000011'
call convierte
fin goto fin

convierte
addwf PCL,1
retlw 0x01
retlw 0x02
retlw 0x03
retlw 0x00

¿Qué valor decimal tiene almacenado el registro W cuando se ejecuta el bucle "fin"?

Nuevamente aqui, estoy trabajando con una subrutina (convierte), a la cual llamo mediante la instruccion CALL, retornando de ella con un valor determinado de tabla para, finalmente, entrar en un loop infinito.
Para retornar con el valor requerido de una tabla, como la del ejercicio, debo sumar al PCL un valor determinado (PCL = PCL + VALOR).
En este caso, estoy moviendo al registro de trabajo W el valor binario b'00000011'; esto es un 3 (tres) en decimal. Podriamos tambien haber escrito: movlw d'3'.
Dicho valor es el que se suma al PCL para extraer el valor correspondiente de la tabla (PCL=PCL+W), mediante la instruccion addwf PCL,1.
Entonces:
Si a PCL le sumo 0, extraigo el primer valor de tabla (0x01).
Si a PCL le sumo 1, extraigo el segundo (0x02).
Si a PCL le sumo 2, extraigo el tercero (0x03).

Y si, finalmente, como en este caso, le sumo 3, extraigo el ultimo valor de tabla. Es decir, retorno con el 0 (cero) (retlw 0x00).

Espero haber sido claro. Cualquier duda avisame.
Un saludo cordial.
 
Atrás
Arriba