Mini Guia 16F877

60
Seguidores de clase Universidad Pontificia de Salamanca (Madrid) Microcontrolador PIC 16F877

Transcript of Mini Guia 16F877

Page 1: Mini Guia 16F877

Seguidores de clase

Universidad Pontificia de Salamanca (Madrid)

Microcontrolador PIC 16F877

Page 2: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 1

INDICE

Características generales del PIC 16F877............................................................................................................ 1 Diagrama de bloques del PIC 16F877................................................................................................................. 2 Organización de la memoria RAM...................................................................................................................... 3 Tipos de direccionamiento de la RAM................................................................................................................ 4 Formas de modificar el Contador de Programa.................................................................................................... 4 Registro de estado .............................................................................................................................................. 5 ALU .................................................................................................................................................................. 5 Set de instrucciones............................................................................................................................................ 5

Instrucciones de transferencia ......................................................................................................................... 7 Instrucciones aritméticas................................................................................................................................. 7 Instrucciones lógicas ...................................................................................................................................... 7 Incrementos/Decrementos............................................................................................................................... 7 Instrucciones de rotación ................................................................................................................................ 8

Instrucciones de manipulación de bits................................................................................................................. 8 Instrucciones de control .................................................................................................................................. 8 Instrucciones de salto incondicional ................................................................................................................ 8 Instrucciones de salto condicional................................................................................................................... 8

Proceso de ensamblado....................................................................................................................................... 9 Representación de números y cadenas .............................................................................................................. 11 Directivos del ensamblador .............................................................................................................................. 11 Programa Display.ASM (Programa absoluto).................................................................................................... 13 Módulo CONTAR.ASM (Programa reubicable)................................................................................................ 15 Módulo Display.ASM ...................................................................................................................................... 17 Interrupciones. ................................................................................................................................................. 18 Proceso para atención de interrupciones............................................................................................................ 19 Plantilla de programa absoluto con atención a interrupciones. ........................................................................... 20 Reset................................................................................................................................................................ 21 Modo Sleep...................................................................................................................................................... 22 Reloj. ............................................................................................................................................................... 22 Bits de Configuración....................................................................................................................................... 23 Periféricos 16F877 ........................................................................................................................................... 24 Puertos programables de E/S. ........................................................................................................................... 25 Timers ............................................................................................................................................................. 26

Timer0 ......................................................................................................................................................... 26 Watch dog Timer.......................................................................................................................................... 26 Timer1 ......................................................................................................................................................... 27 Timer2 ......................................................................................................................................................... 28

CAPTURE/COMPARE/PWM ......................................................................................................................... 29 Master Synchronous Serial Port........................................................................................................................ 30 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART). ........................................ 30 Analog/Digital Converter. ................................................................................................................................ 30 Microcontrolador 16F876................................................................................................................................ 31 PICMIN........................................................................................................................................................... 32 PIC-ENT1........................................................................................................................................................ 35

Placa de circuito impreso. ............................................................................................................................. 36 Lista de componentes ................................................................................................................................... 37 Herramienta: ................................................................................................................................................ 37 Identificación de algunos componentes ......................................................................................................... 38

Componentes electrónicos ................................................................................................................................ 41 Fuente de alimentación..................................................................................................................................... 41

Transformador:............................................................................................................................................. 41 Rectificador:................................................................................................................................................. 42 Filtro:........................................................................................................................................................... 42 Regulador:.................................................................................................................................................... 43 Interruptores/pulsadores:............................................................................................................................... 43 Teclados....................................................................................................................................................... 43 Otros dispositivos de entrada: ....................................................................................................................... 44

Page 3: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 2

Dispositivos de salida:...................................................................................................................................... 45 Diodos LED ................................................................................................................................................. 45 Displays 7 segmentos ................................................................................................................................... 45 Displays LCD............................................................................................................................................... 46

Transistores:..................................................................................................................................................... 50 BC107.......................................................................................................................................................... 51 BD 139 ........................................................................................................................................................ 51 TIP122......................................................................................................................................................... 52 2N3055 ........................................................................................................................................................ 52

TRIACS........................................................................................................................................................... 53 MOTORES...................................................................................................................................................... 54

Motores CC.................................................................................................................................................. 54 Servocontrol................................................................................................................................................. 55 Motores paso a paso ..................................................................................................................................... 55 Control de motores paso a paso..................................................................................................................... 56 Circuitos específicos: SAA1027.................................................................................................................... 57

Page 4: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 1

Características generales del PIC 16F877 Descripción Características Procesador Núcleo RISC, Arq. Harvard, 20 MHz. 5 MIPS Interrupciones 14 fuentes posibles de interrupción Reloj 0-20 MHz. Reset Master Clear, Brown Out, Watchdog Instrucciones 35 instrucciones de 14 bits Memoria M. de programa 8 K palabras de 14 bits M. de datos RAM 368 registros de 8 bits M. de datos EEPROM 256 registros de 8 bits Pila 8 palabras de 13 bits M. de datos ext. EEPROM Hasta 256 KBytes Periféricos Puertos programables de E/S Hasta 33 bits, pueden ser usados por otros periféricos Timers/Counters Dos de 8 bits y uno de 16 bits Puertos de captura/comparación de datos Dos de 8 bits Moduladores de ancho de pulso (PWM) Dos de 8 bits Conversor Analógico/Digital de 10 bits Con un MPX de 8 canales para 8 entradas diferentes Puerto serie síncrono Configurable en modo SPI e I2C USART Para conexiones RS 232 Parallel Slave Port 8 bits + 3 bits de control

Tabla 1 Características generales del PIC 16F877

Page 5: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 2

Diagrama de bloques del PIC 16F877

Figura 1 Diagrama de bloques del PIC 16F877

Page 6: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 3

Organización de la memoria RAM Registro Dir. Registro Dir. Registro Dir. Registro Dir. Indirect. addr.(*) 00H Indirect. addr.(*) 80H Indirect. addr.(*) 100H Indirect. addr.(*) 180H TMR0 01H OPTION_REG 81H TMR0 101H OPTION_REG 181H PCL 02H PCL 82H PCL 102H PCL 182H STATUS 03H STATUS 83H STATUS 103H STATUS 183H FSR 04H FSR 84H FSR 104H FSR 184H PORTA 05H TRISA 85H 105H 185H PORTB 06H TRISB 86H PORTB 106H TRISB 186H PORTC 07H TRISC 87H 107H 187H PORTD 08H TRISD 88H 108H 188H PORTE 09H TRISE 89H 109H 189H PCLATH 0AH PCLATH 8AH PCLATH 10AH PCLATH 18AH INTCON 0BH INTCON 8BH INTCON 10BH INTCON 18BH PIR1 0CH PIE1 8CH EEDATA 10CH EECON1 18CH PIR2 0DH PIE2 8DH EEADR 10DH EECON2 18DH TMR1L 0EH PCON 8EH EEDATH 10EH 18EH TMR1H 0FH 8FH EEADRH 10FH 18FH T1CON 10H 90H 110H 190H TMR2 11H SSPCON2 91H 111H 191H T2CON 12H PR2 92H 112H 192H SSPBUF 13H SSPADD 93H 113H 193H SSPCON 14H SSPSTAT 94H 114H 194H CCPR1L 15H 95H 115H 195H CCPR1H 16H 96H 116H 196H CCP1CON 17H 97H 117H 197H RCSTA 18H TXSTA 98H 118H 198H TXREG 19H SPBRG 99H 119H 199H RCREG 1AH 9AH Registros 11AH Registros 19AH CCPR2L 1BH 9BH de propósito 11BH de propósito 19BH CCPR2H 1CH 9CH general 11CH general 19CH CCP2CON 1DH 9DH 11DH 19DH ADRESH 1EH ADRESL 9EH 96 bytes 11EH 96 bytes 19EH ADCON0 1FH ADCON1 9FH 11FH 19FH

20H A0H 120H 1A0H

Registros Registros de propósito de propósito

general general

96 bytes 80 bytes EFH 16FH 1EFH F0H 170H 1F0H Acceso a Acceso a Acceso a 70H-7FH 70H-7FH 70H-7FH 7FH FFH 17FH 1FFH

Banco 0 Banco 1 Banco 2 Banco 3 (*) No es un registro físico, sino el indicador de acceso indirecto a memoria

Tabla 2 Organización de la memoria RAM

Page 7: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 4

Tipos de direccionamiento de la RAM

Figura 2 Tipos de direccionamiento para apuntar a los registros de la RAM

Formas de modificar el Contador de Programa

Figura.3 Formas de modificar el Contador de Programa.

Page 8: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 5

Registro de estado

Registro de estado 7 0

IRP RP1 RP0 TO PD Z DC C Direccionamiento Reset Flags ALU

Tabla.3 Bits del registro de estado. DC= Flag de acarreo intermedio, indica en las sumas y restas desbordamiento entre los bits tres y cuatro. C= Flag de Carry. Si vale 1 después de una suma indica desbordamiento, Si vale 1 después de una resta indica que NO ha habido desbordamiento.

ALU

Figura.4 ALU y elementos directamente conectados a ella.

Set de instrucciones. Formato de una instrucción: [etiqueta] mnemónico [operando1[, operando2]] [; comentario] Tipos de operandos en una instrucción:

f: Indica un nº de registro dentro de un banco de la RAM. Es un valor de 7 bits. d: Operando destino. Es un bit que si vale 0 indica que el resultado debe almacenarse en W y si vale 1 en el

registro usado como primer operando. b: Es usado en las instrucciones que afectan a un único bit, y apunta al bit destino de la instrucción. k: Constante. Las instrucciones van a manejar dos tipos de constantes, si la instrucción es CALL o GOTO

la constante es de 11 bits (k11) y hace referencia a la dirección a la que se va a saltar. En cualquier otro caso se trata de un valor de 8 bits (k8) que se usará como valor inmediato en una operación que siempre involucra a la ALU y al acumulador.

Page 9: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 6

Instrucción Descripción Flags

modif.. ADDLW k8 W+k8 → W C, DC, Z ADDWF f, d Si d=0, W+f→ W. si d=1 W+f→f C, DC, Z ANDLW k8 W∧k8 → W Z ANDWF f, d Si d=0, W∧f→ W. si d=1 W∧f→f Z BCF f, b 0 → bit(b) de f Ninguno BSF f, b 1 → bit(b) de f Ninguno BTFSC f, b Comprobar bit b en f, saltar si es 0 Ninguno BTFSS f, b Comprobar bit b en f, saltar si es 1 Ninguno CALL k11 PC → pila, bits 4,3 de PCLATH + k11 → PC Ninguno CLRF f 0 → f Z CLRW 0 → W Z CLRWDT Poner a 0 el Watch Dog Timer. TO , PD COMF f,d Si d=0, Ca1(f)→ W. si d=1 Ca1(f)→f Z DECF f, d Si d=0, f-- → W. si d=1 f-- →f Z DECFSZ f, d Si d=0, f-- → W, si d=1 f-- →f, saltar si cero Ninguno GOTO k11 bits 4,3 de PCLATH + k11 → PC Ninguno INCF f, d Si d=0, f++ → W. si d=1 f ++→f Z INCFSZ f, d Si d=0, f++ → W, si d=1 f++ →f, saltar si cero Ninguno IORLW k8 W∨k8 → W Z IORWF f, d Si d=0, W∨f→ W. si d=1 W∨f→f Z MOVF f, d Si d=0, f → W. si d=1 f→f Z MOVLW k8 k8 → W Ninguno MOVWF f W→ f Ninguno NOP No operar Ninguno RETFIE pila → PC, 1 → GIE GIE RETLW k8 pila → PC; k8 → W Ninguno RETURN pila → PC Ninguno

RLF f, d Rotación a la izquierda a través de carry de f, dejando el resultado en W o f según d C

RRF f, d Rotación a la derecha a través de carry de f, dejando el resultado en W o f según d C

SLEEP Pasar a modo standby TO , PD SUBLW k8 k8 -W → W C, DC, Z SUBWF f, d Si d=0, f-W→ W. si d=1 f-W→f C, DC, Z

SWAPF f, d Intercambia los dos nibbles (4 bits) de f, dejando el resultado en W o f según d Ninguno

XORLW k8 W⊕k8 → W Z XORWF f, d Si d=0, W⊕f→ W. si d=1 W⊕f→f Z

Tabla 4 Set de instrucciones del PIC 16F877 ordenadas alfabéticamente.

Page 10: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 7

Instrucciones de transferencia

Flags modif.. CLRF f 0 → f Z CLRW 0 → W Z MOVLW k8 k8 → W Ninguno MOVWF f W→ f Ninguno MOVF f, d Si d=0, f → W. si d=1 f→f Z

SWAPF f, d Intercambia los dos nibbles (4 bits) de f, dejando el resultado en W o f según d Ninguno

Instrucciones aritméticas

Flags modif.. ADDLW k8 W+k8 → W C, DC, Z ADDWF f, d Si d=0, W+f→ W. si d=1 W+f→f C, DC, Z SUBLW k8 k8-W → W C, DC, Z SUBWF f, d Si d=0, f-W→ W. si d=1 f-W→f C, DC, Z

Instrucciones lógicas

Flags modif.. ANDLW k8 W∧k8 → W Z ANDWF f, d Si d=0, W∧f→ W. si d=1 W∧f→f Z COMF f,d Si d=0, Ca1(f)→ W. si d=1 Ca1(f)→f Z IORLW k8 W∨k8 → W Z IORWF f, d Si d=0, W∨f→ W. si d=1 W∨f→f Z XORLW k8 W⊕k8 → W Z XORWF f, d Si d=0, W⊕f→ W. si d=1 W⊕f→f Z

Incrementos/Decrementos

Flags modif.. DECF f, d Si d=0, f-- → W. si d=1 f-- →f Z INCF f, d Si d=0, f++ → W. si d=1 f ++→f Z

Page 11: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 8

Instrucciones de rotación Flags modif..

RLF f, d Rotación a la izquierda a través de carry de f, dejando el resultado en W o f según d C

RRF f, d Rotación a la derecha a través de carry de f, dejando el resultado en W o f según d C

Instrucciones de manipulación de bits

Flags modif.. BCF f, b 0 → bit(b) de f Ninguno BSF f, b 1 → bit(b) de f Ninguno

Instrucciones de control

Flags modif.. CLRWDT Poner a 0 el Watch Dog Timer. TO , PD SLEEP Pasar a modo standby TO , PD

Instrucciones de salto incondicional

Flags modif.. CALL k11 PC → pila, bits 4,3 de PCLATH + k11 → PC Ninguno GOTO k11 bits 4,3 de PCLATH + k11 → PC Ninguno RETFIE pila → PC, 1 → GIE GIE RETLW k8 pila → PC; k8 → W Ninguno RETURN pila → PC Ninguno

Instrucciones de salto condicional Flags modif.. BTFSC f, b Comprobar bit b en f, saltar si es 0 Ninguno BTFSS f, b Comprobar bit b en f, saltar si es 1 Ninguno DECFSZ f, d Si d=0, f-- → W, si d=1 f-- →f, saltar si cero Ninguno INCFSZ f, d Si d=0, f++ → W, si d=1 f++ →f, saltar si cero Ninguno

Page 12: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 9

Proceso de ensamblado

Figura 5 Proceso de ensamblado de un programa ‘absoluto’.

Figura ¡Error! No hay texto con el estilo especificado en el documento..6 Proceso de

ensamblado de un programa con ‘código reubicable’.

Page 13: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 10

Figura 7 Entradas y salidas para las herramientas de desarrollo MPLAB

Page 14: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 11

Representación de números y cadenas

Base Sintaxis Ejemplo Binario B'dígitos binarios' B'101' Octal O'ígitos octales' O'123' Decimal D'dígitos decimales' D'123' Hexadecimal H'dígitos hexadecimales'

0xdígitos hexadecimales H'12AB' 0x12AB

Carácter Los caracteres se almacenan en código ASCII de 7 bits A'a' 'a'

String Los caracteres se almacenan en código ASCII de 7 bits "cadena de caracteres"

Directivos del ensamblador Veremos algunos de los directivos del ensamblador.

Directivos de declaración de secciones

Tipo Nombre por defecto

Descripción

CODE .code Esta sección contendrá código. El resto de secciones sólo datos. IDATA. .idata Esta sección contendrá variables inicializadas. UDATA .udata Esta sección contendrá variables no inicializadas. UDATA_ACS. .udata_acs Esta sección contendrá variables accesibles de forma más rápida. UDATA_OVR. .udata_ovr Esta sección contendrá variables temporales sobreescribibles. UDATA_SHR. .udata_shr Esta sección contendrá variables accesibles en varios bancos.

Tabla 5 Directivos de declaración de secciones.

RADIX RADIX hex|dec|oct

CBLOCK CBLOCK [<expresión>] <NomVar>[:<incremento>][,<NomVar>[:<incremento>][, ...]] ENDC Var1 EQU 0x20 Var2 EQU 0x21 Var3 EQU 0x22 CBLOCK 0x20 Var1, Var2, Var3 ENDC CBLOCK 0x30 DobleByte:0, DobleByteAlto, DobleByteBajo Nombre: TAM_NOMBRE Word1:2, Word2: 2 Var1, Var2, Var3 ENDC

Page 15: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 12

RES [<NomVar>] RES <Unidades_de_memoria>. UDATA ValorActual RES 1 Aux1 RES 1 Aux2 RES 2 Aux3 RES 1

INCLUDE INCLUDE <Fichero_a_incluir>

LIST LIST [<opción>, ... , <Opción>] Opción Valor por defecto Descripción n=nnn 60 Líneas por página de listado p=<tipo> Ninguno Selecciona procesador r=<radix> hex Selecciona radix (hex, dec, oct) ..... LIST p=16F877, r=dec

ORG [Etiqueta] ORG <expresión> ORG 0x20

EQU <NomVar> EQU 0x20

#DEFINE #define <nombre> [<cadena_de _caracteres>] #define TAM_NOMBRE 0x20 #define BitControl 0x19,7 ..... bsf BitControl ; Equivale a bsf 0x19, 7

EXTERN EXTERN <Etiqueta> [, <Etiqueta> ... ] EXTERN Var1 ....... MOVF Var1, W

GLOBAL GLOBAL <Etiqueta> [, <Etiqueta> ... ] UDATA Var1 RES 1 Var2 RES 2 GLOBAL Var1, Var2

Page 16: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 13

Programa Display.ASM (Programa absoluto) ; Programa: Disp1.ASM list p=16f877 ; Indicamos cual va a ser el procesador destino #include p16f877.inc ; Define gran cantidad de constantes relacionadas ; con este procesador CBLOCK 0X20 ValorActual, Aux1, Aux2, Aux3 ENDC ORG 0 goto Inicio ORG 0x10 Inicio ; En primer lugar inicializaremos el puerto C para que configure todas sus líneas ; como salidas. Se supone que a este puerto se han conectado los siete segmentos ;de un display ; Inicializamos las variables clrf ValorActual ; Configuramos los bits del puertoC como salidas BANKSEL TRISC clrf TRISC ; Configurar pines de PORTC como salidas clrf STATUS ; Apuntamos a la página 0 Bucle ; Comienzo del bucle principal movf ValorActual, W ; Muevo ValorActual a W call hex27seg ; Llamamos a rutina de conversión movwf PORTC ; ponemos resultado en PORTC (el display) incf ValorActual, F ; Incrementamos el valor para la siguiente btfsc ValorActual, 4 ; iteración, y si se activa el bit 4, hemos clrf ValorActual ; llegado a 10H, y reseteamos la variable. movlw 8 ; Inicializamos Aux1 a 8 para conseguir movwf Aux1 ; una espera algo mayor que 1 segundo. Espera call Espera1 ; Rutina con un retardo de 0,13 seg. Aprox. decfsz Aux1, F goto Espera goto Bucle ; Retornar al bucle principal ;******************************* Espera1 ;******************************* ; Realiza 256 llamadas a la rutina Espera2 movlw 0xff movwf Aux2 Bucle1 call Espera2 decfsz Aux2, F goto Bucle1 return ;******************************* Espera2 ;******************************* ; Recorre 256 veces el bucle Bucle2. movlw 0xff movwf Aux3 Bucle2 decfsz Aux3, F goto Bucle2 return

Page 17: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 14

;**************************************** hex27seg ;**************************************** ; Subrutina hex27seg, que recibe un valor hexadecimal de un dígito en W, ; y devuelve en el mismo registro el valor correspondiente al de un ; display de 7 segmentos. ; A continuación se muestra el nombre de cada segmento en un Display ; ----- ; | a | ; f| |b ; | | ; ----- ; | g | ; e| |c ; | | ; ----- ; d ; Se asignará el bit 7 al segmento 'a', el 6 al 'b', ... , el 1 al 'g' ; El bit 0 queda sin asignar. Se puede usar para el punto digital del display ; Los segmentos a iluminar para cada dígito son: ; Bits 7,6,5,4,3,2,1,0 Valor binario ; ==== =============== ============= ; 0 = a,b,c,d,e,f B'11111100' ; 1 = b,c B'01100000' ; 2 = a,b, d,e, g B'11011010' ; 3 = a,b,c,d, g B'11110010' ; 4 = b,c, f,g B'01100110' ; 5 = a, c,d, f,g B'10110110' ; 6 = a, c,d,e,f,g B'10111110' ; 7 = a,b,c B'11100000' ; 8 = a,b,c,d,e,f,g B'11111110' ; 9 = a,b,c, f,g B'11100110' ; A = a,b,c, e,f,g B'11101110' ; B = c,d,e,f,g B'00111110' ; C = a, d,e,f B'10011100' ; D = b,c,d,e, g B'01111010' ; E = a, d,e,f,g B'10011110' ; F = a, e,f,g B'10001110' ANDLW B'00001111' ADDWF PCL, F retlw B'11111100' retlw B'01100000' retlw B'11011010' retlw B'11110010' retlw B'01100110' retlw B'10110110' retlw B'10111110' retlw B'11100000' retlw B'11111110' retlw B'11100110' retlw B'11101110' retlw B'00111110' retlw B'10011100' retlw B'01111010' retlw B'10011110' retlw B'10001110' end

Page 18: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 15

Módulo CONTAR.ASM (Programa reubicable) ; Programa: CONTAR.ASM ; list p=16f877 ; Indicamos cual va a ser el procesador destino #include p16f877.inc ; Define gran cantidad de constantes relacionadas ; con este procesador UDATA ValorActual RES 1 Aux1 RES 1 Aux2 RES 1 Aux3 RES 1 STARTUP CODE ; Selecciona la dirección de reset desde el script 16F877.lkr goto Inicio PROG1 CODE ; Selecc la dir inic del programa desde el script 16F877.lkr extern hex27seg Inicio ; En primer lugar inicializaremos el puerto C para que configure todas sus líneas ; como salidas. Se supone que a este puerto se han conectado los siete segmentos ; de un display ; Inicializamos las variables clrf ValorActual ; Configuramos los bits del puertoC como salidas BANKSEL TRISC clrf TRISC ; Configurar pines de PORTC como salidas Bucle BANKSEL ValorActual movf ValorActual, W ; Muevo ValorActual a W call hex27seg ; Llamamos a rutina de conversión BANKSEL PORTC movwf PORTC ; ponemos resultado en PORTC (el display) BANKSEL ValorActual incf ValorActual, F ; Incrementamos el valor para la siguiente btfsc ValorActual, 4 ; iteración, y si se activa el bit 4, hemos clrf ValorActual ; llegado a 10H, y reseteamos la variable. movlw 8 ; Inicializamos Aux1 a 8 para conseguir movwf Aux1 ; una espera algo mayor que 1 segundo. Espera call Espera1 ; Rutina con un retardo de 0,13 seg. Aprox. decfsz Aux1, F goto Espera goto Bucle ; Retornar al bucle principal

Page 19: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 16

;******************************* Espera1 ;******************************* ; Realiza 256 llamadas a la rutina Espera2 movlw 0xFF movwf Aux2 Bucle1 call Espera2 decfsz Aux2, F goto Bucle1 return ;******************************* Espera2 ;******************************* ; Recorre 256 veces el bucle Bucle2. movlw 0xFF movwf Aux3 Bucle2 decfsz Aux3, F goto Bucle2 return end

Page 20: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 17

Módulo Display.ASM ; Módulo Display.asm. Presenta la subrutina hex27seg, que recibe ; un valor hexadecimal de un dígito, y devuelve el valor correspondiente ; al de un display de 7 segmentos. ; A continuación se muestra el nombre de cada segmento en un Display ; ----- ; | a | ; f| |b ; | | ; ----- ; | g | ; e| |c ; | | ; ----- ; d ; Se asignará el bit 7 al segmento 'a', el 6 al 'b', ... , el 1 al 'g' ; El bit 0 queda sin asignar. Se puede usar para el punto digital del display ; Los segmentos a iluminar para cada dígito son: ; Bits 7,6,5,4,3,2,1,0 Valor binario ; ==== =============== ============= ; 0 = a,b,c,d,e,f B'11111100' ; 1 = b,c B'01100000' ; 2 = a,b, d,e, g B'11011010' ; 3 = a,b,c,d, g B'11110010' ; 4 = b,c, f,g B'01100110' ; 5 = a, c,d, f,g B'10110110' ; 6 = a, c,d,e,f,g B'10111110' ; 7 = a,b,c B'11100000' ; 8 = a,b,c,d,e,f,g B'11111110' ; 9 = a,b,c, f,g B'11100110' ; A = a,b,c, e,f,g B'11101110' ; B = c,d,e,f,g B'00111110' ; C = a, d,e,f B'10011100' ; D = b,c,d,e, g B'01111010' ; E = a, d,e,f,g B'10011110' ; F = a, e,f,g B'10001110' W equ 0 F EQU 1 PCL EQU 2 CODE hex27seg global hex27seg ANDLW B'00001111' ADDWF PCL, F retlw B'11111100' retlw B'01100000' retlw B'11011010' retlw B'11110010' retlw B'01100110' retlw B'10110110' retlw B'10111110' retlw B'11100000' retlw B'11111110' retlw B'11100110' retlw B'11101110' retlw B'00111110' retlw B'10011100' retlw B'01111010' retlw B'10011110' retlw B'10001110' end

Page 21: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 18

Interrupciones.

Page 22: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 19

GIE PEIE T0IE INTE RBIE xxxIE Significado 0 X X X X X Todas las interrupciones deshabilitadas 1 0 X X X X Deshabilitadas las interrupciones de los periféricos

internos salvo Timer 0 1 1 X X X X Permitidas las interrupciones de los periféricos

internos. Hay un bit adicional para cada periférico. 1 X 0 X X X Deshabilitada Int. Timer 0 1 X 1 X X X Habilitada Int. Timer 0 1 X X 0 X X Deshabilitada Int. externa 1 X X 1 X X Habilitada Int. externa 1 X X X 0 X Deshabilitada Int. cambio líneas RB4,..,RB7 1 X X X 1 X Habilitada Int. cambio líneas RB4,..,RB7

Tabla 6 Bits de habilitación de interrupciones en INTCOM

Bit Reg. bit Activar interrupción si Flag Reg. bit TMR1IE PIE1 0 Overflow en el Timer 1 TMR1IF PIR1 0 TMR2IE PIE1 1 Overflow en el Timer 2 TMR2IF PIR1 1 CCP1IE PIE1 2 Captura o Comparación en CCP1 CCP1IF PIR1 2 SSPIE PIE1 3 Byte recibido o transmitido por el puerto serie síncrono SSPIF PIR1 3 TXIE PIE1 4 Byte transmitido por la USART TXIF PIR1 4 RCIE PIE1 5 Byte recibido por la USART RCIF PIR1 5 ADIE PIE1 6 Finalizada conversión por el conversor A/D ADIF PIR1 6 PSPIE PIE1 7 Byte recibido o transmitido por el puerto paralelo esclavo PSPIF PIR1 7 CCP2IE PIE2 0 Captura o Comparación en CCP2 CCP2IF PIR2 0 BCLIE PIE2 3 Colisión en el bus I2C BCLIF PIR2 3 EEIE PIE2 4 Fin de operación de escritura en la EEPROM EEIF PIR2 4

Tabla 7 Bits de habilitación de interrupciones para periféricos y flags activados.

Proceso para atención de interrupciones 1º Cuando se produce la interrupción 0 -->GIE, Dir. retorno --> Pila, 4--> Program Counter. La rutina debe: 1º Salvar en algún registro reservado al efecto el contenido del registro de Status y el acumulador. 2º Haciendo polling se detecta cual ha sido la fuente de la interrupción. 3º Ejecutar la rutina de atención a la interrupción. 4º Desactivar el flag correspondiente a esa interrupción 5º Ejecutar la instrucción RETFIE de retorno de interrupción y que reactiva GIE.

Page 23: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 20

Plantilla de programa absoluto con atención a interrupciones. list p=16f877 ; list directive to define processor #include <p16f877.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF ;***** VARIABLE DEFINITIONS w_temp EQU 0x70 ; variable used for context saving status_temp EQU 0x71 ; variable used for context saving ;********************************************************************* ORG 0x000 ; processor reset vector clrf PCLATH ; ensure page bits are cleared goto main ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register CLRF STATUS ; Bank0 BTFSC PIR1, TMR1IF ; Timer1 overflow interrupt? GOTO T1_INT ; YES BTFSC PIR1, ADIF ; NO, A/D interrupt? GOTO AD_INT ; YES, do A/D thing : ; : ; BTFSC INTCON, RBIF ; NO, Change on PORTB interrupt? GOTO PORTB_INT ; YES, Do PortB Change thing INT_ERROR_LP1 ; NO, do error recovery GOTO INT_ERROR_LP1 ; This is the trap if you enter the ISR ; but there were no expected ; interrupts END_ISR movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt T1_INT ; Routine when the Timer1 overflows : ; BCF PIR1, TMR1IF ; Clear the Timer1 overflow interrupt flag GOTO END_ISR ; Ready to leave ISR (for this request) AD_INT ; Routine when the A/D completes : ; BCF PIR1, ADIF ; Clear the A/D interrupt flag GOTO END_ISR ; Ready to leave ISR (for this request) : ; PORTB_INT ; Routine when PortB has a change : ; GOTO END_ISR ; Ready to leave ISR (for this request) main ; remaining code goes here END ; directive 'end of program'

Page 24: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 21

Reset. Coloca a la CPU en un estado conocido. Causas:

• Power On Reset POR.

• MCLR en estado normal.

• MCLR en estado SLEEP. • WDT en estado normal. • Brown-out Reset.

Power On Reset

Power-up Timer (PWRT) Oscillator Start-up Timer (OST)

Page 25: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 22

Tabla 8 Bits indicativos de la última reinicialización Necesidad de la puesta a '1' de todos los bits al arrancar. Brown-out reset: Se produce al bajar la tensión de alimentación por debajo de un umbral (~4V.) WDT:

• Timer que genera un reset al desbordarse. • Usa una fuente de reloj interna. • Puede definirse un valor para un postscaler, que permite definir diferentes tiempos. • Instrucciones CLRWDT y SLEEP.

Existen tablas indicando como se inicializan los registros de la RAM con un reset, pero se distinguen básicamente tres situaciones:

Reset generado por POR / BOR : Se inicializan prácticamente todos los registros.

Reset generado por MCLR /WDT: Se inicializan los registros de algunos periféricos y algunos básicos como el contador de programa y parte del registro de flags.

Reset generado por MCLR /WDT mientras se estaba en modo SLEEP: Prácticamente ningún registro cambia su contenido.

Modo Sleep Detiene a la CPU. Principal ventaja: el consumo de la CPU baja a niveles muy bajos. Se despierta mediante:

• Activación de MCLR • Activacón de INT, RB4..RB7 y algunas interrupciones asociadas a periféricos internos.

Reloj. Existen cuatro fuentes posibles para el reloj de la CPU: LP: Low Power Crystal (32KHz. - 400 KHz.) XT: Crystal/Resonator (400 KHz. - 4 MHz.) HS: High Speed Crystal Resonator (2 MHz. - 20 MHz.) RC: Resistor/Capacitor (hasta 4 MHz.)

PCON STATUS

POR BOR TO PD Significado

0 X 1 1 Power-on Reset 0 X 0 X Estado incorrecto 0 X X 0 Estado incorrecto 1 0 1 1 Brown-out Reset 1 1 0 1 WDT Reset 1 1 0 0 WDT Wake-up 1 1 u u MCLR reset during normal operation 1 1 1 0 MCLR reset during SLEEP

Page 26: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 23

Bits de Configuración. A partir de la dirección 0x1FFF de la memoria de programa, se dispone de 8 palabras extras. Estas direcciones no son legibles desde el programa o la aplicación, pero si pueden ser leídas en el aparato de grabación. Las 4 primeras words (0x2000 a 0x2003) se denominan ID Location, sirve para almacenar un nº de serie, o un nº de versión de software instalada, etc. La dirección 0x2006 es de sólo lectura y tiene un identificador del modelo de microcontrolador. La siguiente word (0x2007) , es la palabra de configuración, sus bits tiene los siguiente significados: Bits 13-12 y 5-4: Están relacionados con varios niveles de protección de nuestro SW. Bit 11: DEBUG. Si vale 0 se desactiva el modo ICD, y RB6 y RB/ quedan como líneas I/O estándar. Bit 9: WRT. Permite o no, escribir en la memoria Flash de programa. Bit 8. CPD Protección de los datos de la EEPROM. Bit 7: LVP. Permite la grabación a bajo voltaje. Bit 6: Habilita el control del Brown-out.

Bit 3. PWRT . Permite activar o desactivar el Power-up Timer. Bit 2: WDTE. Permite activar o desactivar el Watch Dog. Bit 1- 0. Selección de tipo de generador de reloj: Uso de directivos de configuración: __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF __IDLOCS H'1234', H'3456' Constantes predefinidas en el fichero 16F877.INC _CP_ALL EQU H'0FCF' _CP_HALF EQU H'1FDF' _CP_UPPER_256 EQU H'2FEF' _CP_OFF EQU H'3FFF' _DEBUG_ON EQU H'37FF' _DEBUG_OFF EQU H'3FFF' _WRT_ENABLE_ON EQU H'3FFF' _WRT_ENABLE_OFF EQU H'3DFF' _CPD_ON EQU H'3EFF' _CPD_OFF EQU H'3FFF' _LVP_ON EQU H'3FFF' _LVP_OFF EQU H'3F7F' _BODEN_ON EQU H'3FFF' _BODEN_OFF EQU H'3FBF' _PWRTE_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LP_OSC EQU H'3FFC' _XT_OSC EQU H'3FFD' _HS_OSC EQU H'3FFE' _RC_OSC EQU H'3FFF'

Page 27: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 24

Periféricos 16F877

• Puertos programables de E/S • Timers/Counters • Puertos de captura/comparación de datos • Moduladores de ancho de pulso (PWM) • Conversor Analógico/Digital de 10 bits • Puerto serie síncrono • USART • Parallel Slave Port

Circuito de 40 pines en formato. Salvo 7 pines, todos los demás están asociados al menos con los puertos de E/S. Los 7 pines son:

• 4 pines para alimentación, están duplicados. • 1 pin para MCLR y Vpp que es una tensión de 12 a 14 V. usada cuando está en modo programación. • 2 pines relacionados con entradas o salidas de reloj, en función del tipo de reloj utilizado.

Page 28: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 25

Puertos programables de E/S. Disponemos de hasta 33 pines. A medida que se usan otros periféricos internos se detraen pines de E/S Las principales características son:

• Programables como entradas o salidas individualmente. • Capaces de trabajar con corrientes de 25 mA. en cada línea. No obstante la corriente total en los puertos A,

B y E no puede superar los 200 mA. y en los puertos C y D otros 200 mA. • Entradas tipo TTL o ST (Schmitt Trigger). • Resistencias Pull-up (habilitables por programa) en el puerto B

Las líneas de E/S están agrupadas en 5 puertos: A (6 bits), B (8 bits), C (8 bits), D (8 bits) y E (3 bits). Cada puerto de E/S tiene asociados dos registros TRISX y PORTX. El primer registro dispone de un bit por cada línea del puerto, y controlará si funciona como entrada (Input, 1) o como salida (Output, 0). El segundo registro nos permite acceder al puerto. Con una escritura se modifican los bits configurados como salida, y con una lectura accedemos tanto a los de entrada como a los de salida. Si se realiza una escritura y de forma inmediata una lectura, puede que la salida no haya alcanzado el nivel adecuado generando incoherencias. El puerto A tiene todas sus salidas Totem pole, excepto la RA4 que es del tipo Open collector (open drain de forma más exacta) lo que obliga a poner una resistencia de Pull Up para poder obtener '1'. Además después de un reset estas líneas están configuradas como entradas analógicas (como digitales devuelven '0'). Por medio del registro ADCON se pueden convertir en entradas digitales. El puerto B dispone de resistencias Pull-up que pueden activarse por software cuando funcionan como entradas. La activación se realiza con el bit RBPU (bit 7) del registro OPTION_REG (direcciones 81h y 181h). Además la línea RB0 puede funcionar como entrada de petición de interrupción. Para ello se debe activar el bit INTE (bit 4) del registro INTCON (direcciones 0Bh, 8Bh, 10Bh y 18Bh). Con el bit INTDEG (bit 6) de OPTION_REG (direcciones 81h y 181h) se selecciona si se activa la interrupción con flanco de subida (1) o de bajada (0). Los puertos A y B cuando se configuran como entradas, trabaja con niveles TTL (salvo la línea RA4) y los puertos C, D y E como Schmitt Trigger (también RA4). TTL: VIL = 0,8 V., VIH = 2 V. ST: VIL = 1 V., VIH = 4 V. Permite cambios de tensión lentos en su entrada.

Page 29: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 26

Timers Disponemos de 3 timers numerados del 0 al 2 y del Watch Dog Timer.

Timer0

Timer de 8 bits Puede ser leído y escrito a través del registro TMR0 (direcciones 1 y 101h) La entrada de reloj del temporizador puede seleccionarse que sea interna o externa. Interna: Frecuencia de reloj CPU dividida por 4. Externa: Entrada RA4/T0CKI Bit T0CS (bit 5) del OPTION_REG (direcciones 81h y 181h). 0 = reloj interno, 1 = reloj externo. Si se usa un reloj externo, su frecuencia como máximo será la mitad de la frecuencia de la entrada de reloj de la CPU. Si se selecciona el reloj externo, se puede utilizar como contador de pulsos en dicha entrada. En este caso se puede seleccionar si se activa la entrada por flanco de subida o de bajada: T0SE (bit 5) del OPTION_REG (direcciones 81h y 181h). 0 = flanco de subida, 1 = flanco de bajada. A este timer se le puede asociar un circuito divisor de la frecuencia de la entrada de reloj. Se le denomina Prescaler. Este circuito puede ser utilizado también por el Watch dog. En cualquier caso debe ser asignado a uno u otro. esto es seleccionado por el bit PSA (bit 3) del OPTION_REG (direcciones 81h y 181h). 0 = Timer 0, 1 = Watch dog. También es posible seleccionar el factor de división. Se dispone de tres bits: PS2, PS1 y PS0, (bits 2, 1 y 0) del OPTION_REG (direcciones 81h y 181h) que introducen los factores de división que se muestran en la siguiente tabla:

Bits PS Timer0 Watch dog 000 001 010 011 100 101 110 111

1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256

1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupción cada vez que se desborda el Timer0 cuando pasa de FFH a 0. Son los bits T0IE y T0IF del registro INTCON.

Watch dog Timer

Este módulo permite inicializar la CPU cuando se rebasa el contador. Se activa por medio de los bits de configuración del microcontrolador (en tiempo de programación del chip) y permite recupera el sistema cuando se pierde el control del programa. El período con un valor de prescaler 1:1 oscila entre 7 y 33 mS. con un valor típico de 18 mS. Esta tolerancia es debida a la imprecisión del oscilador interno que depende de la temperatura y la tensión de alimentación básicamente. Este período se puede ampliar con el prescaler hasta un factor de 1:128.

Page 30: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 27

Timer1

Timer de 16 bits Puede ser leído y escrito a través de los registros TMR1H y TMR1L. La entrada de reloj del temporizador puede seleccionarse que sea interna o externa. Interna: Frecuencia de reloj CPU dividida por 4. Externa: Entradas RC1/T1OSICCP2 y RC0/T1OSO/T1CKI Bit TMR1CS (T1CON<1>). 0 = reloj interno, 1 = reloj externo. Si se usa un reloj externo, su frecuencia como máximo será la mitad de la frecuencia de la entrada de reloj de la CPU. También con reloj externo existen dos alternativas, colocar un cristal como fuente de reloj (hasta 200 KHz) o utilizar una señal digital. En el segundo caso solo se utiliza la línea de entrada RC0/T1OSO/T1CKI. Para seleccionar una alternativa u otra, se dispone del bit T1OSCEN (T1CON<3>). Si vale 1 se usará el cristal activando el oscilador interno, si vale 0 se usan pulsos generados externamente. En este caso puede funcionar como contador de pulsos. Además se dispone de un bit que permite activar y desactivar el Timer: TMR1ON (T1CON<0>) El timer dispone de un prescaler controlado por los bits T1CKPS1 y T1CKPS0 (T1CON<5:4>) cuyos factores de división que se muestran en la siguiente tabla:

Bits T1CKPS

Timer1

00 01 10 11

1:1 1:2 1:4 1:8

Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupción cada vez que se desborda el Timer1 cuando pasa de FFFFH a 0. Son los bits TMR1IE y TMR1IF necesitando además que estén activados los bits que habilitan las interrupciones de los periféricos (PEIE) y el general (GIE).

Page 31: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 28

Timer2

Timer de 8 bits Puede ser leído y escrito a través del registro TMR2. La entrada de reloj del temporizador es interna, concretamente la frecuencia de reloj CPU dividida por 4. Se dispone de un bit que permite activar y desactivar el Timer: TMR2ON (T2CON<2>) El timer dispone de un prescaler controlado por los bits T2CKPS1 y T2CKPS0 (T2CON<1:0>) cuyos factores de división que se muestran en la siguiente tabla:

Bits T2CKPS

Timer2

00 01 1x

1:1 1:4 1:16

La salida del contador puede ser conectada a un postscaler, que dispone de 4 bits de control T2OUTPS3:T2OUTPS0 cuya salida pasa a controlar el flag de interrupción asociado a este Timer. Los factores de división se muestran en la siguiente tabla:

Bits T2OUTPS

Salida de interrupción

0000 0001 0010

.

.

. 1101 1110 1111

1:1 1:2 1:3 . . . 1:14 1:15 1:16

Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupción cada vez que se desborda el Timer2 cuando pasa de FFH a 0. Son los bits TMR2IE y TMR2IF necesitando además que estén activados los bits que habilitan las interrupciones de los periféricos (PEIE) y el general (GIE).

Page 32: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 29

CAPTURE/COMPARE/PWM

Módulos de captura, comparación y modulación por ancho de pulso. Existen dos módulos de este tipo: CCP1 y CCP2 cuyo funcionamiento es prácticamente idéntico diferenciándose en que el CCP2 podrá comenzar una conversión en el módulo A/D. Ambos módulos son de 16 bits, y están estrechamente relacionados con el Timer1. Modo captura. En este modo, el módulo CCPx captura el contenido del Timer1 cuando se produce un evento. Los eventos posibles, se refieren a los cambios en las entradas RC1/T1OSI/CCP2 ó RC2/CCP1 y se distinguen las siguientes situaciones:

• Un flanco de bajada. • Un flanco de subida. • Cada 4 flancos de subida. • Cada 16 flancos de subida.

En este modo se pueden calcular intervalos de tiempo entre dos sucesos de forma muy exacta. Si se han activado las interrupciones, se generará una por cada captura realizada. Modo comparación. En este modo, el módulo CCPx comparará el contenido de los registros de 16 bits del módulo con el Timer1, de tal manera que cuando se produzca una coincidencia, se producirá la interrupción correspondiente cuando las interrupciones estén activadas y podrá hacerse que las líneas asociadas RC1/T1OSI/CCP2 ó RC2/CCP1 se pongan a nivel alto, bajo o no cambien. Finalmente resetearán el Timer1 y en el caso del CCP2 además se lanzará una conversión A/D si el conversor está activado (permite hacer muestreos periódicos) Modo PWM. En este caso se produce una salida PWM en el puerto CCPx, con una resolución de 10 bits. Una señal PWM señal con onda rectangular de frecuencia fija, en la que se puede variar el tiempo en el que la misma permanece a 0 o a 1. Sustituye en la mayoría de los casos a un conversor D/A. La frecuencia de la señal se establece por medio del Timer2 y el tiempo que permanece a 1 (Duty cycle) se controla por medio de los registros del CCP que se esté utilizando.

Page 33: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 30

Master Synchronous Serial Port

Este módulo implementa un interfaz de comunicaciones en serie. Existen multitud de dispositivos que permiten este tipo de comunicación, tales como memorias EEPROM, conversores A/D, sensores de diferentes tipos (temperatura, posición, distancia, ...), displays, otros microcontroladores, ... El módulo puede operar en dos modos: SPI e I2C. SPI: Serial Peripheral Interface. Este interface suele ser utilizado para comunicar dos dispositivos entre si, uno se configura como master y el otro como esclavo. En este interface se definen las líneas:

• Serial Data Out (SDO) • Serial Date In (SDI) • Serial Clock (SCK)

Adicionalmente se puede usar un cuarto pin en modo esclavo.

• Slave Select ( SS ) Permite velocidades de hasta 8 Mbps con reloj a 20 MHz. El master inicia las transferencias activando la línea SCK, el esclavo recibe y transmite información cuando detecta que la línea SCK se activa. Cada vez que recibe un byte, en modo esclavo, se puede activar la interrupción correspondiente. I2C: Inter-Integrated Circuit. Permite la interconexión de múltiples dispositivos formando un bus. A cada dispositivo se le asigna una dirección y las tramas que se envían por el bus llevan direccionamiento para identificar los actores de la misma. En general se configura un dispositivo como master y el resto como esclavos, no obstante, se permiten buses multi-master, en este caso se dispone de mecanismos de detección de colisiones y gestión (arbitration) del Bus. se pueden alcanzar velocidades de 1 Mbps, y conectar hasta 128 o 1.024 dispositivos en función del tipo de direccionamiento utilizado..

Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART).

Este módulo implementa el popular interface de comunicaciones serie que tienen incluido gran cantidad de ordenadores. Permite comunicación serie entre dos dispositivos, y en algunos modos de funcionamiento, permite la conexión de más de dos dispositivos incluyendo 9 bits de direccionamiento (512 dispositivos).

Analog/Digital Converter.

Este módulo permite la conexión de entradas analógicas para convertirlas en valores discretos obteniendo su valor. Aunque se dispone de un solo conversor, el microcontrolador dispone de un multiplexor analógico que permite la conexión de hasta ocho entradas analógicas.

Page 34: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 31

Microcontrolador 16F876 El 16F876 contiene el mismo núcleo que el 16F877, pero dispone de 28 pines, lo cual supone eliminar algunos de los periféricos de los presentes en su hermano mayor.

Tal y como se muestra en la figura, se puede observar que carece de los puertos D (8 bits) y E (3 bits), y en cuanto a periféricos, no existe el SPP (Slave Parallel Port) y el conversor A/D dispone de 5 entradas (frente a 8 del 16F877). También se dispone de una entrada menos de alimentación (un único pin para VDD).

Page 35: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 32

PICMIN

Nombre Descripción USO Cantidad C1,2 Condensador cerámico de 22pF Circuito de reloj 2 X1 Cristal de 4Mhz Circuito de reloj 1 Jack Jack macho para el portapilas Conector portapilas 1 Jack hembra Jack hembra circuito impreso Alimentación con jack 1 Portapilas Portapila plano de 4 unidades Pilas 1 C7 Condensador multicapa de 100nF Eliminación de ruido 1 D1 Diodo 1N4148 Protección reset 1 L1 Diodo LED 3mm Circuito pruebas 1 R1,13 Resistencia 4K7 Pull-up 2 R11 Resistencia 330 ohmios Polarización led 1 R12 Resistencia 100 ohmios Protección reset 1 Pulsador Pulsador pequeño circuito impreso Reset y circuito pruebas 2 PIC16F84A Microcontrolador PIC 16f84a Microcontrolador 1 Zócalo Zocalo de 2x10 pines Zocalo para el micro 1 Cable 0,5 Cable de 0,5 rígido Conexionado 1 m.

Placa puntos Placa de puntos pequeña Plano soldadura 1 Material extra: Grabador TE-20 Soldador y estaño opcionalmente. 4 pilas. Cable de 0,5 mm o similar. También vale cable para grapinar.

Page 36: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 33

Page 37: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 34

Pines en el 16F84

Page 38: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 35

PIC-ENT1

Page 39: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 36

Placa de circuito impreso.

Page 40: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 37

Lista de componentes Componente Valor Cant. Precio ud. Total

C1 22p 2 0,018 0,036

C3 10uF/16V. Tántalo 1 0,028 0,028

D1 1N4148 1 0,012 0,012

D2 1N4001 1 0,012 0,012

DIS1 Display 7 segmentos cátodo común 1 0,77 0,77

IC1 Zócalo 40 pines torneados 1 0,56 0,56

IC2 Zócalo 14 pines torneados 2 0,2 0,4

J1 Conector RJ11-6pines Placa CI 90º 1 0,46 0,46

JP1 Jumper 1 0

LED1 LED verde 3mm 1 0,04 0,04

Q1 Cristal de cuarzo 4 MHz. 1 0,4 0,4

R1, R4 4K7 1/4 W. 2 0,01 0,02

R2 100 1/4 W. 1 0,01 0,01

R3 330 1/4 W. 1 0,01 0,01

R6 Potenciómetro10K PT1-0V 1 0,15 0,15

R5,7-13 220 1/4 W. 8 0,01 0,08

S1, S2 Pulsador placa C.I.tipo P11522/2 2 0,13 0,26

X1 Conector alimentación para placa CI 90º 1 0,25 0,25

Cable 3 m. de hilo 0,5 mm. 3 0,30 0,9

Placa Placa circuito impreso 100*100 mm. para prototipos, con cuadrados .

1 4,43 4,43

Conector Conector alimentaciónaéreo 1 0,79 0,79

Portapilas Portapilas 4 pilas AA 1 0,35 0,35

9,90

Herramienta: Alicate cortahilos. Alicate de punta plana. Soldador y estaño. Polímetro.

Page 41: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 38

Identificación de algunos componentes

Conector RJ11

Diodos

1N4001 1N4148

La manera más simple de identificar los dos pines del LED es por transparencia como se muestra en la siguiente figura. Se observa que internamente el terminal 'gordo' corresponde al cátodo es decir el que se conecta hacia masa o 0V.

Ánodo Cátodo

Page 42: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 39

Cristal de cuarzo

Estos componentes no tienen polaridad.

Resistencias. Código de colores. Esta información ha sido extraída de http://www.unicrom.com

Las dos primeras bandas dan una idea del valor base de la resistencia y la tercera banda nos indica por cuanto hay que multiplicar el valor base anterior para obtener el verdadero valor de la resistencia. La cuarta y última banda nos da la tolerancia.: Dorado 5%, Plateado 10%, sin color 20%.

La primera banda: valor base

Segunda banda: valor base Tercera banda: valor multiplicador

Cuarta banda: Tolerancia en porcentaje

Significado de cada banda

Color Valor base Multiplicador

Negro 0 x 1 Marrón 1 x 10 Rojo 2 x 100 Naranja 3 x 1,000 Amarillo 4 x 10,000 Verde 5 x 100,000 Azul 6 x 1,000,000 Violeta 7 x 10,000,000 Gris 8 x 100,000,000 Blanco 9

Page 43: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 40

Condensadores

Condensadores de Tántalo. Atención tienen polaridad. Junto a una de las conexiones aparece un signo '+' en miniatura.

Condensadores cerámicos Usamos dos de 22 pF. No tienen polaridad

Pulsadores Los pulsadores utilizados tienen 4 pines unidos entre sí dos a dos. El 1 con el 2 y el 3 con el 4.

Page 44: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 41

Electrónica

Componentes electrónicos Resistencias Pasivos Condensadores Inductancias. Componentes Diodos electrónicos Transistores Triacs ........ Reguladores de tensión Activos Analógicos Amplificadores operacionales .......... Circuitos integrados Puertas Multiplexores Digitales Memoria Microcontroladores ........

Fuente de alimentación

Esquema básico:

Transformador:

Page 45: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 42

Rectificador: Media onda:

Onda completa con toma intermedia en transformador:

Onda completa sin toma intermedia en transformador:

Filtro: Se construye con un condensador de alta capacidad entre la salida del rectificador y masa. Se recomiendan capacidades de entre 2.000 y 5.000 µF por amperio que pueda proporcionar la F.A.

A la salida del regulador se suelo poner otro condensador de filtro pero de una capacidad inferior (entre 100 nF. y 10 µF.)

Page 46: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 43

Regulador: La forma más simple utilizar reguladores integrados tales como la familia 78xx y 79xx. Cortocircuitables. Con protección térmica y contra sobrecargas. Corrientes de hasta 1 A.

Dispositivos E/S

Interruptores/pulsadores: Suelen utilizarse resistencias de Pull-up o Pull-down. Se debe disponer de un sistema de supresión de rebotes que puede ser HW. (biestable, red RC, ...) o SW.

Teclados También necesitan resistencias pull-up o Pull-down. Pueden conectarse de dos formas:

También es necesario resolver el problema de los rebotes.

Page 47: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 44

Otros dispositivos de entrada: Existen múltiples dispositivos que permiten obtener información del 'exterior'. Sensores de temperatura, luz, presión, y un largo etc. Es necesario acudir a los manuales de los fabricantes para conocer sus características, modo de conexión, etc. Un ejemplo de dispositivo es el CNY70, que contiene un emisor y un receptor de luz. Permite detectar por reflexión de la luz, si está en la proximidad de un objeto de color claro.

Page 48: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 45

Dispositivos de salida:

Diodos LED Funcionan a 1,8 V. 10-20 mA. Tienen polaridad

Displays 7 segmentos Varios diodos LED agrupados con el ánodo o el cátodo común.

Page 49: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 46

Displays LCD

Page 50: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 47

Page 51: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 48

Page 52: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 49

Page 53: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 50

Transistores: Existen enormes tratados sobre las diferentes maneras de conectar los transistores, y las diferentes formas en las que pueden trabajar. Nosotros nos vamos a centrar en una forma de conectarlos (Emisor común) y dos zonas de trabajo (corte y saturación). Trabajando en estas condiciones, son muy pocas las cosas que debemos tener en cuenta para decidir que transistores utilizar y que componentes conectar asociados a los mismos. Seleccionar un transistor: Los elementos a tener en cuenta son Ic, hFE y VCEO. Ic: Define la máxima corriente que se puede controlar a partir de ese transistor. Será algo mayor que la corriente máxima del circuito que vamos a conectar. hFE: Define la ganancia. hFE = IC/IB. A partir de la ganancia, obtendremos la corriente que circulará por la Base, que es la que suministraremos para activar el transistor. VCEO Define la máxima diferencia de potencial entre colector y emisor, es decir la máxima tensión de trabajo. Esquema básico:

IB es la corriente que suministrará nuestro circuito de control. Por ejemplo la salida máxima de un pin de I/O de un PIC es de 25 mA: aunque no es conveniente llegar a las corrientes máximas. La carga es el dispositivo que queremos controlar con el transistor: Un relé, un motor, una lámpara, ... Es importante conocer la corriente máxima que circulará por el dispositivo, para seleccionar un transistor adecuado. Transistores comerciales: Existen miles de referencias diferentes. Mostraremos aquí solamente 4 referencias de transistores muy conocidos.

Page 54: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 51

BC107 Es un transistor de baja potencia. Su IC es de 100 mA, su hFE es 110 y VCEO es de 45 V. El transistor complementario (mismas características salvo que es PNP, es el BC177).

Es muy adecuado para pequeñas cargas, tales como: el terminal común de un display de 7 segmentos, un relé, ... Por ejemplo supongamos que se debe activar un relé de 12 V. 80 mA. desde un PIC. El circuito sería:

En el circuito vemos que la tensión aplicada al relé es de 12 V. mientras que la que llega a RB es de 5 V. Esto no supone ningún problema mientras no se sobrepasen los valores máximos del transistor (VCEO). La IC será la del relé, es decir 80 mA. La ganacia del transistor es 110, por lo que bastaría con una corriente de base IB = 80/110= 0,72 mA. No obstante para asegurar que se entra en saturación vemos a hacer que IB= 1 mA. R=V/I, V=5V. - 0,7 V. (0,7 V. de la unión Base Emisor del transistor). RB= 4,3/0,001=4300 Ω. El valor comercial más próximo por debajo es 3.900 Ω El diodo que aparece en el esquema, elimina los picos de tensión que produce la bobina del relé al conectarla y desconectarla.

BD 139 Es un transistor de media potencia. Su IC es de 2 A, su hFE varía entre 25 y 60 en función de IC y VCEO es de 80 V. El transistor complementario (mismas características salvo que es PNP, es el BD140).

Page 55: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 52

TIP122 Es un transistor de potencia darlington (dos transistores conevtados en cascada para aumentar la ganancia). Su IC es de 5 A, su hFE es de 1.000 y VCEO es de 100 V. El transistor complementario (mismas características salvo que es PNP, es el TIP 127). Su elevada ganancia permite conectar la base al microcontrolador, y el colector a circuitos de elevada potencia, sin ninguna etapa previa.

2N3055 Es un transistor de potencia. Su IC es de 15 A, su hFE varía entre 2 y 100 en función de IC y VCEO es de 60 V. El transistor complementario (mismas características salvo que es PNP, es el MJ2955).

Page 56: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 53

TRIACS Circuitos que pueden ser clasificados como relés para corriente alterna de estado sólido. Permiten conducir o bloquear el paso de la corriente alterna.

Page 57: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 54

MOTORES

Motores CC

S1

S2

S3

S4

MOTOR

VCC

GND

ON OFF OFF ON IZQUIERDA OFF ON ON OFF DERECHA ON ON OFF OFF PARADO OFF OFF ON ON PARADO OFF OFF OFF OFF PARADO Circuito L293

EN1

EN2

Vcc TTL

v+ motor

GNDGND

GNDGND

1

8 9

16IN1

IN2

IN4

IN3

OUT1

OUT2 OUT3

OUT4

L293BEN1

EN2v+ motor

GND

1

IN1

IN2

IN4

IN3

OUT 1

OUT 2 OUT 3

OUT 4

GNDGND

GND

VCC

VCC T T L

V+ MOT OR

ON/OFF 1

ON/OFF 2

M OT OR 1 MOT OR 2

CONT ROL 1

CONT ROL2 CONT ROL3

CONT ROL4

CONTROL 1 CONTROL 2 ON / OFF 1 ESTADO MOTOR1 ON ON ON PARADO ON OFF ON DERECHA OFF ON ON IZQUIERDA OFF OFF ON PARADO X X OFF PARADO

Page 58: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 55

L293BEN1

EN2v+ motor

GND

1

IN1

IN2

IN4

IN3

OUT1

OUT2 OUT3

OUT4

GNDGND

GND

VCCDIR1 DIR2

VCC TTL

V+ MOTOR

ON/OFF 1

ON/OFF 2

MOTOR 1 MOTOR 2

DIRECCIÓN 1 ON / OFF 1 ESTADO MOTOR 1 OFF ON IZQUIERDA ON ON DERECHA X OFF PARADO

Servocontrol Discos/codificadores

Motores paso a paso

Motores Unipolares

Page 59: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 56

Motor Bipolar

Control de motores paso a paso Motor Unipolar

A B C D S1 S2 S3 S4 CA CB CC CD 1 - - ON OFF ON OFF 1 0 1 0 2 - - OFF ON ON OFF 0 1 1 0 3 - - OFF ON OFF ON 0 1 0 1 4 - - ON OFF OFF ON 1 0 0 1 Motor bipolar

A B C D S1 S2 S3 S4 S5 S6 S7 S8 CA CB CC CD 1 - + - + OFF ON ON OFF OFF ON ON OFF 1 0 1 0 2 + - - + ON OFF OFF ON OFF ON ON OFF 0 1 1 0 3 + - + - ON OFF OFF ON ON OFF OFF ON 0 1 0 1 4 - + + - OFF ON ON OFF ON OFF OFF ON 1 0 0 1

Page 60: Mini Guia 16F877

Microcontroladores Versión 1.3 27 nov. 03 pág. 57

Circuitos específicos: SAA1027

1

2

3

4

5

6

7

8 9

10

11

12

13

14

15

16

N.C

N.C

N.C

N.C

GND 1 GND 2

VCC 1

VCC 2

Reset Clock

Sentido

A

B C

D

RX

A

B

C

D

GND

+12 v

Sentido

Reset

Reloj