Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microcontroladores
INDICE
Versin 1.5
04 oct. 07
pg. 1
Caractersticas generales del PIC 16F877............................................................................................................ 2 Diagrama de bloques del PIC 16F877................................................................................................................. 3 Organizacin de la memoria RAM...................................................................................................................... 4 Tipos de direccionamiento de la RAM................................................................................................................ 5 Formas de modificar el Contador de Programa.................................................................................................... 5 Registro de estado .............................................................................................................................................. 6 ALU .................................................................................................................................................................. 6 Set de instrucciones............................................................................................................................................ 6 Instrucciones de transferencia ......................................................................................................................... 9 Instrucciones aritmticas................................................................................................................................. 9 Instrucciones lgicas .................................................................................................................................... 10 Incrementos/Decrementos............................................................................................................................. 10 Instrucciones de rotacin .............................................................................................................................. 10 Instrucciones de manipulacin de bits............................................................................................................... 10 Instrucciones de control ................................................................................................................................ 11 Instrucciones de salto incondicional .............................................................................................................. 11 Instrucciones de salto condicional................................................................................................................. 11 Proceso de ensamblado..................................................................................................................................... 13 Representacin de nmeros y cadenas .............................................................................................................. 15 Directivos del ensamblador .............................................................................................................................. 15 Operador $ ................................................................................................................................................... 16 Directivas para programas absolutos ............................................................................................................. 16 Directivas para programas reubicables .......................................................................................................... 17 Programa Display.ASM (Programa absoluto).................................................................................................... 18 Mdulo CONTAR.ASM (Programa reubicable)................................................................................................ 20 Mdulo Display.ASM ...................................................................................................................................... 21 Interrupciones. ................................................................................................................................................. 22 Proceso para atencin de interrupciones............................................................................................................ 23 Plantilla de programa absoluto con atencin a interrupciones. ........................................................................... 24 Reset................................................................................................................................................................ 25 Modo Sleep...................................................................................................................................................... 26 Reloj. ............................................................................................................................................................... 26 Modo Debug. ................................................................................................................................................... 27 Bits de Configuracin....................................................................................................................................... 27 Perifricos 16F877 ........................................................................................................................................... 28 Puertos programables de E/S. ........................................................................................................................... 29 Timers ............................................................................................................................................................. 30 Timer0 ......................................................................................................................................................... 30 Watch dog Timer.......................................................................................................................................... 30 Timer1 ......................................................................................................................................................... 31 Timer2 ......................................................................................................................................................... 32 CAPTURE/COMPARE/PWM ......................................................................................................................... 33 Master Synchronous Serial Port........................................................................................................................ 34 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART). ........................................ 34 Analog/Digital Converter. ................................................................................................................................ 35 Microcontrolador 16F876................................................................................................................................. 37 Microcontrolador 16F84.................................................................................................................................. 38
Microcontroladores
Microcontrolador circuito ubicuo.
Versin 1.5
04 oct. 07
pg. 1
Microcontroladores
Versin 1.5
04 oct. 07
pg. 2
Memoria
Perifricos
Microcontroladores
Versin 1.5
04 oct. 07
pg. 3
Microcontroladores
Versin 1.5
04 oct. 07
pg. 4
Registro
Indirect. addr.(*) OPTION_REG PCL STATUS FSR TRISA TRISB TRISC TRISD TRISE PCLATH INTCON PIE1 PIE2 PCON
TXSTA SPBRG
ADRESL ADCON1
Dir. 80H 81H 82H 83H 84H 85H 86H 87H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 90H 91H 92H 93H 94H 95H 96H 97H 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH A0H
Registro
Indirect. addr.(*) TMR0 PCL STATUS FSR PORTB
Dir. 100H 101H 102H 103H 104H 105H 106H 107H 108H 109H 10AH 10BH 10CH 10DH 10EH 10FH 110H 111H 112H 113H 114H 115H 116H 117H 118H 119H 11AH 11BH 11CH 11DH 11EH 11FH 120H
Registro
Indirect. addr.(*) OPTION_REG PCL STATUS FSR TRISB
Dir. 180H 181H 182H 183H 184H 185H 186H 187H 188H 189H 18AH 18BH 18CH 18DH 18EH 18FH 190H 191H 192H 193H 194H 195H 196H 197H 198H 199H 19AH 19BH 19CH 19DH 19EH 19FH 1A0H
Acceso a 70H-7FH
7FH FFH
Acceso a 70H-7FH
17FH
Acceso a 70H-7FH
1FFH
Banco 0
Banco 1
Banco 2
Banco 3
Microcontroladores
Versin 1.5
04 oct. 07
pg. 5
Microcontroladores
Versin 1.5
04 oct. 07
pg. 6
Registro de estado
Registro de estado
7 0
IRP
RP1
RP0
Direccionamiento
TO
Reset
PD
DC
Flags ALU
ALU
Set de instrucciones.
Formato de una instruccin: [etiqueta] mnemnico [operando1[, operando2]] [; comentario] Tipos de operandos en una instruccin: 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 instruccin. k: Constante. Las instrucciones van a manejar dos tipos de constantes, si la instruccin es CALL o GOTO la constante es de 11 bits (k11) y hace referencia a la direccin 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 operacin que siempre involucra a la ALU y al acumulador.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 7
El fichero p16f677.inc Usaremos ejemplos del uso de instrucciones. Es conveniente conocer que todos los nombres de registros de propsito especfico, y los bits de estos estn definidos en el fichero p16f877.inc y es muy til incluirlo en nuestros programas. Se definen smbolos como STATUS con el valor 3 (Direccin del registro STATUS en la memoria RAM), TRISB con el valor 86H (que es su direccin en la memoria RAM). Tambin se definen bits como RP0 y RP1 con los valores 5 y 6 que corresponden a las posiciones de esos bits en el registro de STATUS. Tambin se definen W con el valor 0 y F con el valor 1 para usarlos en el lugar del operando d de algunas instrucciones. Destacar que el ensamblador del PIC es CASE SENSITIVE.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 8
Instruccin ADDLW ADDWF ANDLW ANDWF BCF BSF BTFSC BTFSS CALL CLRF CLRW CLRWDT COMF DECF DECFSZ GOTO INCF INCFSZ IORLW IORWF MOVF MOVLW MOVWF NOP RETFIE RETLW RETURN RLF RRF SLEEP SUBLW SUBWF SWAPF XORLW XORWF k8 f, d k8 f, d f, b f, b f, b f, b k11 f
Descripcin W+k8 W Si d=0, W+f W. si d=1 W+ff Wk8 W Si d=0, Wf W. si d=1 Wff 0 bit(b) de f 1 bit(b) de f Comprobar bit b en f, saltar si es 0 Comprobar bit b en f, saltar si es 1 PC pila, bits 4,3 de PCLATH + k11 PC 0f 0W Poner a 0 el Watch Dog Timer. f,d Si d=0, Ca1(f) W. si d=1 Ca1(f)f f, d Si d=0, f-- W. si d=1 f-- f f, d Si d=0, f-- W, si d=1 f-- f, saltar si cero k11 bits 4,3 de PCLATH + k11 PC f, d Si d=0, f++ W. si d=1 f ++f f, d Si d=0, f++ W, si d=1 f++ f, saltar si cero k8 Wk8 W f, d Si d=0, Wf W. si d=1 Wff f, d Si d=0, f W. si d=1 ff k8 k8 W f W f No operar pila PC, 1 GIE k8 pila PC; k8 W pila PC Rotacin a la izquierda a travs de carry de f, f, d dejando el resultado en W o f segn d Rotacin a la derecha a travs de carry de f, f, d dejando el resultado en W o f segn d Pasar a modo standby k8 k8 -W W f, d Si d=0, f-W W. si d=1 f-Wf Intercambia los dos nibbles (4 bits) de f, f, d dejando el resultado en W o f segn d k8 Wk8 W f, d Si d=0, Wf W. si d=1 Wff
Flags modif.. C, DC, Z C, DC, Z Z Z Ninguno Ninguno Ninguno Ninguno Ninguno Z Z TO , PD Z Z Ninguno Ninguno Z Ninguno Z Z Z Ninguno Ninguno Ninguno GIE Ninguno Ninguno C C TO , PD C, DC, Z C, DC, Z Ninguno Z Z
Microcontroladores
Versin 1.5
04 oct. 07
pg. 9
Instrucciones de transferencia
CLRF CLRW MOVLW MOVWF MOVF SWAPF
Ejemplos clrf Var1 ;0 -> Var1
f k8 f f, d f, d
0f 0W k8 W W f Si d=0, f W. si d=1 ff Intercambia los dos nibbles (4 bits) de f, dejando el resultado en W o f segn d
; Transferir un 7 a Var2 movlw 7 movwf Var2 ; Transferir Var1 -> Var2 movf Var1, W movwf Var2
Instrucciones aritmticas
ADDLW ADDWF SUBLW SUBWF k8 f, d k8 f, d W+k8 W Si d=0, W+f W. si d=1 W+ff k8-W W Si d=0, f-W W. si d=1 f-Wf Flags modif.. C, DC, Z C, DC, Z C, DC, Z C, DC, Z
; Sumar 5 a Var3 movlw 5 addwf Var3, F ; Saltar a Etiq1 si Var3 > 9 (Si var3-10 no es negativo, cumple la condicin) movlw 10 subwf Var3, W ; Saltar a Etiq1 si resultado no es negativo ; Equivale a saltar si no hay desbord. en la resta es decir si Fc=1
Microcontroladores
Versin 1.5
04 oct. 07
pg. 10
Instrucciones lgicas
ANDLW ANDWF COMF IORLW IORWF XORLW XORWF k8 f, d f,d k8 f, d k8 f, d Wk8 W Si d=0, Wf W. si d=1 Wff Si d=0, Ca1(f) W. si d=1 Ca1(f)f Wk8 W Si d=0, Wf W. si d=1 Wff Wk8 W Si d=0, Wf W. si d=1 Wff Flags modif.. Z Z Z Z Z Z Z
; Saltar a Etiq1 si Var3 = 9 (Si var39 es 0, cumple la condicin) movlw 9 xorwf Var3, W ; Saltar a Etiq1 si Fz=1
Incrementos/Decrementos
DECF INCF f, d f, d Si d=0, f-- W. si d=1 f-- f Si d=0, f++ W. si d=1 f ++f Flags modif.. Z Z
Instrucciones de rotacin
Flags modif.. RLF RRF f, d f, d Rotacin a la izquierda a travs de carry de f, dejando el resultado en W o f segn d Rotacin a la derecha a travs de carry de f, dejando el resultado en W o f segn d C C
; En la placa de la prctica, el diodo LED est conectado al pin 1 del PORTB ; Encender el LED BSF PORTB, 1 ; Apagar el LED BCF PORTB, 1
Microcontroladores
Versin 1.5
04 oct. 07
pg. 11
Instrucciones de control
Flags modif.. CLRWDT SLEEP Poner a 0 el Watch Dog Timer. Pasar a modo standby TO , PD TO , PD
; Saltar a Etiq1 si Var3 = 9 (Si var39 es 0, cumple la condicin) movlw 9 xorwf Var3, W ; Saltar a Etiq1 si Fz=1 btfsc STATUS, Z goto Etiq1 ; Saltar a Etiq1 si Var3 > 9 (Si var3-10 no es negativo, cumple la condicin) movlw 10 subwf Var3, W ; Saltar a Etiq1 si resultado no es negativo ; Equivale a saltar si no hay desbord. en la resta es decir si Fc=1 btfsc STATUS, C goto Etiq1 Dado que es incmodo manejar las condiciones de salto de esta forma, se dispone de unas macros predefinidas para manejar las condiciones ms frecuentes (Fz y Fc) BZ BNZ BC BNC Etiq Etiq Etiq Etiq ; ; ; ; Saltar Saltar Saltar Saltar a a a a Etiq Etiq Etiq Etiq si si si si Fz=1 Fz=0 Fc=1 Fc=0
Microcontroladores
Versin 1.5
04 oct. 07
pg. 12
Existe una tcnica para implementar una estructura similar al un CASE sumndole un valor al PCL. : ; ; ; Esta secuencia de instrucciones permite saltar a diferentes etiquetas en funcin del valor de Var3. Var3 debera ser menor o igual que 6. Si PCLATH=0 debemos estar seguros de que el bloque se encuentra en las primeras 256 posiciones de la memoria principal movf Var3, W addwf PCL, F goto Etiq1 goto Etiq2 goto Etiq3 goto Etiq4 goto Etiq5 goto Etiq6 Tambin se puede crear una tabla de conversin de cdigos:. : Esta secuencia de instrucciones permite convertir W en otro valor. W debera ser menor o igual que 8. ; Si PCLATH=0 debemos estar seguros de que el bloque se encuentra en las ; primeras 256 posiciones de la memoria principal 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'
Microcontroladores
Versin 1.5
04 oct. 07
pg. 13
Proceso de ensamblado
Microcontroladores
Versin 1.5
04 oct. 07
pg. 14
Microcontroladores
Versin 1.5
04 oct. 07
pg. 15
#DEFINE
#define <nombre> [<cadena_de _caracteres>] #define TAM_NOMBRE 0x20 #define BitControl 0x19,7 ..... bsf BitControl ; Equivale a bsf 0x19, 7
END
Debe colocarse siempre al final del programa o del mdulo
#INCLUDE
#INCLUDE <Fichero_a_incluir>
LIST
LIST [<opcin>, ... , <Opcin>] Opcin n=nnn p=<tipo> r=<radix> ..... Valor por defecto 60 Ninguno hex LIST p=16F877, r=dec Descripcin Lneas por pgina de listado Selecciona procesador Selecciona radix (hex, dec, oct)
BANKSEL
Genera las instrucciones necesarias para seleccionar el banco de memoria adecuado. BANKSEL <NomSimb|Expres> BANKSEL TRISB BANKSEL 130H ; Selecciona el banco correspondiente a TRISB ; Selecciona el Banco 2
Microcontroladores
Versin 1.5
04 oct. 07
pg. 16
Operador $
Aunque no es una directiva, este puede ser un lugar oportuno para verlo. Se sustituye por la direccin de la lnea en la que se encuentra goto $ ; Bucle infinito
btfsc FILE, BIT goto $-1 ;No se sale de este bucle hasta que BIT=0
CBLOCK
Como es frecuente en programas absolutos declarar muchas constantes, esta directiva lo permite hacer de forma ms eficiente. CBLOCK [<expresin>] <NomVar>[:<incremento>][,<NomVar>[:<incremento>][, ...]] ENDC CBLOCK 0x20 Var1, Var2, Var3 ENDC El bloque anterior equivale a: Var1 Var2 Var3 EQU 0x20 EQU 0x21 EQU 0x22
Microcontroladores
Versin 1.5
04 oct. 07
pg. 17
Se puede hacer una definicin ms sofisticada de datos: CBLOCK 0x30 DobleByte:0, DobleByteAlto, DobleByteBajo Nombre: TAM_NOMBRE Word1:2, Word2: 2 Var1, Var2, Var3 ENDC
ORG
Indica la posicin en la memoria de programa que ocupar la primera instruccin que aparezca [Etiqueta] ORG <expresin> ORG 0x20
EXTERN
EXTERN <Etiqueta> [, <Etiqueta> ... ] EXTERN Var1 ....... MOVF Var1, W
GLOBAL
GLOBAL <Etiqueta> [, <Etiqueta> ... ] Var1 Var2 UDATA RES 1 RES 2 GLOBAL Var1, Var2
Microcontroladores
Versin 1.5
04 oct. 07
pg. 18
Inicio ; En primer lugar inicializaremos el puerto C para que configure todas sus lneas ; 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 pgina 0 Bucle ; Comienzo del bucle principal movf ValorActual, W ; Muevo ValorActual a W call hex27seg ; Llamamos a rutina de conversin movwf PORTC ; ponemos resultado en PORTC (el display) incf ValorActual, F ; Incrementamos el valor para la siguiente btfsc ValorActual, 4 ; iteracin, y si se activa el bit 4, hemos clrf ValorActual ; llegado a 10H, y reseteamos la variable. movlw movwf call decfsz goto goto 8 Aux1 Espera1 Aux1, F Espera Bucle ; Inicializamos Aux1 a 8 para conseguir ; una espera algo mayor que 1 segundo. ; Rutina con un retardo de 0,13 seg. Aprox.
Espera
; 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
Versin 1.5
04 oct. 07
pg. 19
;**************************************** hex27seg ;**************************************** ; Subrutina hex27seg, que recibe un valor hexadecimal de un dgito en W, ; y devuelve en el mismo registro el valor correspondiente al de un ; display de 7 segmentos. ; A continuacin 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 dgito 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
Versin 1.5
04 oct. 07
pg. 20
Microcontroladores
Versin 1.5
04 oct. 07
pg. 21
Mdulo Display.ASM
; Mdulo Display.asm. Contiene la subrutina hex27seg, que recibe un valor ; hexadecimal en W y devuelve el valor correspondiente al de un display de 7 segm. ; A continuacin 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 dgito 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 ; Defino algunas constantes porque no se ha F EQU 1 ; includo el fichero p16f877.inc PCL EQU 2 global hex27seg PROG1 CODE 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
Versin 1.5
04 oct. 07
pg. 22
Interrupciones.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 23
GIE 0 1 1 1 1 1 1 1 1
PEIE X 0 1 X X X X X X
T0IE X X X 0 1 X X X X
INTE RBIE xxxIE Significado X X X Todas las interrupciones deshabilitadas X X X Deshabilitadas las interrupciones de los perifricos internos salvo Timer 0 X X X Permitidas las interrupciones de los perifricos internos. Hay un bit adicional para cada perifrico. X X X Deshabilitada Int. Timer 0 X X X Habilitada Int. Timer 0 0 X X Deshabilitada Int. externa 1 X X Habilitada Int. externa X 0 X Deshabilitada Int. cambio lneas RB4,..,RB7 X 1 X Habilitada Int. cambio lneas RB4,..,RB7
Microcontroladores
Versin 1.5
04 oct. 07
pg. 24
0x004 ; direccin del vector de interrupcin w_temp ; Salvar el contenido de W STATUS,w ; Salvar el contenido de STATUS status_temp STATUS ; PIR1, TMR1IF; T1_INT ; PIR1, ADIF ; AD_INT ; ; ; INTCON, RBIF; PORTB_INT ; Seleccin del Banco 0 Interrupcin Timer1 overflow? SI, atender interrupcin.T1 NO, inerrupcin A/D? SI, atender interrupcin conversor A/D NO, interrupcin por cambio en PORTB? SI, atender interrupcin cambio en PORTB
; NO, bloqueo por error de interrupcin INT_ERROR_LP1 ; Bucle infinito por la llegada de int. no esperada status_temp,W; Recuperar la copia del registro STATUS STATUS ; y restaurar su valor w_temp,F w_temp,W ; restaurar W sin modificar STATUS ; retorno de la interrupcin ; Rutina para la interrupcin de Timer1 overflow ; PIR1, TMR1IF; Poner a 0 el flag de la interrupcin del Timer1 END_ISR ; Fin de la rutina ; Rutina para la interrupcin del conversor A/D ; PIR1, ADIF ; Poner a 0 el flag de la interrupcin del conv. A/D END_ISR ; Fin de la rutina ; ; Rutina para la interrupcin de cambio en PORTB ; INTCON, RBIF; Poner a 0 el flag de interrupcin cambio en PORTB END_ISR ; Fin de la rutina
T1_INT
AD_INT
PORTB_INT
inicio ; el resto del programa va aqu. end ; El programa debe acabar con un 'end'
Microcontroladores
Versin 1.5
04 oct. 07
pg. 25
Reset.
Coloca a la CPU en un estado conocido. Causas: Power On Reset POR. Brown-out Reset. MCLR en estado normal. WDT en estado normal. MCLR en estado SLEEP. WDT en estado SLEEP.
Power On Reset
Microcontroladores
PCON STATUS
Versin 1.5
04 oct. 07
pg. 26
POR
0 0 0 1 1 1 1 1
BOR
X X X 0 1 1 1 1
TO
1 0 X 1 0 0 u 1
PD
1 X 0 1 1 0 u 0
Significado Power-on Reset Estado incorrecto Estado incorrecto Brown-out Reset WDT reset during normal operation WDT Wake-up. No reinicia el PC MCLR reset during normal operation MCLR reset during SLEEP
Existen tablas indicando como se inicializan los registros de la RAM con un reset, pero se distinguen bsicamente tres situaciones: Reset generado por POR / BOR : Se inicializan prcticamente todos los registros. Reset generado por MCLR /WDT: Se inicializan los registros de algunos perifricos y algunos bsicos como el contador de programa y parte del registro de flags. Reset generado por MCLR /WDT mientras se estaba en modo SLEEP: Prcticamente ningn registro cambia su contenido.
Modo Sleep
Detiene a la CPU. Principal ventaja: el consumo de la CPU se reduce a niveles muy bajos. Se despierta mediante: Activacin de MCLR Activacin de INT, RB4..RB7 y algunas interrupciones asociadas a perifricos internos. Desbordamiento del WDT
Reloj.
Los circuitos para generar la seal de reloj se encuentran dentro de la CPU. Estos circuitos necesitan algn componente externo para fijar su frecuencia y modo de trabajo. El oscilador interno se tiene que configurar para controlar adecuadamente los componentes externos, existiendo 4 posibilidades: 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
Versin 1.5
04 oct. 07
pg. 27
Modo Debug.
Algunos circuitos permiten la depuracin del programa sobre el propio chip (ICD In Circuit Debugging). Cuando esta capacidad est desactivada el microcontrolador funciona de forma autnoma como cualquier MCU estndar. Cuando esta capacidad est activada el microcontrolador debe estar conectado a un dispositivo (con las lneas RB6 y RB7) que controla e inspecciona la evolucin del programa. En este caso podemos ejecutar el programa paso a paso, insertar un breakpoint, inspeccionar o modificar el contenido de la memoria, ... Tambin se reservan algunos recursos. Para el 16F877 se reserva: - Las lneas RB6 y RB7 a travs de las cuales se comunica con el host. - 1 nivel de la pila. - Direccin 0 del programa debera contener la instrciin NOP. - ltimas 100H direcciones de la memoria de programa. - Direcciones 0x70 y 0x1EB a 0x1EF de la memoria de datos.
Bits de Configuracin.
A partir de la direccin 0x1FFF de la memoria de programa, se dispone de 8 palabras extras. Estas direcciones no son accesibles desde el programa o la aplicacin, pero si pueden ser accedidas en el proceso de grabacin. Las 4 primeras words (0x2000 a 0x2003) se denominan ID Location, sirve para almacenar un n de serie, o un n de versin de software instalada, etc. La direccin 0x2006 es de slo lectura y tiene un identificador del modelo de microcontrolador. La siguiente word (0x2007) , es la palabra de configuracin, sus bits tiene los siguiente significados: Bits 13-12 y 5-4: Estn relacionados con varios niveles de proteccin de nuestro SW. Bit 11: DEBUG. Si vale 0 se desactiva el modo ICD, y RB6 y RB/ quedan como lneas I/O estndar. Bit 9: WRT. Permite o no, escribir en la memoria Flash de programa. Bit 8. CPD Proteccin de los datos de la EEPROM. Bit 7: LVP. Permite la grabacin a bajo voltaje. Bit 6: BODEN. 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. Seleccin de tipo de generador de reloj: Uso de directivos de configuracin: __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 _CP_HALF _CP_UPPER_256 _CP_OFF _DEBUG_ON _DEBUG_OFF _WRT_ENABLE_ON _WRT_ENABLE_OFF _CPD_ON _CPD_OFF _LVP_ON _LVP_OFF EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU H'0FCF' H'1FDF' H'2FEF' H'3FFF' H'37FF' H'3FFF' H'3FFF' H'3DFF' H'3EFF' H'3FFF' H'3FFF' H'3F7F' _BODEN_ON _BODEN_OFF _PWRTE_OFF _PWRTE_ON _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU H'3FFF' H'3FBF' H'3FFF' H'3FF7' H'3FFF' H'3FFB' H'3FFC' H'3FFD' H'3FFE' H'3FFF'
Microcontroladores
Versin 1.5
04 oct. 07
pg. 28
Perifricos 16F877
Puertos programables de E/S Timers/Counters Puertos de captura/comparacin de datos Moduladores de ancho de pulso (PWM) Conversor Analgico/Digital de 10 bits Puerto serie sncrono USART Parallel Slave Port
Circuito de 40 pines en formato. Salvo 7 pines, todos los dems estn asociados al menos con los puertos de E/S. Los 7 pines son: 4 pines para alimentacin, estn duplicados. 1 pin para MCLR y Vpp que es una tensin de 12 a 14 V. usada cuando est en modo programacin. 2 pines relacionados con entradas o salidas de reloj, en funcin del tipo de reloj utilizado.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 29
Las lneas de E/S estn 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 lnea 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 ms exacta) lo que obliga a poner una resistencia de Pull Up para poder obtener '1'. Adems despus de un reset las lneas del puerto A estn configuradas como entradas analgicas (como digitales devuelven '0'). Escribiendo el valor 6 en el registro ADCON1 se pueden convertir en entradas digitales. El puerto B dispone de resistencias Pull-up que pueden activarse por software cuando funcionan como entradas. La activacin se realiza con el bit RBPU (bit 7) del registro OPTION_REG (direcciones 81h y 181h). Adems la lnea RB0 puede funcionar como entrada de peticin de interrupcin. 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 interrupcin 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 lnea RA4) y los puertos C, D y E como Schmitt Trigger (tambin RA4). TTL: VIL = 0,8 V., VIH = 2 V. ST: VIL = 1 V., VIH = 4 V. Permite cambios de tensin lentos en su entrada.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 30
Timers
Disponemos de 3 timers numerados del 0 al 2 y del Watch Dog Timer.
Timer0
Timer de 8 bits Puede ser ledo y escrito a travs 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 mximo 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 tambin 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. Tambin es posible seleccionar el factor de divisin. 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 divisin que se muestran en la siguiente tabla: Bits PS 000 001 010 011 100 101 110 111 Timer0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 Watch dog 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 interrupcin cada vez que se desborda el Timer0 cuando pasa de FFH a 0. Son los bits T0IE y T0IF del registro INTCON.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 31
Timer1
Timer de 16 bits Puede ser ledo y escrito a travs 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 mximo ser la mitad de la frecuencia de la entrada de reloj de la CPU. Tambin con reloj externo existen dos alternativas, colocar un cristal como fuente de reloj (hasta 200 KHz) o utilizar una seal digital. En el segundo caso solo se utiliza la lnea 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. Adems 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 divisin que se muestran en la siguiente tabla: Bits T1CKPS 00 01 10 11 Timer1 1:1 1:2 1:4 1:8
Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupcin cada vez que se desborda el Timer1 cuando pasa de FFFFH a 0. Son los bits TMR1IE y TMR1IF necesitando adems que estn activados los bits que habilitan las interrupciones de los perifricos (PEIE) y el general (GIE).
Microcontroladores
Versin 1.5
04 oct. 07
pg. 32
Timer2
Timer de 8 bits Puede ser ledo y escrito a travs 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 divisin que se muestran en la siguiente tabla: Bits T2CKPS 00 01 1x Timer2 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 interrupcin asociado a este Timer. Los factores de divisin se muestran en la siguiente tabla: Bits T2OUTPS 0000 0001 0010 . . . 1101 1110 1111 Salida de interrupcin 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 interrupcin cada vez que se desborda el Timer2 cuando pasa de FFH a 0. Son los bits TMR2IE y TMR2IF necesitando adems que estn activados los bits que habilitan las interrupciones de los perifricos (PEIE) y el general (GIE).
Microcontroladores
Versin 1.5
04 oct. 07
pg. 33
CAPTURE/COMPARE/PWM
Mdulos de captura, comparacin y modulacin por ancho de pulso. Existen dos mdulos de este tipo: CCP1 y CCP2 cuyo funcionamiento es prcticamente idntico diferencindose en que el CCP2 podr comenzar una conversin en el mdulo A/D. Ambos mdulos son de 16 bits, y estn estrechamente relacionados con el Timer1. Modo captura. En este modo, el mdulo 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 comparacin. En este modo, el mdulo CCPx comparar el contenido de los registros de 16 bits del mdulo con el Timer1, de tal manera que cuando se produzca una coincidencia, se producir la interrupcin correspondiente cuando las interrupciones estn activadas y podr hacerse que las lneas asociadas RC1/T1OSI/CCP2 RC2/CCP1 se pongan a nivel alto, bajo o no cambien. Finalmente resetearn el Timer1 y en el caso del CCP2 adems se lanzar una conversin A/D si el conversor est activado (permite hacer muestreos peridicos) Modo PWM. En este caso se produce una salida PWM en el puerto CCPx, con una resolucin de 10 bits. Una seal PWM seal 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 mayora de los casos a un conversor D/A. La frecuencia de la seal 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
Versin 1.5
04 oct. 07
pg. 34
Permite velocidades de hasta 8 Mbps con reloj a 20 MHz. El master inicia las transferencias activando la lnea SCK, el esclavo recibe y transmite informacin cuando detecta que la lnea SCK se activa. Cada vez que recibe un byte, en modo esclavo, se puede activar la interrupcin correspondiente. I2C: Inter-Integrated Circuit. Permite la interconexin de mltiples dispositivos formando un bus. A cada dispositivo se le asigna una direccin y las tramas que se envan 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 deteccin de colisiones y gestin (arbitration) del Bus. se pueden alcanzar velocidades de 1 Mbps, y conectar hasta 128 o 1.024 dispositivos en funcin del tipo de direccionamiento utilizado..
Microcontroladores
Versin 1.5
04 oct. 07
pg. 35
Analog/Digital Converter.
Este mdulo permite la conexin de entradas analgicas para convertirlas en valores discretos obteniendo su valor. El valor mnimo de una entrada es 0 y aparece si la tensin de esa entrada es menor o igual a VREF-. El valor mximo es 1.023 (3FFH) si la tensin es mayor o igual que VREF+. Cualquier voltaje intermedio producir un valor proporcional al mism0 en el rango de 1 a 1.022. Aunque se dispone de un nico conversor, el microcontrolador tiene un multiplexor analgico que permite la conexin de hasta ocho entradas.
Para su uso se dispone de 4 registros de 8 bits: ADRESH, ADRESL, ADCON0 y ADCON1. Los dos primeros son: ADRESH y ADRESL (parte alta y parte baja del resultado de la conversin AD) contendrn el resultado de la ltima conversin. Se usan dos registros porque el conversor tiene una resolucin de 10 bits. Si ocho bits fueran suficientes para una aplicacin determinada, se puede indicar al conversor que entregue el resultado justificado a la izquierda y nos quedamos con el contenido de ADRESH. Registros ADCON0 y ADCON1 (Registros de control del conversor). ADCON1 suele usarse en la parte de inicializacin del programa para asignar la funcin que debe corresponder a cada una de las posibles entradas analgicas. ADCON0 debe ser accedido antes de cada conversin. El bit de mayor peso de ADCON1 (ADFM) permite decidir si el resultado queda alineado a la izquierda (0) o a la derecha (1). 0 0 ADRESH 0 0 0 0 b9 b8 b7 b6 ADRESL b5 b4 b3 b2 b1 b0
Microcontroladores
Versin 1.5
04 oct. 07
pg. 36
Los cuatro de menor peso (PCFG3 al PCFG0) se usan segn la siguiente tabla:
PCFG3: PCFG0 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 AN7 RE2 AN6 RE1 AN5 RE0 AN4 RA5 AN3 RA3 AN2 RA2 AN1 RA1 AN0 RA0 VREF+ VREFCHAN/ Refs
A A D D D D D A D D D D D D D
A A D D D D D A D D D D D D D
A A D D D D D A A A A D D D D
A A A A D D D A A A A A D D D
A A A A A A D A A A A A A D D
A A A A A A D A A A A A A A A
VDD RA3 VDD RA3 VDD RA3 VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3
VSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2
8/0 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 1/2
Esto permite que todas las entradas sean analgicas o digitales o algunas combinaciones de analgicas y digitales. Tambin permite definir que valores se usarn como VREF+ y VREF-. Los dos bits de mayor peso de ADCON0 (ADCS1 y ADCS0) permiten seleccionar la fuente de reloj a utilizar. En general este parmetro no es crtico. Seleccionar los valores 01 10 permiten realizar conversiones rpidas y precisas. Los bits 3 .. 5 se corresponde con CHS0 .. CHS2. Con esas tres lneas se gobierna el MPX analgico, y por tanto la entrada sobre la que se quiere hacer la conversin. El bit de menos peso (ADON) permite conectar o desconectar el conversor. Tenerlo desconectado permite reducir el consumo del microcontrolador. Finalmente el bit 2 GO/ DONE permite lanzar el proceso de conversin poniendo esta lnea a 1, y comprobar si la conversin ha finalizado. Existen bsicamente dos maneras de detectar cuando ha finalizado. Por interrupciones o por sondeo (polling). Si se activan los bits de interrupcin correspondientes (ADIE, PIE y GIE y se pone a 0 ADIF), se producir una interrupcin cuando acabe la conversin en marcha, activando el ADIF. Por sondeo el mtodo es el siguiente: Activar el bit GO/ DONE y entrar en un bucle en el que se comprueba este mismo bit. Mientras valga 1 la conversin est en curso. Cuando pasa a 0 la conversin finaliz y el resultado se encuentra en los registros ADRESH y L.
Microcontroladores
Versin 1.5
04 oct. 07
pg. 37
Microcontrolador 16F876
El 16F876 contiene el mismo ncleo que el 16F877, pero dispone de 28 pines, lo cual supone eliminar algunos de los perifricos 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 perifricos, no existe el SPP (Slave Parallel Port) y el conversor A/D dispone de 5 entradas (frente a 8 del 16F877). Tambin se dispone de una entrada menos de alimentacin (un nico pin para VDD).
Microcontroladores
Versin 1.5
04 oct. 07
pg. 38
Microcontrolador 16F84
El 16F84 es un microcontrolador de la gama media al igual que el 16F877 pero que carece de varios de los perifricos de ste a cambio de ser un circuito ms econmico y ms pequeo. Carece de conversor A/D, y dispone de slo 11 lneas de entrada salida.
Pines en el 16F84