Practica basica contador con pic en ensamblador en 7 segmentos

Comparto el codigo de practica en ensablador, si ya se hizo en el foro disculpen, sera de ayuda a los que empiezan como yo.
Se que ensamblador no se usa como C o c++ pero me resulto un desafio.
Lo subo em txt porque se entiende un poco mejor,

Código:
;PROGRAMA: contador decimal en display de 7 segmentos.
;AUTOR...: DAMIAN RODRIGUEZ
;FECHA...:   Diciembre 2016
;COMENTARIO: 7 segemntos control, funciona
;-------------------------------------------------
          LIST    P =16F84A
          RADIX   HEX ;SE UTILIZA EL SISTEMA HEXADECIMAL
;-------------------------------------------------------
status  equ  03h    ;definicion de registros
ptoa    equ  05h
ptob    equ  06h
conta   equ  0ch   ;00001100 binario
loops    equ  0dh   ;00001101 xb
loops2  equ  0X0e   ;00001110
trisa    equ  0X85
trisb    equ  0X86
veces   equ   0X14
z         equ  02h   ;bandera de cero de registro de estdo
;-------------------------------------------------------
reset  org  0
       goto inicio   ;inicio
    
       org   5

inicio  bsf   status,5  ;se ubica en el segundo banco de Ram
         movlw  0Xf0      ;11110000
         movwf  trisa    ;se programa el puerto a como salidas
         movlw  0Xff      ;se carga el registro w con 11111111b
         movwf  trisb    ;se programa pto b como entradas
         bcf    status,5 ;se ubica en el primer banco de Ram
       
         clrf    conta    ;inicio contador

         movf   conta,w
ciclo   movwf  ptoa
         movlw   0X0a
         movwf   veces
         call   retardo

pulsa   btfsc   ptob,0 ;pregunta si pulsador oprimido
          goto    pulsa   ;si ni lo esta sigue testeando
          call    retardo
          btfsc   ptob,0
          goto    pulsa
          incf    conta   ;si se confirma pulsador incrementa contador
          movf    conta,w ;carga w con el conteo
          subwf   veces,1
          btfsc   status,z        
          goto    inicio      ;error resuelto verifica bien si llega a diez
          goto    ciclo
;-------------------------------------------------------
retardo ; subrutina de ratardo de 100ms
         movlw  64h   ;01100100 b 100 decimal
         movwf loops
top2   movlw  6eh   ;01101110  b  110 de
         movwf  loops2

top    nop
        nop
        nop
        nop
        nop
        decfsz   loops2
       goto     top
       decfsz   loops
       goto     top2
       retlw  0
;-------------------------------------------------------
        end
 

Adjuntos

  • 7seg.txt
    2.2 KB · Visitas: 11
Última edición por un moderador:
Atrás
Arriba