send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[ASM] Programando un PIC (Contador 999 con display 7 segmentos)

  • 3 Respuestas
  • 9508 Vistas

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado kal23

  • *
  • Underc0der
  • Mensajes: 11
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Enero 23, 2014, 06:41:07 pm »
Consiste en un contador desde 000 hasta 999 y después de terminar el conteo, comienza automáticamente desde 000.

Código: ASM
  1. ;**********************************************************************
  2. ;    Contador binario                                      
  3. ;**********************************************************************
  4. ;    Requiere archivos: P16F690.INC
  5. ;                       RETARDOS.INC                                
  6. ;**********************************************************************
  7.  
  8. ;**********************************************************************
  9.  
  10.         list            p=16f690                ;Especifica microcontrolador
  11.         #include        <P16F690.inc>
  12.  
  13. ;Fusibles de configuración
  14.      __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
  15.  
  16. ;ZONA DE DECLARACIÓN DE VARIABLES
  17. ;********************************
  18.     cblock 0x20
  19.     Cuenta        ;Registro para llevar el conteo
  20.     Unidad        ;Variable que lleva el conteo de unidades
  21.     Decena        ;Variable que lleva el conteo de Decenas
  22.     Centena       ;Variable que lleva el conteo de Centenas
  23.     Digito
  24.     endc
  25.  
  26. ;Define nombres descriptivos para constantes y puertos
  27. #define DISPLAY PORTC
  28.  
  29.  
  30. ;INICIALIZACION
  31. ;********************************
  32.         ORG             0x00            ;vector de reset
  33.  
  34. ;Registros de configuración
  35.         bsf     STATUS,RP0  ;Selecciona página #1
  36.     clrf    TRISC       ;PORTC será salida
  37.     clrf    TRISA       ;PORTA será salida
  38.         bcf     STATUS,RP0      ;Regresa a página #0
  39. ;Inicialización de variables
  40.     clrf    Cuenta      ;Cuenta comienza en cero
  41.     clrf    Unidad      ;comienza en cero
  42.     clrf    Decena      ;comienza en cero
  43.     clrf    Centena     ;comienza en cero
  44.  
  45. ;INSTRUCCIONES
  46. ;------------------------------------------------
  47. Inicio
  48.     incf    Cuenta,f        ;Incrementa el contador
  49.                             ;(Para el resto de instrucciones no estamos
  50.                             ;usando este registro aún)
  51. ComparaUnidad
  52.     movf    Unidad,w        ;Carga el registro Unidad en W
  53.     sublw   .9             ;Compara con 9 (9 - Unidad)
  54.     btfsc   STATUS,Z        ;¿Unidad = 9?
  55.     goto    IncrementaDecena ;Sí, incrementa decena
  56.     goto    IncrementaUnidad ;No, incrementa unidad
  57. IncrementaUnidad
  58.     incf    Unidad          ;Incrementa Unidad
  59.     goto    ComparaCentena   ;Salta a ComparaCentena
  60. IncrementaDecena
  61.     incf    Decena          ;Incrementa Decena
  62.     clrf    Unidad          ;Vuelve unidad a Cero
  63.     goto    ComparaCentena   ;Salta a ComparaCentena
  64.  
  65. ComparaCentena
  66.     movf    Decena,w        ;Carga el registro Unidad en W
  67.     sublw   .10            ;Compara con 9 (9 - Decena)
  68.     btfsc   STATUS,Z        ;¿Decena = 9?
  69.     goto    IncrementaCentena ;Sí, incrementa decena
  70.     goto    MuestraValores ;No, hace un salto a la etiqueta "MuestraValores"
  71.  
  72. IncrementaCentena
  73.     incf    Centena        ;Incrementa Centena
  74.     ;con esta parte del progrma vuelvo a 0 la variable centena cuando llega a 9
  75.     ;para iniciar nuevamente el ciclo de conteo
  76.     movf    Centena,w        ;Carga el registro Centena en W
  77.     sublw   .1,5            ;Compara con 10 (10 - Centena)
  78.     btfsc   STATUS,Z        ;¿Centena = 10?
  79.     clrf    Centena ;Sí, Deja en 0 la variable Centena
  80.     clrf    Decena ;No, Deja en 0 la variable Decena
  81.  
  82.  
  83.  
  84.  
  85. MuestraValores
  86.     call    EnviaUnidad     ;Activa el display de unidades
  87.     movf    Unidad,W        ;Carga en W el valor guardado en Unidad
  88.     call    MuestraDigito   ;lo envía al display
  89.     call    Retardo_10ms
  90.  
  91.     call    EnviaDecena     ;Activa el display de decenas
  92.     movf    Decena,W        ;Carga en W el valor guardado en Decena
  93.     call    MuestraDigito   ;lo envía al display
  94.     call    Retardo_10ms
  95.  
  96.     call    EnviaCentena     ;Activa el display de Centenas
  97.     movf    Centena,W        ;Carga en W el valor guardado en Centena
  98.     call    MuestraDigito   ;lo envía al display
  99.     call    Retardo_10ms
  100.  
  101.         goto    Inicio
  102.  
  103. ;SUBRUTINAS
  104. ;------------------------------------------------
  105. ;MuestraDigito selecciona el dígito a mostrar en display.
  106. ;Subrutinas Envia0 - Envia9 dibujan el dígito correspondiente
  107. ;en un display de 7 segmentos. EnviaE dibuja el caracter "E".
  108. ;La subrutina activa los segmentos de un display de cátodo común
  109. ;según la siguiente configuración:
  110. ;DISPLAY CATODO COMUN:       g   f   e   d   c   b   a
  111. ;PUERTO "DISPLAY" (PORTC):   RC6 RC5 RC4 RC3 RC2 RC1 RC0
  112.  
  113. MuestraDigito
  114.     movwf   Digito      ;Carga el valor de W en Dígito
  115.     movlw   .0          ;Compara con 0
  116.     xorwf   Digito,W
  117.     btfsc   STATUS,Z    ;Cuenta = 0?
  118.     goto    Envia0      ;Sí: Envia Dígito
  119.     movlw   .1          ;No: Compara con 1
  120.     xorwf   Digito,W
  121.     btfsc   STATUS,Z    ;Cuenta = 1?
  122.     goto    Envia1      ;Sí: Envia Dígito
  123.     movlw   .2          ;No: Compara con 2
  124.     xorwf   Digito,W
  125.     btfsc   STATUS,Z    ;Cuenta = 2?
  126.     goto    Envia2      ;Sí: Envia Dígito
  127.     movlw   .3          ;No: Compara con 3
  128.     xorwf   Digito,W
  129.     btfsc   STATUS,Z    ;Cuenta = 3?
  130.     goto    Envia3      ;Sí: Envia Dígito
  131.     movlw   .4          ;No: Compara con 4
  132.     xorwf   Digito,W
  133.     btfsc   STATUS,Z    ;Cuenta = 4?
  134.     goto    Envia4      ;Sí: Envia Dígito
  135.     movlw   .5          ;No: Compara con 5
  136.     xorwf   Digito,W
  137.     btfsc   STATUS,Z    ;Cuenta = 5?
  138.     goto    Envia5      ;Sí: Envia Dígito
  139.     movlw   .6          ;No: Compara con 6
  140.     xorwf   Digito,W
  141.     btfsc   STATUS,Z    ;Cuenta = 6?
  142.     goto    Envia6      ;Sí: Envia Dígito
  143.     movlw   .7          ;No: Compara con 7
  144.     xorwf   Digito,W
  145.     btfsc   STATUS,Z    ;Cuenta = 7?
  146.     goto    Envia7      ;Sí: Envia Dígito
  147.     movlw   .8          ;No: Compara con 8
  148.     xorwf   Digito,W
  149.     btfsc   STATUS,Z    ;Cuenta = 8?
  150.     goto    Envia8      ;Sí: Envia Dígito
  151.     movlw   .9          ;No: Compara con 9
  152.     xorwf   Digito,W
  153.     btfsc   STATUS,Z    ;Cuenta = 9?
  154.     goto    Envia9      ;Sí: Envia Dígito
  155.  
  156.  
  157. Envia0
  158.     movlw   b'00111111'
  159.     movwf   DISPLAY
  160.     return
  161. Envia1
  162.     movlw   b'00000110'
  163.     movwf   DISPLAY
  164.     return
  165. Envia2
  166.     movlw   b'01011011'
  167.     movwf   DISPLAY
  168.     return
  169. Envia3
  170.     movlw   b'01001111'
  171.     movwf   DISPLAY
  172.     return
  173. Envia4
  174.     movlw   b'01100110'
  175.     movwf   DISPLAY
  176.     return
  177. Envia5
  178.     movlw   b'01101101'
  179.     movwf   DISPLAY
  180.     return
  181. Envia6
  182.     movlw   b'01111100'
  183.     movwf   DISPLAY
  184.     return
  185. Envia7
  186.     movlw   b'00000111'
  187.     movwf   DISPLAY
  188.     return
  189. Envia8
  190.     movlw   b'01111111'
  191.     movwf   DISPLAY
  192.     return
  193. Envia9
  194.     movlw   b'01100111'
  195.     movwf   DISPLAY
  196.     return
  197.  
  198.  
  199. EnviaUnidad
  200.     movlw   b'00000110'
  201.     movwf   PORTA
  202.     return
  203. EnviaDecena
  204.     movlw   b'00000101'
  205.     movwf   PORTA
  206.     return
  207. EnviaCentena
  208.     movlw   b'00000011'
  209.     movwf   PORTA
  210.     return
  211.  
  212.     INCLUDE  <RETARDOS.INC>     ;Libreria de retardos
  213.     END ;Fiin del programa.
  214.  
  215.  

Esquemático en Proteus:



Link de descarga del proyecto: You are not allowed to view links. Register or Login

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5267
  • Actividad:
    48.33%
  • Reputación 26
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Enero 23, 2014, 07:43:40 pm »
Que buenos aportes has dejado!
Muchisimas gracias bro!!

Saludos!
ANTRAX


Desconectado kal23

  • *
  • Underc0der
  • Mensajes: 11
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Enero 23, 2014, 08:03:47 pm »
You are not allowed to view links. Register or Login
Que buenos aportes has dejado!
Muchisimas gracias bro!!

Saludos!
ANTRAX

ANTRAX?? ;D soy tu admirador!!! un genio en malwares y seguridad informática. jajaja

Saludos.

Desconectado mauroe83

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #3 en: Diciembre 11, 2014, 05:54:52 pm »
Hola sabes que me aparece al momento de compilar error 129,linea 2 expected (END) y no lo puedo solucionar...ayuda porfa

 

¿Te gustó el post? COMPARTILO!



[ASM] Programando un PIC (Control motor paso a paso)

Iniciado por kal23

Respuestas: 0
Vistas: 5949
Último mensaje Enero 23, 2014, 05:52:00 pm
por kal23
[ASM] Programando un PIC (Conversión Análogo/Digital 8 bits)

Iniciado por kal23

Respuestas: 0
Vistas: 2882
Último mensaje Enero 24, 2014, 06:17:56 pm
por kal23
[ASM] Programando un PIC (Uso de Timer0)

Iniciado por kal23

Respuestas: 0
Vistas: 1492
Último mensaje Enero 24, 2014, 08:20:44 pm
por kal23
[CCS] Programando un PIC (I/O)

Iniciado por kal23

Respuestas: 0
Vistas: 2211
Último mensaje Enero 27, 2014, 07:29:58 pm
por kal23
[ASM] Programando un PIC

Iniciado por mr.blood

Respuestas: 2
Vistas: 2181
Último mensaje Mayo 13, 2013, 10:30:41 pm
por Stuxnet