Autor Tema: Ayuda con acumulador en PIC pic16f84a  (Leído 1667 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kevon0012

  • PIC10
  • *
  • Mensajes: 2
Ayuda con acumulador en PIC pic16f84a
« en: 29 de Mayo de 2021, 14:02:11 »
Tengo este codigo en ensamblador donde necesito guardar el numero de veces que se oprime los DOS botones pero no se como guardar esos datos para que se acumule para saber cual es mayor,menor o igual gracias



   LIST   P=16F84A,            ; usar PIC 16F84A
   #include <p16f84A.inc>

   __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC   ; code protec      off
                     ; power up timer   on
                     ; watchdog      off
                     ; osc         XT
;Variable
Numero EQU B'00000001' ;PORTA -> 5bits
Numero2 EQU B'00000010'
 
;CODIGO

    ORG       0
INICIO
    BSF       STATUS,RP0
    CLRF    TRISB   ;PORTB todo como salida
    MOVLW   B'00011111'
    MOVWF   TRISA   ; PORTA todo como entrada
    BCF       STATUS,RP0

START
INCF Numero,W
    ; Si la resta = positiva, C=1 Z=0
    ; Si la resta = cero, C=1 Z=1
    ; Si la resta = negativo, C=0 Z=0
    MOVLW   Numero ; Numero -> W
    SUBWF   PORTA,W ; PORTA - Numero = se almacena en W
    MOVLW   B'00000000'; PORTA < Numero Aqui se quedan prendidos
    BTFSC   STATUS,C
    MOVLW   B'00000010'; PORTA > Numero
    BTFSC   STATUS,Z 
    MOVLW   B'00000001'; PORTA = Numero
    MOVWF   PORTB;  W -> PORTB
    GOTO    START
    END
   

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda con acumulador en PIC pic16f84a
« Respuesta #1 en: 29 de Mayo de 2021, 14:12:03 »
Primero que nada ya hiciste un post por lo mismo... Un programa que lee los dos botones, y enciende un led segun si es mayor, menor o igual. En ese post te respondi con el programa para su comparacion, y de ahi podes sacar exactamente lo que estas pidiendo ahora.

Citar
no se como guardar esos datos para que se acumule para saber cual es mayor,menor o igual gracias

Guardarlo en algun registro (espacio de la RAM libre para este uso)... eso es todo lo que tenes que hacer. El problema es que no conoces el funcionamiento del PIC, ni tampoco del compilador, a pesar que te voy a dar algunos puntos, te sugiero que busques ejemplos y estudies que es lo que se hizo en esos ejemplos.

W es un registro que lo vas a usar en la mayoría de las operaciones... Hacer:

INCF Numero,W

Hace que Numero +1 se guarde en W, pero Numero queda con el mismo valor.
Si queres que se incremente numero entonces lo tense que guardar en el mismo registro, es decir

INCF Numero,F

Luego si necesitas llevarlo a otro lado lo podes mover a W. Pero OJO, asi como tenes el programa vas a estar modificando la direccion 0x01 de la RAM, que es un registro que posee el PIC para su funcionamiento.


--------------------

Si queres mover lo que contiene el registro,, es decir lo que contiene Numero, tenes que usar MOVF Numero, W

MOVLW   Numero

La palabra numero en realidad es un sustituto de b'00000001'

----------------------

Las direcciones de memoria RAM libres comienzan desde 0x0C en el PIC16F84A, observar el Datasheet del micro.
« Última modificación: 29 de Mayo de 2021, 14:33:25 por KILLERJC »