Skip to content

Instantly share code, notes, and snippets.

@RoberCRivera
Created November 20, 2013 03:32
Show Gist options
  • Save RoberCRivera/7557238 to your computer and use it in GitHub Desktop.
Save RoberCRivera/7557238 to your computer and use it in GitHub Desktop.
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