List P=16F877A ; Procesador PIC16f877A
#include "p16f877a.inc" ;Incluye las librerias
; CONFIGURACION DEL PIC16F84A
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF
;CODIGO
VAL1 EQU 0x20
VAL2 EQU 0x21
ORG 0
INICIO
BSF STATUS,RP0
CLRF TRISC ;PORTC todo como salida
CLRF TRISD ;PORT D RD0,RD1 como salida para el led
MOVWF TRISA ; PORTA CON RA0, RA1, RA2, RA3 como entrada
MOVWF TRISB ; PORTB CON RB1,RB2,RB4,RB5 como entrada
MOVLW 0x06
MOVWF ADCON1 ; PORTB como digital
BCF STATUS,RP0
; Cambiar las salidas del display para que no muestre nada.
START
; Propongo delay aca
; Preparo los registros para que por mas que cambie
; el PORTA/B entre comparaciones no me afecte, para facilitarme
; el trabajo uso 2 registros, 1 para A y otro para B
MOVF PORTA, W
MOVWF VAL1 ; VAL1 = x:A
MOVF PORTB, W
MOVWF VAL2 ; VAL2 = x:B
MOVLW 0x0F
ANDWF VAL1, F ; VAL1 = A (Elimino cualquier cosa de los 4 bits superiores)
ANDWF VAL2, F ; VAL2 = B (Elimino cualquier cosa de los 4 bits superiores)
; Comienzo la comparacion
; ¿Pares? Ambos bits 0 deben ser 0
MOVF VAL1, W
IORWF VAL2, W ; VAL1 OR VAL2
ANDLW 0x01 ; Dejo unicamente el bit 0
BTFSC STATUS, Z ; Pregunto si todo W es 0, si lo es entonces son pares
GOTO SONPARES
BCF LEDROJO
IGUAL:
MOVF VAL1, W
SUBWF VAL2, W
BTFSC STATUS,Z
GOTO IGUALES
BTFSC STATUS,C
GOTO VAL2MAYOR
MOVLW 'A' ; Cambiar por el valor que encienda una A
;Aca actualizar puerto con display
GOTO START
IGUALES:
MOVLW 'E' ; Cambiar por el valor que encienda una E
;Aca actualizar puerto con display
GOTO START
VAL2MAYOR:
MOVLW 'B' ; Cambiar por el valor que encienda una B
;Aca actualizar puerto con display
GOTO START
SONPARES:
BSF LEDROJO
GOTO IGUAL