Last active
December 27, 2015 17:59
-
-
Save davidae1704/7366747 to your computer and use it in GitHub Desktop.
codigo de la guia para trabajar en el desafio de micro
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 Envio de byte por SPI Modo Maestro" | |
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 | |
conta equ 0x10 | |
dconta equ 0x20 | |
recibe equ 0x30 | |
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 | |
clrf conta | |
clrf dconta | |
;Configuración de las lineas fisicas | |
movlw 0x0f | |
movwf ADCON1 | |
bcf TRISB,1 ;Salida SCK | |
bcf TRISC,7 ;Salida SDO | |
bcf TRISA,1 ;Salida SS | |
bsf TRISB,0 ;Entrada SDI | |
bsf TRISD,0 ;Push de entrada | |
;Configuración del SPI | |
movlw B'01000000' ;Muestreo al medio | |
movwf SSPSTAT | |
movlw B'00110000' ;Activar el SPI, polaridad, SCK=fosc/4 | |
movwf SSPCON1 | |
movlw 0x04 | |
movwf FSR0H ;Localidad inicial de cadena de envío | |
clrf FSR0L | |
movlw 0x05 | |
movwf FSR1H ;Localidad inicial de cadena de recepción | |
clrf FSR1L | |
NO btfss PORTD,0 ;Se presiono el push? | |
goto NO | |
NO1 btfsc PORTD,0 ;Se libero? | |
goto NO1 | |
movf SSPBUF,W ;Lectura tonta | |
envio movf INDF0, W ;mover a W | |
bcf PIR1,SSPIF ;limpiar bandera | |
movwf SSPBUF ;Iniciar la transmisión | |
lazo1 btfss PIR1,SSPIF ;Se completo ?? | |
goto lazo1 ;No espere | |
bcf PIR1, SSPIF ; limpiar bandera de SSP | |
incf FSR0L ;apunta a la siguiente localidad de la cadena de envío | |
movf SSPBUF,W | |
movwf INDF1 | |
incf FSR1L ;apunta a la siguiente localidad de la cadena de recepciòn | |
movlw 0x03 | |
cpfsgt FSR0L ;dejar de enviar datos una vez que se completa la cadena | |
goto envio ;No, envie el siguiente | |
clrf FSR0L | |
clrf FSR1L | |
nop | |
end |
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 Envio de cadena por SPI Modo Esclavo" | |
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 | |
contb equ 0x20 ;Dato recibido del maestro | |
send equ 0x30 ;Dato enviado para comprobar la bidireccionalidad | |
temp equ 0x40 ; variable temporal para comparadión | |
dato equ 0x50 ; variable para copiar dato recibido | |
reg1 equ 0x60 | |
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 | |
;Configuración de las lineas fisicas | |
movlw 0x0f | |
movwf ADCON1 | |
movlw 0x07 | |
movwf CMCON | |
bsf TRISB,1 ;Entrada SCK | |
bcf TRISC,7 ;Salida SDO | |
bsf TRISA,5 ;Entrada SS es importante en entornos múltiple esclavo | |
bsf TRISB,0 ;Entrada SDI | |
clrf TRISD ;Salida LEDs | |
;Configuración del SPI | |
movlw B'01000000' ;Muestreo al medio | |
movwf SSPSTAT | |
movlw B'00110101' ;Activar el SPI, polaridad, esclavo pin SS activo | |
movwf SSPCON1 | |
movlw 0x04 | |
movwf FSR0H | |
clrf FSR0L | |
movlw 0x05 | |
movwf FSR1H | |
clrf FSR1L | |
clrf temp | |
clrf contb | |
recibe: movf SSPBUF,W ;Lectura tonta del Buffer | |
movf INDF0,W | |
movwf SSPBUF ;Se pasa el dato a enviar al maestro | |
lazo1 movf SSPSTAT,W ;Esperar por la señal de reloj del maestro | |
btfss SSPSTAT,BF ;Se recibio el dato? | |
goto lazo1 ;NO, Espere | |
movf SSPBUF,W ; SI, cargue el dato | |
movwf INDF1 ; Guardeló y envíelo al puerto D | |
; comprobacion de paridad por byte | |
inicio clrf contb ;poniendo en cero el contador | |
movff INDF1, dato; copia de dato recibido para compararlo | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d movff dato, 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 contb, 1 ; 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 d | |
;************determinacion del tipo de paridad por byte en la cadena********** | |
comp btfsc contb, 0 ; verifica si la cantidad de unos es par (bit 0 en 0) | |
goto impar ; no, determina paridad impar | |
par bsf dato, 7 ; pone a 1 el bit MSB | |
goto paso | |
impar bcf dato, 7 ; pone a 0 el bit MSB | |
movf dato, W | |
cpfseq INDF1 | |
GOTO falla | |
goto guardar | |
falla clrf INDF1 ;HUBO FALLA, SE LIMPIA LA LOCALIDAD PRESENTE | |
goto paso | |
guardar bcf INDF1, 7 ;regresa el dato a su forma natural | |
paso incf FSR0L, 1 ;se desplaza al siguiente dato de la cadena | |
movlw 0x03 | |
cpfsgt FSR0L ; se termino de comprobar paridad en todos los datos? | |
goto recibe ; No | |
clrf FSR0L | |
clrf contb | |
incf FSR0L, 1 | |
INCF FSR1L, 1 | |
MOVLW 0X03 | |
cpfsgt FSR0L | |
goto recibe | |
NOP | |
end |
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 Envio de cadena por SPI Modo Esclavo" | |
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 | |
dato equ 0x20 ;Dato recibido del maestro | |
send equ 0x30 ;Dato enviado para comprobar la bidireccionalidad | |
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 | |
;Configuración de las lineas fisicas | |
movlw 0x0f | |
movwf ADCON1 | |
movlw 0x07 | |
movwf CMCON | |
bsf TRISB,1 ;Entrada SCK | |
bcf TRISC,7 ;Salida SDO | |
bsf TRISA,5 ;Entrada SS es importante en entornos múltiple esclavo | |
bsf TRISB,0 ;Entrada SDI | |
clrf TRISD ;Salida LEDs | |
;Configuración del SPI | |
movlw B'01000000' ;Muestreo al medio | |
movwf SSPSTAT | |
movlw B'00110101' ;Activar el SPI, polaridad, esclavo pin SS activo | |
movwf SSPCON1 | |
movlw 0x04 | |
movwf FSR0H | |
clrf FSR0L | |
movlw 0x05 | |
movwf FSR1H | |
clrf FSR1L | |
recibe: movf SSPBUF,W ;Lectura tonta del Buffer | |
movf INDF0,W | |
movwf SSPBUF ;Se pasa el dato a enviar al maestro | |
lazo1 movf SSPSTAT,W ;Esperar por la señal de reloj del maestro | |
btfss SSPSTAT,BF ;Se recibio el dato? | |
goto lazo1 ;NO, Espere | |
movf SSPBUF,W ; SI, cargue el dato | |
movwf INDF1 ; Guardeló y envíelo al puerto D | |
incf FSR0L, 1 | |
incf FSR1L, 1 | |
movlw 0x03 | |
cpfsgt FSR0L | |
goto recibe | |
clrf FSR0L | |
clrf FSR1L | |
;movwf LATD | |
goto recibe | |
end |
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 Envio de byte por SPI Modo Maestro" | |
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 | |
conta equ 0x10 | |
dconta equ 0x20 | |
recibe equ 0x30 | |
temp equ 0x02 ;donde se guarda momentaneamente los datos | |
reg1 equ 0x00 ;se almacena el bit a comparar | |
contb equ 0x40 | |
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 | |
clrf conta | |
clrf dconta | |
;Configuración de las lineas fisicas | |
movlw 0x0f | |
movwf ADCON1 | |
bcf TRISB,1 ;Salida SCK | |
bcf TRISC,7 ;Salida SDO | |
bcf TRISA,1 ;Salida SS | |
bsf TRISB,0 ;Entrada SDI | |
bsf TRISD,0 ;Push de entrada | |
;Configuración del SPI | |
movlw B'01000000' ;Muestreo al medio | |
movwf SSPSTAT | |
movlw B'00110000' ;Activar el SPI, polaridad, SCK=fosc/4 | |
movwf SSPCON1 | |
movlw 0x01 | |
movwf FSR0H ;Localidad inicial de cadena de envío | |
clrf FSR0L | |
movlw 0x02 | |
movwf FSR1H ;Localidad inicial de cadena de recepción | |
clrf FSR1L | |
movlw 0x01 | |
movwf FSR2H | |
movlw 0x10 | |
movwf FSR2L | |
;**************generacion de copias de datos | |
copiado movff INDF0, INDF2 | |
incf FSR0L, 1 | |
incf FSR2L, 1 | |
movlw 0x05 | |
cpfsgt FSR0L | |
goto copiado | |
clrf FSR0L | |
;************conteo de unos por byte en la cadena************* | |
inicio clrf contb ;poniendo en cero el contador | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d movff INDF0, 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 contb, 1 ; 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 d | |
;************determinacion del tipo de paridad por byte en la cadena********** | |
comp btfsc contb, 0 ; verifica si la cantidad de unos es par (bit 0 en 0) | |
goto impar ; no, determina paridad impar | |
par bsf INDF0, 7 ; pone a 1 el bit MSB | |
goto paso | |
impar bcf INDF0, 7 ; pone a 0 el bit MSB | |
paso incf FSR0L, 1 ;se desplaza al siguiente dato de la cadena | |
movlw 0x05 | |
cpfsgt FSR0L ; se termino de comprobar paridad en todos los datos? | |
goto inicio ; No | |
clrf FSR0L | |
clrf contb | |
;************INICIO DEL FUNCIONAMIENTO**************************** | |
NO btfss PORTD,0 ;Se presiono el push? | |
goto NO | |
NO1 btfsc PORTD,0 ;Se libero? | |
goto NO1 | |
movf SSPBUF,W ;Lectura tonta | |
envio movf INDF0, W ;mover a W | |
bcf PIR1,SSPIF ;limpiar bandera | |
movwf SSPBUF ;Iniciar la transmisión | |
lazo1 btfss PIR1,SSPIF ;Se completo ?? | |
goto lazo1 ;No espere | |
bcf PIR1, SSPIF ; limpiar bandera de SSP | |
incf FSR0L, 1 ;apunta a la siguiente localidad de la cadena de envío | |
recep movf SSPBUF,W | |
movwf INDF1 | |
incf FSR1L, 1 ;apunta a la siguiente localidad de la cadena de recepciòn | |
movlw 0x05 | |
cpfsgt FSR0L ;dejar de enviar datos una vez que se completa la cadena | |
goto envio ;envie el siguiente | |
nop | |
end |
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 Envio de byte por SPI Modo Maestro" | |
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 | |
conta equ 0x10 | |
dconta equ 0x20 | |
recibe equ 0x30 | |
temp equ 0x02 ;donde se guarda momentaneamente los datos | |
reg1 equ 0x00 ;se almacena el bit a comparar | |
contb equ 0x40 | |
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 | |
clrf conta | |
clrf dconta | |
;Configuración de las lineas fisicas | |
movlw 0x0f | |
movwf ADCON1 | |
bcf TRISB,1 ;Salida SCK | |
bcf TRISC,7 ;Salida SDO | |
bcf TRISA,1 ;Salida SS | |
bsf TRISB,0 ;Entrada SDI | |
bsf TRISD,0 ;Push de entrada | |
;Configuración del SPI | |
movlw B'01000000' ;Muestreo al medio | |
movwf SSPSTAT | |
movlw B'00110000' ;Activar el SPI, polaridad, SCK=fosc/4 | |
movwf SSPCON1 | |
movlw 0x04 | |
movwf FSR0H ;Localidad inicial de cadena de envío | |
clrf FSR0L | |
movlw 0x05 | |
movwf FSR1H ;Localidad inicial de cadena de recepción | |
clrf FSR1L | |
;************conteo de unos por byte en la cadena************* | |
inicio clrf contb ;poniendo en cero el contador | |
movlw 0x01 ;poniendo un valor de 00000001 en w | |
movwf reg1 ;pasando el valor de w al registro reg1 | |
d movff INDF0, 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 contb, 1 ; 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 d | |
;************determinacion del tipo de paridad por byte en la cadena********** | |
comp btfsc contb, 0 ; verifica si la cantidad de unos es par (bit 0 en 0) | |
goto impar ; no, determina paridad impar | |
par bsf INDF0, 7 ; pone a 1 el bit MSB | |
goto paso | |
impar bcf INDF0, 7 ; pone a 0 el bit MSB | |
paso incf FSR0L, 1 ;se desplaza al siguiente dato de la cadena | |
movlw 0x03 | |
cpfsgt FSR0L ; se termino de comprobar paridad en todos los datos? | |
goto inicio ; No | |
clrf FSR0L | |
clrf contb | |
;************INICIO DEL FUNCIONAMIENTO**************************** | |
NO btfss PORTD,0 ;Se presiono el push? | |
goto NO | |
NO1 btfsc PORTD,0 ;Se libero? | |
goto NO1 | |
movf SSPBUF,W ;Lectura tonta | |
envio movf INDF0, W ;mover a W | |
bcf PIR1,SSPIF ;limpiar bandera | |
movwf SSPBUF ;Iniciar la transmisión | |
lazo1 btfss PIR1,SSPIF ;Se completo ?? | |
goto lazo1 ;No espere | |
bcf PIR1, SSPIF ; limpiar bandera de SSP | |
incf FSR0L, 1 ;apunta a la siguiente localidad de la cadena de envío | |
movf SSPBUF,W | |
movwf INDF1 | |
incf FSR1L, 1 ;apunta a la siguiente localidad de la cadena de recepciòn | |
movlw 0x03 | |
cpfsgt FSR0L ;dejar de enviar datos una vez que se completa la cadena | |
goto envio ;No, envie el siguiente | |
nop | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
codigos de maestro con arreglo de cadena y maestro con arreglo de cadena y detector de paridad