• No se han encontrado resultados

11 Entrenador Básico

In document Entrenadores (página 185-194)

11.1.- I2C1.asm

( Entrenador Básico 8 )

title " Leer un dato del circuito integrado expansor de bus PCF8476 y transmitirlo a través " title " del bus I2C al microprocesador. Transferir el dato del microprocesador a otro C.I. PCF8476"

;******************************************** I2C1.asm ****************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;********** Asignación de nombres de Registros de Funciones especiales a direcciones ************************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ESCLAVO1 EQU B'01000001' ; Escribimos la dirección del Esclavo1 receptor.

ESCLAVO2 EQU B'01001000' ; Escribimos la dirección del Esclavo2 transmisor.

;**************************** Registros ********************************************************************************** CBLOCK 0X20

GUARDAR_DATO ENDC

;********************************* Sección Código de Reset *********************************************************** ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;******************************************* Sección de Configuración ************************************************* ORG 0X05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO CALL Config_transmisión_I2C ; Configuracion Bus_I2C

;**************************************************** Principal ********************************************************** RECIBIR CALL Bit_start_I2C ; Llamar a la subrutina de Comienzo.

CALL Transmitir_dato_I2C ; (0100) identifica al C.I. PCF8476. ; (A2,A1,A0)=(000) por hardware.

; El ultimo BIT a 1 para poner el C.I. PCF8476 como ; receptor.

CALL Recibir_dato_I2C ; Llamar a la subrutina de recepción de datos.

MOVWF GUARDAR_DATO ; Guardar dato recibido en el registro GUARDAR_DATO. CALL ReStart_I2C ; Llamar a la subrutina de comenzar sin pasar por parada. TRANSMITIR MOVLW ESCLAVO2 ; Seleccionar esclavo de transmisión. ( 0100,A2,A1,A0,0 )

CALL Transmitir_dato_I2C ; (0100) identifica al C.I. PCF8476. ; (A2,A1,A0)=(100) por hardware.

; El ultimo BIT a 0 para poner el C.I. PCF8476 como ; transmisor.

COMF GUARDAR_DATO,W ; Complementar el contenido del registro GUARDAR_DATO ; y guardarlo en W.

CALL Transmitir_dato_I2C ; Llamar a la subrutina de transmisión de datos. CALL Bit_stop_I2C ; Llamar a la subrutina de parada.

GOTO RECIBIR ; Repetir proceso.

;*************************************************** LIBRERIAS ********************************************************* INCLUDE <I2C.INC> ; Librería de control de bus I2C.

END

11.2.- I2C2.asm

( Entrenador Básico 8 )

title " Leer un dato del circuito integrado expansor de bus PCF8476 y transmitirlo a través " title " del bus I2C al microprocesador. Transferir el dato del microprocesador a otro C.I. PCF8476" title " interrumpiendo un programa principal "

;******************************************** I2C2.asm ****************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;************** Asignación de nombres de Registros de Funciones especiales a direcciones ******************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ESCLAVO1 EQU B'01000001' ; Escribimos la dirección del Esclavo1 receptor.

ESCLAVO2 EQU B'01001000' ; Escribimos la dirección del Esclavo2 transmisor.

;**************************** Registros ********************************************************************************** CBLOCK 0X20

GUARDAR_DATO ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************************** Vector de Interrupción ******************************************************** ORG 0X04

GOTO INTERRUP ; Ir a la rutina de Interrupción.

;********************************************** Sección de Configuracion ********************************************** ORG 0X05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO CALL Config_transmisión_I2C ; Configuracion Bus_I2C

BSF STATUS,RP0 ; Ir al Banco 1.

BCF OPTION_REG,INTEDG ; Interrupción por flanco descendente.

BCF OPTION_REG,7 ; Activamos las resistencias PULL-UP del PORTB

BSF INTCON,INTF ; Ponemos a 1 la Bandera de Interrupción de las Patilla INT. BSF INTCON,INTE ; Permitimos la interrupción INT.

BSF INTCON,GIE ; Activamos todas las interrupciones. BCF STATUS,RP0 ; Ir al Banco 0.

;**************************************************** Principal ********************************************************** SLEEP ; Entra el microcontrolador en modo sueño.

Goto $-1

;********************************************** Rutina de Interrupción ************************************************** INTERRUP CALL Bit_start_I2C ; Llamar a la subrutina de Comienzo.

MOVLW ESCLAVO1 ; Seleccionar esclavo de recepción. ( 0100,A2,A1,A0,1 ) CALL Transmitir_dato_I2C ; (0100) identifica al C.I. PCF8476.

; (A2,A1,A0)=(000) por hardware.

; El ultimo BIT a 1 para poner el C.I. PCF8476 como receptor.

CALL Recibir_dato_I2C ; Llamar a la subrutina de recepción de datos.

CALL ReStart_I2C ; Llamar a la subrutina de comenzar sin pasar por parada. TRANSMITIR MOVLW ESCLAVO2 ; Seleccionar esclavo de transmisión. ( 0100,A2,A1,A0,0 )

CALL Transmitir_dato_I2C ; (0100) identifica al C.I. PCF8476. ; (A2,A1,A0)=(100) por hardware.

; El ultimo BIT a 0 para poner el C.I. PCF8476 como ; transmisor.

COMF GUARDAR_DATO,W ; Complementar el contenido del registro GUARDAR_DATO ;y guardarlo en W.

CALL Transmitir_dato_I2C ; Llamar a la subrutina de transmisión de datos. CALL Bit_stop_I2C ; Llamar a la subrutina de parada.

BCF INTCON,INTF ; Ponemos a 0 la Bandera de Interrupción de la Patilla INT. RETFIE

;*************************************************** LIBRERIAS ********************************************************* INCLUDE <I2C.INC> ; Librería de control de bus I2C.

END

11.3.- I2C3.asm

( Entrenador Básico 8 )

title " Realizar una conversión Analógica / Digital y transmitirla a los expansores de bus PCF8476 "

;******************************************** I2C3.asm ****************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************** Asignación de nombres de Registros de Funciones especiales a direcciones ****************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ESCLAVO1 EQU B'01000000' ; Escribimos la dirección del Esclavo1 transmisor.

ESCLAVO2 EQU B'01001000' ; Escribimos la dirección del Esclavo2 transmisor.

CBLOCK 0X20 GUARDAR_DATO ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Sección de Configuracion ******************************************************* ORG 0X05 ; Inicio de Programa (Una posición detrás del vector de Interrupción). COMIENZO BSF STATUS,RP0 ; Ir al Banco 1.

BSF TRISA,5 ; Configuracion del Conversor Analogico/Digital. MOVLW B'00000000'

MOVWF ADCON1 BCF STATUS,RP0 MOVLW B'00100001' MOVWF ADCON0

CALL Config_transmision_I2C ; Configuracion Bus_I2C

;**************************************************** Principal ********************************************************** SEG2 CALL Retardo_100ms ; Esperar un tiempo de adquisición de 100 mS.

BSF ADCON0,GO_DONE ; Lanzar el Conversor Analogico/Digital. SEG1 BTFSC ADCON0,GO_DONE

GOTO SEG1

MOVF ADRESH,W ; Preguntamos si el dato convertido es idéntico al anterior. SUBWF GUARDAR_DATO,W

BTFSC STATUS,Z GOTO SEG2

MOVF ADRESH,W ; Guardamos dato nuevo. MOVWF GUARDAR_DATO

CALL Bit_start_I2C ; Llamar a la subrutina de Comienzo.

MOVLW ESCLAVO2 ; Seleccionar esclavo de transmisión. ( 0100,A2,A1,A0,0 ) CALL Transmitir_dato_I2C ; (0100) identifica al C.I. PCF8476.

; (A2,A1,A0)=(100) por hardware.

; El ultimo BIT a 0 para poner el C.I. PCF8476 como ; transmisor.

MOVF GUARDAR_DATO,W ; Guardar el contenido del registro GUARDAR_DATO en W. CALL Transmitir_dato_I2C ; Llamar a la subrutina de transmisión de datos.

CALL Bit_stop_I2C ; Llamar a la subrutina de parada. CALL Bit_start_I2C ; Llamar a la subrutina de Comienzo.

MOVLW ESCLAVO1 ; Seleccionar esclavo de transmisión. ( 0100,A2,A1,A0,0 ) CALL Transmitir_dato_I2C ; (0100) identifica al C.I. PCF8476.

; El ultimo BIT a 0 para poner el C.I. PCF8476 como ; transmisor.

COMF GUARDAR_DATO,W ; Complementar el contenido del registro GUARDAR_DATO ; y guardarlo en W.

CALL Transmitir_dato_I2C ; Llamar a la subrutina de transmisión de datos. CALL Bit_stop_I2C ; Llamar a la subrutina de parada.

GOTO SEG2

;************************************************** LIBRERIAS ********************************************************** INCLUDE <I2C.INC>

INCLUDE <Retardos.INC> END

In document Entrenadores (página 185-194)

Documento similar