Página de inicio Mi Correo






   » Foro
   » Nuevo Foro
   » Mi Correo
   » Mis Actividades...


--- Novedades ---



    
  » Microcontroladores » Display y Tablas (5 de 9)  

.: Código para el Control del Display sin Decodificador

En el encabezado incluimos nuestro ARCHIVO.INC y como variables incorporamos reg1, reg2 y reg3 para el retardo, más la variable cont que controlará la cuenta para incrementar el PCL por medio de W.

En la configuración de puertos, habilitamos PORTB como salida, y comenzamos con la programación.

;---------------Encabezado-------------

	LIST	P=16F84
	#include	<P16F84luis.INC>

;----------- Variables utilizadas ----------

reg1	equ	0x0D		; 3 registros para el retardo
reg2	equ	0x0E
reg3	equ	0x0F
cont	equ	0x10

;---------Configuración de puertos----------

	ORG	0x00               
	GOTO	inicio
	ORG	0x04          
	ORG	0X05
inicio	BSF	STATUS,RP0	; configurando puertos
	CLRF	TRISB		; PORTB = SALIDA
	BCF	STATUS,RP0

;------------- Programa Principal ----------

reini	CLRF	cont		; pone el contador a 0
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	tabla		; llama a la tabla
	MOVWF	PORTB		; pasa el dato obtenido a PORTB
	CALL	retardo

disp_	MOVF	cont,W
	XORLW	B'1001'		; verifica si el contador llegó a 9
	BTFSC	STATUS,Z		; si no es así salta una línea
	GOTO	reini		; si llegó a 9 lo atiende en reini
	INCF	cont,F		; incrementa el contador
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	tabla		; llama a la tabla
	MOVWF	PORTB		; pasa el dato obtenido en la tabla a PORTB
	CALL	retardo
	GOTO	disp_

;--------------- Tabla --------------------

tabla	ADDWF	PCL,F		; se incrementa el contador de programa
	;display	   . gfedcba	segmentos de los leds del display
	RETLW	B'01101101'	; código para el 5
	RETLW	B'01100110'	; código para el 4
	RETLW	B'01001111'	; código para el 3
	RETLW	B'01011011'	; código para el 2
	RETLW	B'00000110'	; código para el 1
	RETLW	B'00111111'	; código para el 0

	RETLW	B'00111000'	; código para el L
	RETLW	B'00111110'	; código para el U
	RETLW	B'00000110'	; código para el I
	RETLW	B'11101101'	; código para el S.

;-----------Rutina de Retardo-----------

retardo	movlw	30		; Aquí se cargan los registros
	movwf	reg1		; reg1, reg2 y reg3
tres	movlw	20		; con los valores 30, 20 y 35
	movwf	reg2
dos	movlw	35
	movwf	reg3

uno	decfsz	reg3,1		; Aquí se comienza a decrementar
	goto	uno
	decfsz	reg2,1
	goto	dos
	decfsz	reg1,1
	goto	tres
	retlw	00		; regresare del retardo
;------------------------------------------
	END
;------------------------------------------
.: Descripción
Vamos por el programa principal...
reini	CLRF	cont		; pone el contador a 0
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	tabla		; llama a la tabla
	MOVWF	PORTB		; pasa el dato obtenido a PORTB
	CALL	retardo

En la primer línea, ponemos el contador a cero, en la segunda, lo pasamos al registro W, es decir W=00000000 y nos vamos con este valor a la tabla, veamos que ocurrirá allí...

tabla	ADDWF	PCL,F		; se incrementa el contador de programa
	;display	   . gfedcba	segmentos de los leds del display
	RETLW	B'01101101'	; código para el 5

ADDWF PCL,F es sumarle al PCL lo que trae W, y como W=00000000, pues PCL seguirá siendo igual a PCL, y pasará a la siguiente instrucción...

RETLW B'01101101', recuerda que la línea de comentario no es tenida en cuenta. En esta línea, se carga w con 01101101, y como se trata de una instrucción de retorno, regresa al lugar de donde vino, es decir a...

MOVWF   PORTB   ; pasa el dato obtenido a PORTB
CALL       retardo


Aquí se pasa el valor de W a PORTB y se visualiza 5 en el Display, luego se hace un retardo, y cuando termina...

disp_	MOVF	cont,W
	XORLW	B'1001'		; verifica si el contador llegó a 9
	BTFSC	STATUS,Z		; si no es así salta una línea
	GOTO	reini		; si llegó a 9 lo atiende en reini
	INCF	cont,F		; incrementa el contador
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	tabla		; llama a la tabla

Cargamos W con lo que hay en el contador, y luego, lo que nos toca hacer, es averiguar si ya se mostraron todos los valores que figuran en la tabla, para eso utilizamos la instrucción de comparación XORLW con 9 en binario (00001001) puesto que son 10 los elementos de la tabla (del elemento 0 al elemento 9), la instrucción XORLW ya la vimos anteriormente, pero sirve recordarla.

Piensa que si el contador está en 1001 (9), ya mostró todos los elementos de la tabla, y la comparación XORLW dará como resultado 00000000 y la bandera de cero (Z) del registro STATUS se pondrá en 1, de lo contrario permanecerá en 0, ahora viene la pregunta...

BTFSC    STATUS,Z

Está en cero la bandera Z del registro STATUS...?, si es así, aún faltan elementos por mostrar, entonces salta una línea, y allí...

	INCF	cont,F		; incrementa el contador
	MOVF	cont,W		; pasa el contador a w (índice)
	CALL	tabla		; llama a la tabla

Y este trozo de código se repetirá hasta que se muestren todos los elementos.

Bien. Suponte ahora, que la cuenta ya terminó, y se mostraron todos los elementos, eso significa que "cont=1001", cuando llegue a la comparación (XORLW) el resultado SÍ dará 00000000, la bandera Z se pondrá en 1, y cuando llegues a la pregunta...

BTFSC    STATUS,Z

Está en cero la bandera Z del registro STATUS...?, la respuesta será NO, por lo tanto se mostraron todos los elementos de la tabla, y no se realizará el salto, es decir que pasará a...

GOTO    reini

y bueno, allí comenzará todo de nuevo...

Bien mis queridos amigos, espero que les haya servido de ayuda este tutorial, yo lo hice con algo sencillo, para que puedan interpretar la forma de trabajar con estos dispositivos. Imagino que mas de uno, tiene proyectos en los cuales puede incorporarlo, o tiene las intenciones de desarrollar uno nuevo con todos estos chiches, que más da, ahora queda en sus manos, por lo pronto yo me iré a jugar al Mythology, jejeje

BYE...!!!



R-Luis...


<--Anterior   Introducción   Siguiente -->
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Tabla de Referencias


    
--| |--