Uso de las tablas en lenguaje ensamblador

2,182 views
2,016 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,182
On SlideShare
0
From Embeds
0
Number of Embeds
349
Actions
Shares
0
Downloads
126
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Uso de las tablas en lenguaje ensamblador

  1. 1. DIAGRAMAS DE FLUJO PARA RUTINAS DE RETARDO DE 1 HASTA 60 MINUTOS DIAGRAMA DE FLUJO PARA CERROJO AUTOMÁTICO CERROJO CERROJO TRADICIONAL AUTOMÁTICO TAREA1 TAREA1 Inicializar registro: CONTACERR=0NO ¿Ocurrió condición? Delay 15 SI msegundos ¿Ocurrió NO ¿CONTACERR= NO CONTACERR= TAREA2 condición? 200? CONTACERR +1 SI SI IR A PARADA TAREA2 Delay 15 msegundos La sacamos del PDEL Return
  2. 2. ¿Cuánto tiempo pasa para salir del cerrojo?CONTACERR se incrementará hasta 200, y por cada incremento se debe esperar 15milisegundos, es decir= Tiempo de espera en cerrojo= 15mseg*200= 3 segundos.Este tiempo puede ajustarse según sea el diseño que se esté realizando. USO DE LAS TABLAS EN LENGUAJE ENSAMBLADOR Las tablas nos permiten extraer valores para ser utilizados en otras tareas, talescomo la visualización de datos, linealización de valores, conversión de códigos, etc. Su aplicación era principalmente para el uso de los sistemas contadores en conjuntocon la multiplexación de displays, sin el uso de un decodificador BCD a 7 segmentos; sinembargo, pueden servir para semáforos, sistemas de monitoreo, aplicacionesresidenciales, entre otras. Su funcionamiento se basa en la manipulación del contador de programa (PC)mediante la suma de un dato a extraer de la tabla (registro) y la parte baja del contador deprograma (PCL). Para un rango máximo de 256 valores, se manipula directamente el PCL.En caso de valores superiores, se debe manipular adicionalmente el PCLATH, que amplía lacapacidad de datos en una tabla. La instrucción RETLW K (Retorna de la subrutina y carga en W el valor constante k),está muy asociada a las tablas, ya que cuando se llama a una subrutina “tabla”, estainstrucción regresa de la subrutina y a su vez extrae el valor de la misma previamenteseleccionada por el puntero de tabla. Normalmente, cuando se llama a una subrutina “tabla”, previamente se carga elvalor del dato a sacar de la tabla. Dentro de la subrutina “tabla”, el dato a sacar, se suma alPCL que es el encabezado o puntero de la tabla, “saltando” al valor correspondienteindicado por el dato que se desea extraer de la tabla. En la siguiente imagen, supongamos que se desea sacar el valor del registro UNIDAD(supongamos que UNIDAD= 5 al momento de ejecutar el llamado a la tabla), por lo que sele sumará UNIDAD + PCL (5+PCL ubicado en el puntero o encabezado de la tabla), y éstesaltará desde el encabezado al valor de la UNIDAD (que vale 5 para este ejemplo) y Wretornará con ese valor cargado (W=’Valor5’).
  3. 3. Cuando se trabaja con displays y la respectiva multiplexación es un estándar utilizarlos siguientes códigos o extractos de un programa:movf DATO,0 ;DATO pasa a W. es el dato que secall TABLA ;quiere extraer de la tabla ; Después que se regresa de la tabla con el valor del registro ; “DATO”, se saca este valor y se pasa a la salida del puerto ; que está controlando los 7 sgmentos de los displays.movwf PORTB ;o puede ser PORTC o D, según el PIC Es importante resaltar que el uso de las tablas elimina tener que utilizar undecodificador y permite mostrar números, letras y algunos símbolos al manipulardirectamente los 7 segmentos de un display. Veamos los siguientes ejemplos del uso de las tablas en programas con estructurade contadores y multiplexación de displays.
  4. 4. Ejemplo 1. Contador de 2 cifras estándar (00 a 99).El diagrama de flujo es el mismo de contador ascendente de 2 cifras en la guía 3_2 demicrocontroladores I, de Rutinas intermedias. Programa en Lenguaje Ensamblador: LIST P=16F877A INCLUDE P16F877A.INC;**************************;DECLARACIÓN DE REGISTROS=;**************************UNI EQU 20HDEC EQU 21HCOPIA EQU 26HPDel0 EQU 27HCONTADOR EQU 28H;************************** ORG 00H GOTO INICIOINICIO BSF STATUS,5 MOVLW B00000110 MOVWF ADCON1 CLRF TRISA MOVLW B00001111 MOVWF TRISB CLRF TRISC BCF STATUS,5 CLRF UNI CLRF DEC;****************************;CONTADOR CLÁSICO DE 00 A 99;****************************EME CALL MOSTRAR BTFSC PORTB,0 ;+1=0? GOTO EME ;NO. VA A EXPLORAR DE NUEVOANTIREB1 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,0 ;+1=1? GOTO ANTIREB1 MOVF UNI,0 ;UNI A W SUBLW .9
  5. 5. BTFSS STATUS,2 ;Z=1? UNI=9? GOTO SUBEUNI GOTO DECENASUBEUNI INCF UNI,1 ;UNI=UNI+1 GOTO EMEDECENA CLRF UNI MOVF DEC,0 ;DEC A W SUBLW .9 BTFSS STATUS,2 ;Z=1? DEC=9? GOTO SUBEDEC CLRF DEC CLRF UNI GOTO EMESUBEDEC INCF DEC,1 ;DEC=DEC+1 GOTO EME;**************************************************;RUTINA MOSTRAR(INCLUYE CONVERSIONES BINARIO A BCD);**************************************************MOSTRAR BCF PORTB,5 ;DISPLAY DEC OFF BSF PORTB,4 ;DISPLAY UNI ON;ESTA ES LA MODIFICACIÓN CUANDO NO SE TIENE UN DECODIFICADOR=;NOTA= LOS SEGMENTOS DEL DISPLAY ESTÁN CONECTADOS AL PUERTO C (16F877A) MOVF UNI,0 ;UNI A W CALL TABLA ;W VA A TABLA Y REGRESA CON VALOR DE UNI MOVWF PORTC ;UNI ES SACADO HACIA LA TABLA;ESTAS INSTRUCCIONES SE USAN CUANDO SE TIENE UN DECODIFICADOR=;NOTA= EL DECODIFICADOR ESTÁ CONECTADO POR EL PUERTO A (16F84A) ;MOVF UNI,0 ;MOVWF PORTA ;UNIV A PORTA CALL DELAY5MS BSF PORTB,5 ;DISPLAY DEC ON BCF PORTB,4 ;DISPLAY UNI OFF;ESTA ES LA MODIFICACIÓN CUANDO NO SE TIENE UN DECODIFICADOR=;NOTA= LOS SEGMENTOS DEL DISPLAY ESTÁN CONECTADOS AL PUERTO C (16F877A) MOVF DEC,0 ;DEC A W CALL TABLA ;W VA A TABLA Y REGRESA CON VALOR DE DEC MOVWF PORTC ;DEC ES SACADO HACIA LA TABLA;ESTAS INSTRUCCIONES SE USAN CUANDO SE TIENE UN DECODIFICADOR=
  6. 6. ;NOTA= EL DECODIFICADOR ESTÁ CONECTADO POR EL PUERTO A (16F84A) ;MOVF DEC,0 ;MOVWF PORTA ;DECV A PORTA CALL DELAY5MS RETURN;****************************************************************;**********************SUBRUTINA DE TABLA************************;****************************************************************;CONVIERTE DATO BCD A 7SEGMENTOS, COMO SI FUERA UN DECODIFICADOR;ESTA TABLA ES PARA ÁNODO COMÚN, SI ES PARA CÁTODO COMÚN SE DEBE;INVERTIR LOS 0 POR 1 Y LOS 1 POR 0;****************************************************************;IMPORTANTE: ¿PARA QUÉ SON ESTOS VALORES QUE SE MUESTRAN EN LA TABLA? VALORES;TOMEMOS EL PRIMERO= B’11000000’, RECORDANDO QUE ESTE DATO VA A SALIR;POR UN PUERTO DE 8 BITS, SEA EL PORTB, PORTC O PORTD HACIA LOS 7 SEGMENTOS;DE UN DISPLAY ÁNODO COMÚN:;VEMOS QUE SE HA FORMADO EL CERO (0) Y ASÍ PARA CADA NÚMERO O LETRA COMO PARA;SE VERÁ EN EL EJEMPLO 3.TABLA ADDWF PCL,1 RETLW B11000000 ;VALOR 0 RETLW B11111001 ;VALOR 1 RETLW B10100100 ;VALOR 2 RETLW B10110000 ;VALOR 3
  7. 7. RETLW B10011001 ;VALOR 4 RETLW B10010010 ;VALOR 5 RETLW B10000011 ;VALOR 6 RETLW B11111000 ;VALOR 7 RETLW B10000000 ;VALOR 8 RETLW B10011000 ;VALOR 9;;;RUTINA 5MS GENERADA DEL PDEL;DELAY5MS movlw .248 ; 1 set numero de repeticion movwf PDel0 ;1|PLoop0 clrwdt ; 1 clear watchdog decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? goto PLoop0 ; 2 no, loopPDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ENDCircuito en Proteus:
  8. 8. Ejemplo 2. Marcador para cancha de Bolas criollas.Es el mismo ejercicio pero sin el uso del decodificador. Se migró a un PIC16F877 por noalcanzar los pines del PIC16F84A. Asumir el mismo diagrama de flujo. Lo que varia es larutina de mostrar, ya que no se utiliza el decodificador. Programa en Lenguaje Ensamblador: LIST P=16F877A INCLUDE P16F877A.INC;**************************;DECLARACIÓN DE REGISTROS=;**************************UNIV EQU 20HDECV EQU 21HUNIR EQU 22HDECR EQU 23HCONTAV EQU 24HCONTAR EQU 25HCOPIA EQU 26HPDel0 EQU 27HCONTADOR EQU 28H;************************** ORG 00H GOTO INICIOINICIO BSF STATUS,5 MOVLW B00000110 MOVWF ADCON1 CLRF TRISA MOVLW B00001111 MOVWF TRISB CLRF TRISC BCF STATUS,5 CLRF UNIV CLRF DECV CLRF UNIR CLRF DECR CLRF CONTAV CLRF CONTAREME CALL MOSTRAR
  9. 9. BTFSC PORTB,0 ;+1V=0? GOTO SIGUE1 ;NO. VA A -1VANTIREB1 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,0 ;+1V=1? GOTO ANTIREB1 MOVF CONTAV,0 SUBLW .24 BTFSS STATUS,2 ;Z=1? CONTAV=24? GOTO SUBEV GOTO EMESUBEV INCF CONTAV,1 ;CONTAV=CONTAV+1 GOTO EMESIGUE1 BTFSC PORTB,1 ;-1V=0? GOTO SIGUE2 ;VA A +1RANTIREB2 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,1 ;-1V=1? GOTO ANTIREB2 MOVF CONTAV,0 SUBLW .0 BTFSS STATUS,2 ;Z=1? CONTAV=0? GOTO BAJAV GOTO EMEBAJAV DECF CONTAV,1 ;CONTAV=CONTAV-1 GOTO EMESIGUE2 BTFSC PORTB,2 ;+1R=0? GOTO SIGUE3 ;NO. VA A -1RANTIREB3 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,2 ;+1R=1? GOTO ANTIREB3 MOVF CONTAR,0 SUBLW .24 BTFSS STATUS,2 ;Z=1? CONTAR=24? GOTO SUBER GOTO EMESUBER INCF CONTAR,1 ;CONTAR=CONTAR+1 GOTO EMESIGUE3 BTFSC PORTB,3 ;-1R=0? GOTO EME
  10. 10. ANTIREB4 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,3 ;-1R=1? GOTO ANTIREB4 MOVF CONTAR,0 SUBLW .0 BTFSS STATUS,2 ;Z=1? CONTAR=0? GOTO BAJAR GOTO EMEBAJAR DECF CONTAR,1 ;CONTAR=CONTAR-1 GOTO EME;**************************************************;RUTINA MOSTRAR(INCLUYE CONVERSIONES BINARIO A BCD);**************************************************MOSTRAR CALL BIN_BCDV CALL BIN_BCDR BCF PORTB,7 ;DISPLAY DECROJO OFF BCF PORTB,6 ;DISPLAY UNIROJO OFF BCF PORTB,5 ;DISPLAY DECVERDE OFF BSF PORTB,4 ;DISPLAY UNIVERDE ON;ESTA ES LA MODIFICACIÓN CUANDO NO SE TIENE UN DECODIFICADOR=;NOTA= LOS SEGMENTOS DEL DISPLAY ESTÁN CONECTADOS AL PUERTO C (16F877A) MOVF UNIV,0 ;UNIV A W CALL TABLA ;W VA A TABLA Y REGRESA CON VALOR UNIV MOVWF PORTC ;UNIV SE MUESTRA POR EL PORTC;ESTAS INSTRUCCIONES SE USAN CUANDO SE TIENE UN DECODIFICADOR=;NOTA= EL DECODIFICADOR ESTÁ CONECTADO POR EL PUERTO A (16F84A) ;MOVF UNIV,0 ;MOVWF PORTA ;UNIV A PORTA CALL DELAY5MS BCF PORTB,7 ;DISPLAY DECROJO OFF BCF PORTB,6 ;DISPLAY UNIROJO OFF BSF PORTB,5 ;DISPLAY DECVERDE ON BCF PORTB,4 ;DISPLAY UNIVERDE OFF;ESTA ES LA MODIFICACIÓN CUANDO NO SE TIENE UN DECODIFICADOR=;NOTA= LOS SEGMENTOS DEL DISPLAY ESTÁN CONECTADOS AL PUERTO C (16F877A) MOVF DECV,0 ;DECV A W CALL TABLA ;W VA A TABLA Y REGRESA CON VALOR DECV MOVWF PORTC ;DECV SE MUESTRA POR EL PORTC
  11. 11. ;ESTAS INSTRUCCIONES SE USAN CUANDO SE TIENE UN DECODIFICADOR=;NOTA= EL DECODIFICADOR ESTÁ CONECTADO POR EL PUERTO A (16F84A) ;MOVF DECV,0 ;MOVWF PORTA ;DECV A PORTA CALL DELAY5MS BCF PORTB,7 ;DISPLAY DECROJO OFF BSF PORTB,6 ;DISPLAY UNIROJO ON BCF PORTB,5 ;DISPLAY DECVERDE OFF BCF PORTB,4 ;DISPLAY UNIVERDE OFF;ESTA ES LA MODIFICACIÓN CUANDO NO SE TIENE UN DECODIFICADOR=;NOTA= LOS SEGMENTOS DEL DISPLAY ESTÁN CONECTADOS AL PUERTO C (16F877A) MOVF UNIR,0 ;UNIR A W CALL TABLA ;W VA A TABLA Y REGRESA CON VALOR UNIR MOVWF PORTC ;UNIR SE MUESTRA POR EL PORTC;ESTAS INSTRUCCIONES SE USAN CUANDO SE TIENE UN DECODIFICADOR=;NOTA= EL DECODIFICADOR ESTÁ CONECTADO POR EL PUERTO A (16F84A) ;MOVF UNIR,0 ;MOVWF PORTA ;UNIR A PORTA CALL DELAY5MS BSF PORTB,7 ;DISPLAY DECROJO ON BCF PORTB,6 ;DISPLAY UNIROJO OFF BCF PORTB,5 ;DISPLAY DECVERDE OFF BCF PORTB,4 ;DISPLAY UNIVERDE OFF;ESTA ES LA MODIFICACIÓN CUANDO NO SE TIENE UN DECODIFICADOR=;NOTA= LOS SEGMENTOS DEL DISPLAY ESTÁN CONECTADOS AL PUERTO C (16F877A) MOVF DECR,0 ;DECR A W CALL TABLA ; W VA A TABLA Y REGRESA CON VALOR DECR MOVWF PORTC ;DECR SE MUESTRA POR EL PORTC;ESTAS INSTRUCCIONES SE USAN CUANDO SE TIENE UN DECODIFICADOR=;NOTA= EL DECODIFICADOR ESTÁ CONECTADO POR EL PUERTO A (16F84A) ;MOVF DECR,0 ;MOVWF PORTA ;DECR A PORTA CALL DELAY5MS RETURN
  12. 12. ;******************************;RUTINA DE BINARIO A BCD VERDE:;******************************BIN_BCDV CLRF UNIV CLRF DECV CLRF COPIA MOVF CONTAV,0 MOVWF COPIASUBEDV MOVLW .10 SUBWF COPIA,1 BTFSC STATUS,0 GOTO SUBEDECV GOTO SUBEUVSUBEDECV INCF DECV,1 GOTO SUBEDVSUBEUV MOVLW .10 ADDWF COPIA,1SUBEU2V MOVLW .1 SUBWF COPIA,1 BTFSS STATUS,0 RETURNSUBEU3V INCF UNIV,1 GOTO SUBEU2V;******************************;RUTINA DE BINARIO A BCD ROJO:;******************************BIN_BCDR CLRF UNIR CLRF DECR CLRF COPIA MOVF CONTAR,0 MOVWF COPIASUBEDR MOVLW .10 SUBWF COPIA,1 BTFSC STATUS,0 GOTO SUBEDECR GOTO SUBEURSUBEDECR INCF DECR,1 GOTO SUBEDR
  13. 13. SUBEUR MOVLW .10 ADDWF COPIA,1SUBEU2R MOVLW .1 SUBWF COPIA,1 BTFSS STATUS,0 RETURNSUBEU3R INCF UNIR,1 GOTO SUBEU2R;****************************************************************;**********************SUBRUTINA DE TABLA************************;****************************************************************;CONVIERTE DATO BCD A 7SEGMENTOS, COMO SI FUERA UN DECODIFICADOR;ESTA TABLA ES PARA ÁNODO COMÚN, SI ES PARA CÁTODO COMÚN SE DEBE;INVERTIR LOS 0 POR 1 Y LOS 1 POR 0;****************************************************************TABLA ADDWF PCL,1 RETLW B11000000 ;VALOR 0 RETLW B11111001 ;VALOR 1 RETLW B10100100 ;VALOR 2 RETLW B10110000 ;VALOR 3 RETLW B10011001 ;VALOR 4 RETLW B10010010 ;VALOR 5 RETLW B10000011 ;VALOR 6 RETLW B11111000 ;VALOR 7 RETLW B10000000 ;VALOR 8 RETLW B10011000 ;VALOR 9;;;RUTINA 5MS GENERADA DEL PDEL;DELAY5MS movlw .248 ; 1 set numero de repeticion movwf PDel0 ; 1 |PLoop0 clrwdt ; 1 clear watchdog decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? goto PLoop0 ; 2 no, loopPDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin. END
  14. 14. Circuito en Proteus:Ejemplo 3. Contador de 3 etapas. Para este ejemplo se asume que cada etapa va a contar 6 eventos. Este númeropuede ser modificado a gusto del usuario. Aquí se introduce el uso de las letras que esuna de las ventajas de no utilizar decodificadores, ya que estos limitan la visualización del0 al 9. En cada etapa, se muestra un mensaje de 2 letras y al lado el contador de loseventos. Se muestra una tabla en la que contiene lo que considero pueden ser la tabla máscompleta de números, letras y algunos símbolos que pueden mostrarse en un displayconvencional de 7 segmentos. El diagrama de flujo es simple. A continuación:RB0= +1RB4= DISPLAY UNIRB5= DISPLAY DECRB6= DISPLAY LETRA1RB7= DISPLAY LETRA2PORTC= SALIDA A LOS SEGMENTOS
  15. 15. Programa en Lenguaje Ensamblador: LIST P=16F877A INCLUDE P16F877A.INC;**************************;DECLARACIÓN DE REGISTROS=;**************************UNI EQU 20HDEC EQU 21HLETRA1 EQU 22HLETRA2 EQU 23HCONTA EQU 24HCOPIA EQU 26HPDel0 EQU 27HPDel0A EQU 29HPDel1 EQU 2AHCONTADOR EQU 28H;**************************
  16. 16. ORG 00H GOTO INICIOINICIO BSF STATUS,5 MOVLW B00000110 MOVWF ADCON1 CLRF TRISA MOVLW B00001111 MOVWF TRISB CLRF TRISC BCF STATUS,5 CLRF UNI CLRF DEC CLRF CONTADOR;***************************************;MENSAJE DE INICIO CON TODAS LAS LETRAS;***************************************;ESTE MENSAJE MUESTRA TODOS LOS NÚMEROS Y LETRAS DE LA TABLAENTRADAMSJ CALL MOSTRAR2 MOVF CONTADOR,0 SUBLW .37 BTFSS STATUS,2 GOTO SUBELETRA CLRF CONTADOR GOTO ETAPA1SUBELETRA INCF CONTADOR,1 CALL RET05S GOTO ENTRADAMSJ;***************************************;***************************************;***************************************ETAPA1 MOVLW .26 MOVWF LETRA2 MOVLW .14 MOVWF LETRA1EME CALL MOSTRAR BTFSC PORTB,0 ;+1=0? GOTO EME ;NO. SIGUE PREGUNTANDO POR SENSORANTIREB1 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS
  17. 17. BTFSS PORTB,0 ;+1=1? GOTO ANTIREB1 MOVF CONTA,0 SUBLW .6 BTFSS STATUS,2 ;Z=1? CONTA=24? GOTO SUBE GOTO ETAPA2SUBE INCF CONTA,1 ;CONTA=CONTA+1 GOTO EMEETAPA2 CLRF CONTA MOVLW .35 MOVWF LETRA1 MOVLW .1 MOVWF LETRA2EME2 CALL MOSTRAR BTFSC PORTB,0 ;+1=0? GOTO EME2 ;NO. SIGUE PREGUNTANDO POR SENSORANTIREB2 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,0 ;+1=1? GOTO ANTIREB2 MOVF CONTA,0 SUBLW .6 BTFSS STATUS,2 ;Z=1? CONTA=24? GOTO SUBE2 GOTO ETAPA3SUBE2 INCF CONTA,1 ;CONTA=CONTA+1 GOTO EME2ETAPA3 CLRF CONTA MOVLW .23 MOVWF LETRA1 MOVLW .20 MOVWF LETRA2EME3 CALL MOSTRAR BTFSC PORTB,0 ;+1=0? GOTO EME3 ;NO. SIGUE PREGUNTANDO POR SENSORANTIREB3 CALL MOSTRAR ;EQUIVALE A DELAY DE CALL DELAY5MS BTFSS PORTB,0 ;+1=1? GOTO ANTIREB3
  18. 18. MOVF CONTA,0 SUBLW .6 BTFSS STATUS,2 ;Z=1? CONTA=24? GOTO SUBE3 CLRF CONTA GOTO ETAPA1SUBE3 INCF CONTA,1 ;CONTA=CONTA+1 GOTO EME3;**************************************************;****************RUTINA MOSTRAR******************;****************INCLUYE (NÚMEROS)****************;****************INCLUYE (LETRAS)*******************;**************************************************MOSTRAR CALL BIN_BCD BCF PORTB,7 ;DISPLAY LETRADEC OFF BCF PORTB,6 ;DISPLAY LETRAUNI OFF BCF PORTB,5 ;DISPLAY CONTADEC OFF BSF PORTB,4 ;DISPLAY CONTAUNI ON MOVF UNI,0 CALL TABLA MOVWF PORTC CALL DELAY5MS BCF PORTB,7 ;DISPLAY LETRADEC OFF BCF PORTB,6 ;DISPLAY LETRAUNI OFF BSF PORTB,5 ;DISPLAY CONTADEC ON BCF PORTB,4 ;DISPLAY CONTAUNI OFF MOVF DEC,0 CALL TABLA MOVWF PORTC CALL DELAY5MS BCF PORTB,7 ;DISPLAY LETRADEC OFF BSF PORTB,6 ;DISPLAY LETRAUNI ON BCF PORTB,5 ;DISPLAY CONTADEC OFF BCF PORTB,4 ;DISPLAY CONTAUNI OFF MOVF LETRA1,0 CALL TABLA MOVWF PORTC
  19. 19. CALL DELAY5MS BSF PORTB,7 ;DISPLAY LETRADEC ON BCF PORTB,6 ;DISPLAY LETRAUNI OFF BCF PORTB,5 ;DISPLAY CONTADEC OFF BCF PORTB,4 ;DISPLAY CONTAUNI OFF MOVF LETRA2,0 CALL TABLA MOVWF PORTC CALL DELAY5MS RETURN;***********************************************;MUESTRA LETRAS Y SÍMBOLOS EN TODOS LOS DISPLAYS;***********************************************MOSTRAR2 BSF PORTB,7 ;DISPLAY LETRADEC ON BSF PORTB,6 ;DISPLAY LETRAUNI ON BSF PORTB,5 ;DISPLAY CONTADEC ON BSF PORTB,4 ;DISPLAY CONTAUNI ON MOVF CONTADOR,0 CALL TABLA MOVWF PORTC RETURN;*********************************;RUTINA DE BINARIO A BCD CONTADOR:;*********************************BIN_BCD CLRF UNI CLRF DEC CLRF COPIA MOVF CONTA,0 MOVWF COPIASUBED MOVLW .10 SUBWF COPIA,1 BTFSC STATUS,0 GOTO SUBEDEC GOTO SUBEUSUBEDEC INCF DEC,1 GOTO SUBEDSUBEU MOVLW .10 ADDWF COPIA,1
  20. 20. SUBEU2 MOVLW .1 SUBWF COPIA,1 BTFSS STATUS,0 RETURNSUBEU3 INCF UNI,1 GOTO SUBEU2;*****************************************************************;********SUBRUTINA DE TABLA DE NUMEROS, LETRAS Y SIMBOLOS*********;*****************************************************************;MUESTRA VARIAS LETRAS O SÍMBOLOS QUE SE PUEDEN MOSTRAR EN DISPLAY;ESTA TABLA ES PARA ÁNODO COMÚN, SI ES PARA CÁTODO COMÚN SE DEBE;INVERTIR LOS 0 POR 1 Y LOS 1 POR 0;*****************************************************************TABLA ADDWF PCL,1 ;PUNTERO O ENCABEZADO DE LA TABLA RETLW B11000000 ;0. VALOR 0 RETLW B11111001 ;1. VALOR 1 RETLW B10100100 ;2. VALOR 2 RETLW B10110000 ;3. VALOR 3 RETLW B10011001 ;4. VALOR 4 RETLW B10010010 ;5. VALOR 5 RETLW B10000011 ;6. VALOR 6 RETLW B11111000 ;7. VALOR 7 RETLW B10000000 ;8. VALOR 8 RETLW B10011000 ;9. VALOR 9 RETLW B10001000 ;10. A RETLW B10000011 ;11. b RETLW B11000110 ;12. C RETLW B10100001 ;13. d RETLW B10000110 ;14. E RETLW B10001110 ;15. F RETLW B10010000 ;16. g RETLW B10001001 ;17. H RETLW B11001111 ;18. I RETLW B11100001 ;19. J RETLW B11000111 ;20. L RETLW B10101011 ;21. n RETLW B10100011 ;22. o RETLW B10001100 ;23. P
  21. 21. RETLW B10101111 ;24. r RETLW B10010010 ;25. S RETLW B11000001 ;26. U RETLW B10010001 ;27. Y RETLW B10101011 ;28. SIMBOLO1 RETLW B10101010 ;29. SIMBOLO2 RETLW B11001001 ;30. SIMBOLO3 RETLW B11011100 ;31. SIMBOLO4 RETLW B11110000 ;32. SIMBOLO5 RETLW B10011100 ;33. SIMBOLO6 RETLW B10110110 ;34. SIMBOLO NIVEL ALTO RETLW B10110111 ;35. SIMBOLO NIVEL MEDIO RETLW B11110111 ;36. SIMBOLO NIVEL BAJO;LÍMITE DE TABLA2= 37 (DEL 0 AL 36);;;RUTINA 5MS GENERADA DEL PDEL;DELAY5MS movlw .248 ; 1 set numero de repeticion movwf PDel0 ;1|PLoop0 clrwdt ; 1 clear watchdog decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? goto PLoop0 ; 2 no, loopPDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin.;;;RUTINA 0,5SEG GENERADA DEL PDELRET05S NOPret5 movlw .245 ; 1 set numero de repeticion (B) movwf PDel0A ;1|PLoop1X movlw .254 ; 1 set numero de repeticion (A) movwf PDel1 ;1|PLoop2X clrwdt ; 1 clear watchdog decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2X ; 2 no, loop decfsz PDel0A, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1X ; 2 no, loopPDelL1X goto PDelL2X ; 2 ciclos delayPDelL2X clrwdt ; 1 ciclo delay
  22. 22. return END ; FIN DEL PROGRAMACircuito en Proteus:
  23. 23. Ejemplo 4. Semáforo 4 esquinas simple.En este ejemplo se muestra el uso de dos tablas, una para mostrarse por el puerto A y otrapara mostrarse por el puerto B. Ambos puertos manipulan los 12 bombillos que poseería elsemáforo 4 esquinas.El diagrama de flujo muestra los estados de tiempo largo, cuando el semáforo esta en rojoo en verde y los estados de tiempo corto, cuando está en amarillo.Este ejemplo es limitado a un semáforo sencillo de 4 esquinas, sin embargo puedemodificarse separando cada etapa con tiempos distintos a los que se muestran acontinuación.
  24. 24. Diagrama de flujo INICIO MOSTRAR TABLA1 Declarar registro: CONTA → W W + PCL → PCL CONTA, CONTA2,PDel0, PDel1 TABLA1 Retornamos con el valor Configurar en W extraido de la tabla Puerto A y B correspondiente al W → PORTB Puerto B Inicializar registros: CONTA, CONTA2 CONTA → W Return Puerto A y B TABLA2 TABLA2 NO ¿Se pulsó INICIO? W → PORTA SI W + PCL → PCL 1 Return MOSTRAR Retornamos con el valor en W extraido de la tabla correspondiente al Delay 30 seg Puerto A CONTA= CONTA +1 Return MOSTRAR Delay 5 seg NOCONTA= CONTA +1 ¿CONTA=7? 1 SI CONTA= 0 1
  25. 25. Delay 30 seg Delay 5 seg Inicializar registro: Inicializar registro: CONTA2 CONTA2 Delay 1 seg Delay 1 seg NO NO CONTA2= CONTA2 +1 ¿CONTA2=29? CONTA2= CONTA2 +1 ¿CONTA2=4? SI SI Return Return Delay 1 segundo La sacamos del PDEL Return LIST P=16F84A INCLUDE P16F84A.INCCONTA EQU 20H ;Registro contador de estados del semáforoCONTA2 EQU 21H ;Registro para las rutinas de tiempo de 30 y 5 segundosPDel0 EQU 22H ;Registros para las rutinas de tiempo de 1 segundoPDel1 EQU 23HPDel2 EQU 24H ORG 00H GOTO INICIOINICIO BSF STATUS,5 CLRF TRISB ;Puerto B como salida MOVLW B00010000 ;RA4= Entrada y el Resto como salidas MOVWF TRISA BCF STATUS,5
  26. 26. CLRF CONTA ;INICIALIZAMOS LOS REGISTROS Y PUERTOS CLRF CONTA2 CLRF PORTA CLRF PORTBNCICLO CALL MOSTRAR CALL DELAY30S ;Se inicia la primera cuenta del 1er estado INCF CONTA,1 CALL MOSTRAR ;Se llama a subrutina mostrar CALL DELAY5S ;Se espera el estado amarillo MOVLW 07H SUBWF CONTA,0 ;Se pregunta si se llegó al final de los estados ;del semáforo BTFSS STATUS,2 GOTO SUBE CLRF CONTA GOTO NCICLOSUBE INCF CONTA,1 GOTO NCICLO;***************************************************;RUTINA PARA MOSTRAR LOS DATOS EXTRAIDOS DE LA TABLA;POR LOS PUERTOS A Y B;***************************************************MOSTRAR MOVF CONTA,0 CALL TABLA1 MOVWF PORTB MOVF CONTA,0 CALL TABLA2 MOVWF PORTA RETURN;********************************;RUTINA DE RETARDO DE 30 SEGUNDOS;********************************DELAY30S CLRF CONTA2OTRO CALL RET1S MOVLW D10 SUBWF CONTA2,0 BTFSS STATUS,2 GOTO PREVIO
  27. 27. RETURNPREVIO INCF CONTA2,1 GOTO OTRO;*******************************;RUTINA DE RETARDO DE 5 SEGUNDOS;*******************************DELAY5S CLRF CONTA2OTRO2 CALL RET1S MOVLW D4 SUBWF CONTA2,0 BTFSS STATUS,2 GOTO PREVIO2 RETURNPREVIO2 INCF CONTA2,1 GOTO OTRO2;**************************************************;RUTINA DE TIEMPO DE 1 SEGUNDO GENERADA POR EL PDEL;**************************************************RET1S movlw .14 ; 1 set numero de repeticion (C) movwf PDel0 ; 1 |PLoop0 movlw .72 ; 1 set numero de repeticion (B) movwf PDel1 ; 1 |PLoop1 movlw .247 ; 1 set numero de repeticion (A) movwf PDel2 ; 1 |PLoop2 clrwdt ; 1 clear watchdog decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2 ; 2 no, loop decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1 ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C) goto PLoop0 ; 2 no, loopPDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin.
  28. 28. ;*************************************;TABLA QUE CONTIENE EL ESTADO DE LOS;BOMBILLOS CONTROLADOS POR EL PUERTO B;**************************************TABLA1 ADDWF PCL,1 RETLW B10110011 ;4CH; RETLW B10110101 ;4AH; RETLW B10011110 ;61H; RETLW B10101110 ;51H; RETLW B11110110 ;09H; RETLW B01110110 ;89H; RETLW B10110110 ;49H; RETLW B10110110 ;49H;;*************************************;TABLA QUE CONTIENE EL ESTADO DE LOS;BOMBILLOS CONTROLADOS POR EL PUERTO A;*************************************TABLA2 ADDWF PCL,1 RETLW B00001101 ;02H; RETLW B00001101 ;02H; RETLW B00001101 ;02H; RETLW B00001101 ;02H; RETLW B00001100 ;03H; RETLW B00001101 ;02H; RETLW B00000111 ;08H; RETLW B00001011 ;04H; END
  29. 29. Circuito en Proteus:

×