Вы находитесь на странице: 1из 51

Seguidores de clase

Universidad Pontificia de Salamanca (Madrid)

Microcontrolador PIC 16F877


Microcontroladores Versión 1.26 24/01/2003 pág. 1

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


Microcontroladores Versión 1.26 24/01/2003 pág. 2

Figura 1 Diagrama de bloques del PIC 16F877


Microcontroladores Versión 1.26 24/01/2003 pág. 3

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


Microcontroladores Versión 1.26 24/01/2003 pág. 4

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

Figura.3 Formas de modificar el Contador de Programa.


Microcontroladores Versión 1.26 24/01/2003 pág. 5

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.

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.
Microcontroladores Versión 1.26 24/01/2003 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
Rotación a la izquierda a través de carry de f,
RLF f, d C
dejando el resultado en W o f según d
Rotación a la derecha a través de carry de f,
RRF f, d C
dejando el resultado en W o f según d
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
Intercambia los dos nibbles (4 bits) de f,
SWAPF f, d Ninguno
dejando el resultado en W o f según d
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.
Microcontroladores Versión 1.26 24/01/2003 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
Intercambia los dos nibbles (4 bits) de f,
SWAPF f, d Ninguno
dejando el resultado en W o f según d

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, W-f? W. si d=1 W-f? 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
Microcontroladores Versión 1.26 24/01/2003 pág. 8

Instrucciones de rotación
Flags modif..
Rotación a la izquierda a través de carry de f,
RLF f, d C
dejando el resultado en W o f según d
Rotación a la derecha a través de carry de f,
RRF f, d C
dejando el resultado en W o f según d

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
Microcontroladores Versión 1.26 24/01/2003 pág. 9

Proceso de ensamblado

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

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


Microcontroladores Versión 1.26 24/01/2003 pág. 10

Figura 7 Entradas y salidas para las herramientas de desarrollo MPLAB

Tipo Nombre por Descripción


defecto
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.


Microcontroladores Versión 1.26 24/01/2003 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' H'12AB'
0xdígitos hexadecimales 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.

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

RES
[<NomVar>] RES <Unidades_de_memoria>.

UDATA
ValorActual RES 1
Aux1 RES 1
Aux2 RES 2
Aux3 RES 1

INCLUDE
INCLUDE <Fichero_a_incluir>
Microcontroladores Versión 1.26 24/01/2003 pág. 12

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
Microcontroladores Versión 1.26 24/01/2003 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
Microcontroladores Versión 1.26 24/01/2003 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
Microcontroladores Versión 1.26 24/01/2003 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
Microcontroladores Versión 1.26 24/01/2003 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
Microcontroladores Versión 1.26 24/01/2003 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
Microcontroladores Versión 1.26 24/01/2003 pág. 18

Interrupciones.
Microcontroladores Versión 1.26 24/01/2003 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.
Microcontroladores Versión 1.26 24/01/2003 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'


Microcontroladores Versión 1.26 24/01/2003 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)
Microcontroladores Versión 1.26 24/01/2003 pág. 22

PCON STATUS
Significado
POR BOR TO PD
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
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.)
Microcontroladores Versión 1.26 24/01/2003 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 7 primeras words (0x2000 a 0x2006) se denominan ID Location, sirve para almacenar un nº de serie, o un nº de
versión de software instalada, etc.
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'
Microcontroladores Versión 1.26 24/01/2003 pág. 24

Periféricos.
? 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.
Microcontroladores Versión 1.26 24/01/2003 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).

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.
Microcontroladores Versión 1.26 24/01/2003 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 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 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.
Microcontroladores Versión 1.26 24/01/2003 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 Timer1
T1CKPS
00 1:1
01 1:2
10 1:4
11 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).
Microcontroladores Versión 1.26 24/01/2003 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 Timer2
T2CKPS
00 1:1
01 1:4
1x 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 Salida de
T2OUTPS interrupción
0000 1:1
0001 1:2
0010 1:3
. .
. .
. .
1101 1:14
1110 1:15
1111 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).
Microcontroladores Versión 1.26 24/01/2003 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.
Microcontroladores Versión 1.26 24/01/2003 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.
Microcontroladores Versión 1.26 24/01/2003 pág. 31

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.
Microcontroladores Versión 1.26 24/01/2003 pág. 32
Microcontroladores Versión 1.26 24/01/2003 pág. 33

Pines en el 16F84
Microcontroladores Versión 1.26 24/01/2003 pág. 34

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:
Microcontroladores Versión 1.26 24/01/2003 pág. 35

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.)
Microcontroladores Versión 1.26 24/01/2003 pág. 36

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.


Microcontroladores Versión 1.26 24/01/2003 pág. 37

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.
Microcontroladores Versión 1.26 24/01/2003 pág. 38

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.
Microcontroladores Versión 1.26 24/01/2003 pág. 39

Displays LCD
Microcontroladores Versión 1.26 24/01/2003 pág. 40
Microcontroladores Versión 1.26 24/01/2003 pág. 41
Microcontroladores Versión 1.26 24/01/2003 pág. 42
Microcontroladores Versión 1.26 24/01/2003 pág. 43

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.
Microcontroladores Versión 1.26 24/01/2003 pág. 44

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).
Microcontroladores Versión 1.26 24/01/2003 pág. 45

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).
Microcontroladores Versión 1.26 24/01/2003 pág. 46

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.
Microcontroladores Versión 1.26 24/01/2003 pág. 47

MOTORES
Motores CC

S1 S3

VCC

MOTOR

GND

S2 S4

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

VCC TTL
EN1 1 16 Vcc TTL 1 L293B
IN1 IN4 ON/OFF 1 EN1
VCC
CONTROL 1 IN1 IN4 CONTROL4
OUT1 OUT4
OUT1 OUT4
MOTOR 1 MOTOR 2
GND GND
GND GND
GND GND GND
GND
OUT2 OUT3
OUT2 OUT3
IN2 IN3 CONTROL2 CONTROL3
IN2 IN3
v+ motor 8 9 EN2 ON/OFF 2
v+ motor EN2

V+ MOTOR

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
Microcontroladores Versión 1.26 24/01/2003 pág. 48

VCC TTL
1 L293B
ON/OFF 1 EN1
VCC
DIR1 IN1 IN4 DIR2
OUT1 OUT4
MOTOR 1 MOTOR 2
GND GND
GND
GND
OUT2 OUT3
IN2 IN3
ON/OFF 2
v+ motor EN2

V+ MOTOR

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
Microcontroladores Versión 1.26 24/01/2003 pág. 49

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
Microcontroladores Versión 1.26 24/01/2003 pág. 50

Circuitos específicos: SAA1027


+12 v
Reloj

N.C 1 16 N.C
B D
Reset Reset 2 15 Clock
Sentido Sentido 3 14 VCC 1
RX 4 13 VCC 2
GND GND 1 5 12 GND 2
A 6 11 D
A C
N.C 7 10 N.C
B 8 9 C

Вам также может понравиться