Created
November 20, 2013 03:32
-
-
Save RoberCRivera/7557238 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
title "PIC18F4550 bit paridad" | |
list p=18F4550 ; indica el modelo de PIC | |
#include <p18f4550.inc> ; archivo de encabezado | |
CONFIG FOSC = INTOSCIO_EC | |
CONFIG WDT = OFF | |
CONFIG PBADEN = OFF | |
CONFIG MCLRE = ON | |
CONFIG DEBUG = ON | |
CONFIG LVP = OFF | |
;variables | |
dato1 equ 0x10 | |
dato2 equ 0x11 | |
dato3 equ 0x12 | |
dato4 equ 0x13 | |
temp equ 0x02 ;donde se guarda momentaneamente los datos | |
temp1 equ 0x03 ;donde se guardan valores de 2, 4 o 6 | |
reg1 equ 0x00 ;se almacena el bit a comparar | |
conta equ 0x20 ;contador | |
dosunos equ 0x30 | |
cuatrounos equ 0x31 | |
seisunos equ 0x32 | |
org 0 | |
goto mainp | |
;PROGRAMA PRINCIPAL | |
org 100 | |
mainp: | |
bsf OSCCON,6 ;Divisor de preescala del | |
bsf OSCCON,5 ;reloj a 8Mhz | |
bsf OSCCON,4 | |
movlw 0x02 | |
movwf dosunos ;tiene un valor de 2 | |
movlw 0x04 | |
movwf cuatrounos ;tiene un valor de 4 | |
movlw 0x06 | |
movwf seisunos ;tiene un valor de 6 | |
clrf temp ;poniendo en cero la variable temp | |
;***** PARA COMPARACION PARA EL DATO 1 ***** | |
inicio1 clrf conta ;poniendo en cero el contador | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d1 movff dato1, temp ;se hace una copia del dato1 y se guarda en temp | |
movf reg1, w ;se carga el valor de reg1 en w | |
andwf temp,1 ;se multiplica en el valor de reg1 por el de temp para compararlo despues | |
cpfseq temp ;compara si son iguales reg1 con el dato1 (bit0) | |
goto seguir1 | |
incf conta ; incrementa el contador | |
seguir1 rlcf reg1 ;rota hacia la izquierda el bit0 del reg1 | |
btfss reg1,7 ;ya comparo los 7bits? (ya dio la vuelta) | |
goto d1 | |
goto unos1 ;conteo de unos | |
;***** PARA COMPARACION PARA EL DATO 2 ***** | |
inicio2 clrf conta ;poniendo en cero el contador | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d2 movff dato2, temp ;se hace una copia del dato2 y se guarda en temp | |
movf reg1, w ;se carga el valor de reg1 en w | |
andwf temp,1 ;se multiplica en el valor de reg1 por el de temp para compararlo despues | |
cpfseq temp ;compara si son iguales reg1 con el dato2 (bit0) | |
goto seguir2 | |
incf conta ; incrementa el contador | |
seguir2 rlcf reg1 ;rota hacia la izquierda el bit0 del reg1 | |
btfss reg1,7 ;ya comparo los 7bits? (ya dio la vuelta) | |
goto d2 | |
goto unos2 | |
;***** PARA COMPARACION PARA EL DATO 3 ***** | |
inicio3 clrf conta ;poniendo en cero el contador | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d3 movff dato3, temp ;se hace una copia del dato3 y se guarda en temp | |
movf reg1, w ;se carga el valor de reg1 en w | |
andwf temp,1 ;se multiplica en el valor de reg1 por el de temp para compararlo despues | |
cpfseq temp ;compara si son iguales reg1 con el dato3 (bit0) | |
goto seguir3 | |
incf conta ; incrementa el contador | |
seguir3 rlcf reg1 ;rota hacia la izquierda el bit0 del reg1 | |
btfss reg1,7 ;ya comparo los 7bits? (ya dio la vuelta) | |
goto d3 | |
goto unos3 | |
;***** PARA COMPARACION PARA EL DATO 4 ***** | |
inicio4 clrf conta ;poniendo en cero el contador | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d4 movff dato4, temp ;se hace una copia del dato4 y se guarda en temp | |
movf reg1, w ;se carga el valor de reg1 en w | |
andwf temp,1 ;se multiplica en el valor de reg1 por el de temp para compararlo despues | |
cpfseq temp ;compara si son iguales reg1 con el dato4 (bit0) | |
goto seguir4 | |
incf conta ; incrementa el contador | |
seguir4 rlcf reg1 ;rota hacia la izquierda el bit0 del reg1 | |
btfss reg1,7 ;ya comparo los 7bits? (ya dio la vuelta) | |
goto d4 | |
goto unos4 | |
;***** etapa de conteo de unos para dato 1 ***** | |
unos1 clrf temp1 | |
c1 movff dosunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c2 | |
bsf dato1, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio2 | |
c2 movff cuatrounos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c3 | |
bsf dato1, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio2 | |
c3 movff seisunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto cero1 | |
goto u1 | |
cero1 bcf dato1, 7 ;pone en 0 el bit mas significativo | |
goto inicio2 | |
u1 bsf dato1, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio2 | |
;***** etapa de conteo de unos para dato 2 ***** | |
unos2 clrf temp1 | |
c4 movff dosunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c5 | |
bsf dato2, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio3 | |
c5 movff cuatrounos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c6 | |
bsf dato2, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio3 | |
c6 movff seisunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto cero2 | |
goto u2 | |
cero2 bcf dato2, 7 ;pone en 0 el bit mas significativo | |
goto inicio3 | |
u2 bsf dato2, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio3 | |
;***** etapa de conteo de unos para dato 3 ***** | |
unos3 clrf temp1 | |
c7 movff dosunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c8 | |
bsf dato3, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio4 | |
c8 movff cuatrounos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c9 | |
bsf dato3, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio4 | |
c9 movff seisunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto cero3 | |
goto u3 | |
cero3 bcf dato3, 7 ;pone en 0 el bit mas significativo | |
goto inicio4 | |
u3 bsf dato3, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio4 | |
;***** etapa de conteo de unos para dato 4 ***** | |
unos4 clrf temp1 | |
c10 movff dosunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c11 | |
bsf dato4, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio1 | |
c11 movff cuatrounos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto c12 | |
bsf dato4, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio1 | |
c12 movff seisunos, temp1 | |
movf conta, w | |
cpfseq temp1 | |
goto cero4 | |
goto u4 | |
cero4 bcf dato4, 7 ;pone en 0 el bit mas significativo | |
goto inicio1 | |
u4 bsf dato4, 7 ;pone en 1 en bit mas siginficativo | |
goto inicio1 | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment