Download Arquitectura de Microcomputadoras
Document related concepts
no text concepts found
Transcript
Arquitectura de Microcomputadoras Arquitectura Comp JJVS/10 1 1 Plan de estudio Parte 1 1. Microcontroladores (8031). Hardware. Temporizador. Puerto Serie. Interrupciones. Arquitectura Comp JJVS/10 2 2 Plan de estudio Parte 2 1. Microcontroladores a. Definición. b. Arquitectura interna. d. Recursos. e. Uso del simulador MPLAB 2. Microcontroladores de 8 bits: Pics a. Selección b. Familia de pics c. Descripción general y aplicaciones Arquitectura Comp JJVS/10 3 3 Plan de estudio Parte 2, cont. 3. El PIC 16X8X a. Diferentes tipos y diferencias b. Pines externos c. El reloj d. Reset 4. Procesador a. Arquitectura b. Memoria de código c. Memoria de datos d. Registro de estado 5. Temporizadores, puertos y EEPROM a. Empleo de temporizadores b. Temporizador/contador c. El perro guardián (WDT) d. Puertos de E/S e. Configuración f. Memoria EEPROM de datos Arquitectura Comp JJVS/10 4 4 Plan de estudio Parte 2 cont. 6. Interrupciones, reset y recursos auxiliares a. Empleo de las interrupciones b. Causas de interrupción c. Reset d. Modo de bajo consumo 7. Circuitos útiles: a. Manejador de teclado b. Convertidores DAC y ADC c. Display de cristal líquido d. Comunicación serial 8. Proyecto final. Arquitectura Comp JJVS/10 5 5 Bibliografía THE 8051 MICROCONTROLLER MACKENZIE, I. SCOTT USA : PRENTICE-HALL , 1999 MICROCONTROLADORES "PIC" : DISEÑO PRACTICO DE APLICACIONES ANGULO USATEGUI, JOSE MARIA \ ANGULO MARTINEZ, IGNACIO. ESPAÑA : MCGRAW-HILL/INTERAMERICANA, 2002. PIC IN PRACTICE SMITH, DAVE W. INGLATERRA : NEWNES , 2003 DIGITAL SIGNAL PROCESSING AND MICROCONTROLLER GROVER, DALE \ DELLER JACK USA : PRENTICE-HALL PTR , 1999 DESIGN WITH MICROCONTROLLERS PEATMAN, JOHN B. USA : MCGRAW-HILL , 1988 Arquitectura Comp JJVS/10 6 MICROCONTROLADORES RESEÑA HISTÓRICA En 1971 Intel Corporation introduce el 8080 Poco después Motorola, RCA, MOS Technology introducen: 6800,1801,6502 y Z80 respectivamente. El microcontrolador 8748 es introducido por Intel en 1976. Intel en 1980 saca al mercado el 8051, el primer elemento en la familia de microcontroladores MCS-51TM . Arquitectura Comp JJVS/10 y Zilog 7 INTRODUCCIÓN Este circuito integrado está alcanzando sus 30 años de aparición. Es difícil imaginarse este mundo de herramientas y juguetes electrónicos sin él microprocesador. Se encuentra en aplicaciones como: hornos, lavadoras, relojes, termostatos, juguetes, vídeocaseteras, equipos de sonido, instrumentos musicales, fotocopiadoras, tableros de instrumentos, sistemas de ignición y una gran variedad de equipos industriales. Pequeña Reseña histórica En 1971 Intel Corporation introduce el 8080, el cual es considerado el primer microprocesador exitoso. Poco después Motorola, RCA, MOS Technology y Zilog, introducen al mercado elementos similares: 6800,1801,6502 y Z80 respectivamente. Un dispositivo similar al microprocesador es el microcontrolador, el 8748 es e1 primer elemento de la familia de microcontroladores MCS-48TM , que es introducido en 1976 por Intel. Sin embargo, la potencia, tamaño y complejidad de estos elementos avanzan en orden de magnitud con el anuncio de Intel en 1980 del 8051, el primer elemento en la familia de microcontroladores MCS-51TM . 7 SISTEMA DE COMPUTO Unidad central de procesamiento (CPU). El CPU administra todas las actividades del sistema y realiza todas las operaciones sobre los datos. En general realiza 2 operaciones : Trae las instrucciones de memoria de código y las ejecuta. Memoria. Existe una memoria de acceso aleatorio (RAM) y una de solo lectura (ROM). Los programas y los datos son almacenados en memoria. Estos elementos que son controlados directamente por el CPU, son circuitos integrados llamados RAM y ROM. Elementos periféricos (ENTRADA/SALIDA). Los elementos de entrada/salida o periféricos, dan la trayectoria para la comunicación del sistema de computo y el mundo real. Existen tres clases de estos elementos: Elementos de almacenamiento masivo, elementos de interfaz con el humano y elementos de control/supervisión. Arquitectura Comp JJVS/10 8 UNIDAD CENTRAL DE PROCESAMIENTO El CPU administra todas las actividades del sistema y realiza todas las operaciones sobre los datos. Principalmente realiza 2 operaciones : Trae las instrucciones de memoria de código y las ejecuta. Estas instrucciones usualmente son aritméticas, lógicas, movimientos de datos, saltos y están representadas por un conjunto de códigos binarios llamados conjunto de instrucciones. MEMORIA: RAM y ROM Los programas y los datos son almacenados en la memoria de código y de datos respectivamente. Estos circuitos integrados son direccionados por el CPU, son llamados RAM y ROM. Las computadoras tienen un disco duro de gran almacenamiento y una ROM pequeña. Los programas de usuario se almacenan en disco y después son cargados en RAM para ejecutarlos. 8 El CPU, la RAM, la ROM y los periféricos están interconectado a través del bus de direcciones, bus de datos y bus de control. Arquitectura Comp JJVS/10 9 Un bus de direcciones de 16-bits puede tener acceso a 2 ^16 =65,536 locaciones. El bus de datos lleva información del CPU a la memoria o entre el CPU y los elementos de Entrada/salida (I/O). Este bus de datos es bidireccional, mientras que el bus de direcciones es unidireccional. El bus de control es un conjunto de señales, donde cada una de estas tienen un papel específico en el control de la actividad del sistema. Estas señales se sincronizan a través del CPU para sincronizar los movimientos de información en los buses de datos y de direcciones. 9 MICROPROCESADORES VS. MICROCONTROLADORES Arquitectura de hardware. Un microprocesador es un circuito integrado. Un microcontrolador contiene un CPU y muchos de los otros circuitos que forman una computadora. Aplicaciones. Los microprocesadores son usados como el CPU de una computadora. Los micro-controladores, son usados en pequeños diseños con un mínimo de componentes realizando actividades orientadas al control. Características del conjunto de instrucciones. El conjunto de instrucciones del microprocesador es mucho más poderoso que el conjunto de instrucciones de un microcontrolador. Arquitectura Comp JJVS/10 10 Diferencias entre un microcontrolador y un microprocesador. Existen tres diferencias principales: arquitectura de hardware, aplicaciones y características del conjunto de instrucciones. Arquitectura de hardware. Un microprocesador es el circuito integrado que forma el CPU. Un microcontrolador contiene en un circuito integrado el CPU y muchos de los otros circuitos que forman un sistema completo de una microcomputadora, como: el CPU, RAM, ROM. interfaz serial, interfaz paralela, temporizadores, y circuitos para interrupciones estratificadas. Una característica importante del microcontrolador es la incorporación del sistema de interrupciones. Aplicaciones. Los microprocesadores comúnmente son usados como el CPU de las computadoras. Los microcontroladores, sin embargo son usados en pequeños diseños con un mínimo de componentes realizando actividades orientadas al control. Conjunto de instrucciones El conjunto de instrucciones del microprocesador son de procesado intensivo, implicando que tienen modos de direccionamiento potentes con alimentación de instrucciones para operar sobre grandes volúmenes de datos. Sus instrucciones operan sobre nibbles, bytes, palabras, o dobles palabras. Los modos de direccionamiento dan acceso a grandes arreglos de datos, usando apuntadores de dirección y offsets. Modos de auto-incremento y auto-decremento simplifican los pasos a través de arreglos sobre bytes, palabra, o dobles palabras. Instrucciones privilegiadas no pueden ejecutarse dentro del programa del usuario. El conjunto de instrucciones es mucho más poderoso en un microprocesador que un microcontrolador. 10 Arquitectura Comp JJVS/10 11 DIAGRAMA A BLOQUES DE UNA COMPUTADORA Por otra parte los microcontroladores tienen un conjunto de instrucciones para alimentar el control de entradas y salidas. Estos tiene instrucciones que activan o desactivan bits individuales, entre otras operaciones relacionadas con bits. Estas características generalmente no se encuentran en microprocesadores, los cuales usualmente son diseñados para operar sobre bytes o unidades grandes de datos. Los microcontroladores incluyen circuitos e instrucciones para operaciones de entrada/salida, eventos temporizados y habilitar o deshabilitar interrupciones causadas por pulsos externos. Los microprocesadores generalmente requieren circuitos externos adicionales para realizar operaciones similares. Todas las ventajas del microcontrolador en un solo chip tiene grandes ventajas, sin embargo, las instrucciones deben ser extremadamente compactas generalmente implementadas en un simple byte. 11 HARDWARE LA FAMILIA MCS-51 Características del microcontrolador 8051 : 4K bytes de ROM 128 bytes de RAM 4 puertos de entrada/salida (E/S) de 8 bits 2 temporizadores de 16 bits Interfaz serial 64K de espacio de memoria para código externo 64K de espacio de memoria para datos externos Procesador que permite realizar operaciones lógicas 210 lugares que soportan el modo de bit 4µs para multiplicar/dividir. Arquitectura Comp JJVS/10 12 La familia MCS-51 es una familia de circuitos integrados, fabricados y comercializados por Intel Corporation. El circuito que distingue a esta familia es el 8051, el primer elemento ofrecido comercialmente. Sus características principales se indican en la diapositiva. 12 DIAGRAMAABLOQUESDEL8051 Arquitectura Comp JJVS/10 13 Existen una diversidad de dispositivos que componen a esta familia. A continuación se hace una comparación de los principales microcontroladores de la familia MCS51. MICROCONTROLADOR MEMORIA DE CODIGO MEMORIA DE DATOS TIMERS 8051 4K ROM 128 bytes 2 128 bytes 2 8031 0K 8751 4K EEPROM 128 bytes 2 8052 8K ROM 256 bytes 3 8032 0K 256 bytes 3 8752 8K EPROM 256 bytes 3 13 TERMINALES DEL 8051 Micro 8051 19 30pF X1 18 X2 12MHz 29 30pF ALE/P 31 EA/VP 9 P3.0 17 16 15 14 12 13 11 10 39 38 37 36 35 34 33 32 PSEN 30 P3.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 RESET RD WR T1 T0 INT0 INT1 TXD RXD Arquitectura Comp JJVS/10 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 AD7-AD0 21 22 23 24 25 26 27 28 A8-A15 14 Terminales. 32 de las 40 terminales del 8051 funcionan como puertos de Entrada/Salida (E/S). Sin embargo 24 de estas terminales tienen un doble propósito. Además de funcionar como terminales de E/S, también funcionan como líneas de control o como parte del bus (de direcciones o datos). Los diseños requieren un mínimo de memoria externa u otros componentes externos para lo cual se emplean estas líneas. Cada puerto puede ser tratado de forma individual en la conexión de elementos paralelos como: impresoras, desplegadores de cristal líquido, convertidores digitalanalógicos, etc. O bien cada terminal del puerto puede operar como un bit individual en interruptores, diodos emisores de luz (LED), transistores, motores, bocinas, etc. Puerto 0. Este puerto es de doble propósito. Para microcontroladores con ROM interna sirve como E/S, y en aquellos que necesitan memoria externa se transforma en un bus multiplexado de direcciones y de datos. Puerto 1. Este es un puerto exclusivo para E/S. Puerto 2. Este puerto es de doble propósito, sirve como E/S de propósito general o como el byte más alto del bus de direcciones, para microcontroladores que necesitan memoria externa de datos o de código. 14 ORGANIZACIÓN DE LA MEMORIA Arquitectura Comp JJVS/10 15 Muchos microprocesadores utilizan un espacio de memoria compartida para datos y programas. Esto es razonable ya que los programas usualmente son almacenados en discos y después cargados en RAM para ejecutarlos, así los datos y programas residen en esta memoria. El 8051 utiliza un espacio de memoria separada de código y datos, las cuales se pueden expandir usando componentes externos a un máximo de 64K. También cuenta internamente con una memoria RAM pequeña, que en la siguiente página se describe. 15 Memoria de datos interna Arquitectura Comp JJVS/10 16 La RAM interna contiene registros de almacenamiento de propósito general, de almacenamiento por bit, bancos de registros y registros de funciones espaciales. Existen dos características importantes, los registros y los puertos E/S están mapeados en memoria y se puede acceder a estos como si se tratará de otra localidad de memoria. La pila reside dentro de la RAM interna, a diferencia de los microprocesadores que se ubica en la RAM externa. En la figura se presentan detalles de la memoria de datos. Como se muestra el espacio de memoria está dividido entre el banco de registros (00H-1FH), direcciones accesibles por bit (20H-2EF), registros de propósito general (30H-7FH) y registros de funciones especiales (80H-FFH). Las localidades de propósito general pueden ser accesadas libremente usando modos de direccionamiento directo. Existen 128 localidades de propósito general, 32 son bancos de registros, 21 registros de propósito general y 128 localidades direccionables por bit. Del lado derecho de la figura se puede observar que existen registros con nombres específicos, estos tienen la finalidad de activar y configurar algunas características del microcontrolador como: interrupciones, temporizadores y comunicación serial. 16 Ejemplo 1 /* Ejemplo No. 1 Programa que genera una señal de reloj en el pin 0 del puerto 2 */ #include <c8051f200.h> especiales // Declaración del registro de funciones sbit LED = P2^4; void delay(unsigned int tiempo) { unsigned int i=0; void delay(unsigned int); void main() { for (i=0; i<tiempo; i++); } // deshabilita el watchdog timer WDTCN = 0xde; WDTCN = 0xad; PRT2CF |= 0xFF; // habilita el puerto 2 como salidas while(1) { delay(100); LED=!LED; } } Arquitectura Comp JJVS/10 17 17 Memoria externa Arquitectura Comp JJVS/10 18 Es importante que los microprocesadores tengan capacidades de expansión más allá de sus propios recursos para permitir un desarrollo potencial de diseño. La arquitectura MCS-51 permite incrementar las memoria de código y de datos hasta 64K. Interfaces periféricas pueden agregarse para expandir las capacidades de entrada y salida usando memoria mapeada de E/S. En la siguiente figura se presenta un arreglo no-multiplexado que usa 16 líneas de dirección y 8 líneas de datos para un total de 24 terminales. El arreglo multiplexado combina el bus de datos y el byte bajo del bus de direcciones. Con otras 8 líneas para el byte alto del bus de direcciones se necesitan un total de 16 terminales. El arreglo multiplexado trabaja de la siguiente forma: Durante la primera mitad de cada ciclo de memoria, el byte bajo de las direcciones se proporciona en el PUERTO 0 y es retenido usando ALE. Un 74HC373 (o equivalente) mantiene estable el byte bajo de las direcciones durante el ciclo de memoria. Durante la segunda mitad del ciclo de memoria el puerto 0 se usa como bus de datos, estos se leen o escriben dependiendo de la operación. 18 Conectando la memoria de código externa. Arquitectura Comp JJVS/10 19 La memoria de código externa es una memoria de solo lectura activada por la señal (PSEN). Las conexiones para la memoria externa EPROM se muestra en la figura. Un ciclo de máquina del 8051 dura 12 periodos del oscilador. Si el oscilador es un cristal de 12 MHz un ciclo de máquina tienen una duración de 1 µs. Durante un ciclo de máquina ALE pulsa 2 veces y se leen dos bytes del programa de memoria (si la operación es de un byte el segundo byte es descartado). El tiempo para esta operación se conoce como opcode fetch, que podría traducirse como traer el código de la operación. 19 Diagrama de tiempos para lectura memoria de código Pulse para añadir texto Arquitectura Comp JJVS/10 20 20 Conectando una memoria RAM de 1K Arquitectura Comp JJVS/10 21 Accesando la memoria de datos externa Esta memoria de lectura/escritura es activada por RD y WR (las funciones del pin alterno para P3.7 y P3.6). En la figura se muestran las conexiones necesarias para conectar una memoria RAM. 21 Sobreponiendo memoria de código con la memoria de datos D 0 -D 7 P u e rt o 0 EA D Q A 0 -A 7 RAM (1 K b y te ) 8051 A LE P 2 .0 P 2 .1 G WR RD PSEN A8 A9 W O E C S 14 a Sobreponiendo la memoria de código y la de datos Muchos microprocesadores utilizan un espacio de memoria compartida para datos y programas, para emular las acciones de la computadora. Esto es razonable ya que los programas podrían ser almacenados en la memoria RAM y después ejecutarlos. Un truco común es sobreponer el espacio de código externo y el de memoria de datos. Ya que PSEN se usa para leer la memoria de código y RD para leer memoria de datos, una RAM puede ocupar espacio de memoria de datos y de código conectando la línea OE a la AND lógica de PSEN y RD, como puede verificarse en la figura. 22 Decodificación de direcciones 14 b Decodificación de direcciones Si se conectan múltiples EPROMs y/o RAMs al 8051, se requiere una decodificación de direcciones. Típicamente se utiliza un decodificador como el 74HC138 con sus salidas conectadas a las entradas de activación (CS, Chip Select) de las memorias. 23 Modos de direccionamiento Direccionamiento directo Direccionamiento indirecto Direccionamiento por registro Direccionamiento implícito Direccionamiento inmediato Direccionamiento indexado Arquitectura Comp JJVS/10 24 24 Direccionamiento directo El operando se especifica en la instrucción mediante un campo de dirección de 8 bits. Sólo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden direccionar de esta forma. Este modo de direccionamiento permite el acceso de fácil y rápido a las zonas de las memoria anteriormente indicadas. ADD A,3BH Esta instrucción suma (ADD) al contenido del acumulador el contenido de la posición de memoria 3BH: A (A) + ([3B]). MOV P1, A Instrucción Código de Operación MOV direcc,A 0xF5 Byte 2º Byte 3º Bytes direcc 2 Arquitectura Comp JJVS/10 Ciclos Flags 1 - 25 25 Direccionamiento indirecto En este modo de direccionamiento, la dirección del operando está contenida en un registro, cuyo nombre se especifica en la instrucción precedido por el símbolo @. Permite acceder tanto a la memoria de datos interna (128/256 bytes para el 8051/52) como a la memoria de datos externa. Para el direccionamiento de áreas de memoria (tanto internas como externas) de tamaño no superior a 256 bytes, se puede hacer uso de los registros R0 y R1 del banco de registros seleccionado. Si el área de memoria posee un tamaño superior, sólo puede utilizarse el registro DPTR. Este modo de direccionamiento es especialmente útil para acceder a los 128 bytes altos de la memoria de datos interna (8052) y a la memoria de datos externa. Arquitectura Comp JJVS/10 26 26 Direccionamiento indirecto Ejemplos: ADD A,@R0 Si (R0) = 3BH, la operación realizada por esta instrucción será la misma del ejemplo anterior: A (A) + ([3B]). MOVX @DPTR,A Si (DPTR) = 4C2BH, esta instrucción carga el contenido del acumulador en la posición 4C2BH de la memoria de datos externa:[4C2B] (A). Arquitectura Comp JJVS/10 27 27 Direccionamiento por registro Como ya se ha estudiado, los microcontroladores 8051/52 poseen cuatro bancos de registros (que pueden ser seleccionados mediante los bits 3 y 4 del registro PSW) cada uno de los cuales está compuesto por 8 registros (R0 - R7). Cuando se usa direccionamiento por registro, en el propio código de operación de la instrucción se especifica el registro del banco activo con que se opera mediante un campo de tres bits. Ejemplo: MOV Rn,A Carga en el registro Rn el contenido del acumulador: Rn (A). Formato: 1 1 1 1 1 r r r Dependiendo de qué registro sea Rn, el código de instrucción tomará distintos valores. Así, MOV R0,A se codificará como 11111000B = F8H, mientras que MOV R6,A se codificará como 11111110B = FEH. Este direccionamiento ocupa muy poca memoria de programa y permite acceder de manera rápida a los datos más frecuentemente utilizados. Arquitectura Comp JJVS/10 28 28 Direccionamiento implícito Algunas instrucciones operan siempre sobre un mismo registro (acumulador, apuntador de datos, etc.) el cual, en consecuencia, es seleccionado de forma implícita por el propio código de operación, no siendo necesario añadir un byte de dirección para referenciarlo. Las instrucciones con este modo de direccionamiento son muy rápidas y compactas, ocupando el mínimo espacio en la memoria de programa. Ejemplos: INC A Incrementa el contenido del acumulador: A (A) + 1. INC DPTR Incrementa puntero de datos: DPTR (DPTR) + 1. Arquitectura Comp JJVS/10 29 29 Direccionamiento inmediato En este modo de direccionamiento, el operando va incluido en la propia instrucción y se identifica precediéndolo por el símbolo #. Dicho operando tiene una longitud de 8 bits, excepto en las instrucciones que afectan al DPTR, en las cuales posee un tamaño de 16 bits. Este modo se usa en los casos en que el operando es una constante. Ejemplos: MOV A,#255 Carga en el acumulador el número decimal 255. MOV DPTR,#36CAH Carga en el registro DPTR el valor 36CAH. Arquitectura Comp JJVS/10 30 30 Direccionamiento indexado Este direccionamiento sólo es aplicable sobre la memoria de programas y para operaciones de lectura. Se utiliza para la lectura de tablas de valores constantes alojadas en esta zona de la memoria. La posición de memoria a acceder se especifica mediante la dirección de la base de la tabla (almacenada en un registro de 16 bits: DPTR o PC) y un desplazamiento u offset (almacenado en el acumulador). Es decir, la dirección a la que se accede se obtiene mediante la suma de los contenidos del acumulador y del puntero base (DPTR o PC). Las instrucciones MOVC A,@A+DPTR y MOVC A,@A+PC utilizan el modo de direccionamiento indexado. Otro tipo de direccionamiento indexado es el utilizado en la instrucción JMP @A+DPTR, donde la dirección de salto se obtiene sumado los contenidos de los registros A y DPTR. Arquitectura Comp JJVS/10 31 31 Conjunto de instrucciones El set de instrucciones del 8051/52 se puede dividir en las siguientes categorías: Instrucciones aritméticas. Instrucciones lógicas. Instrucciones de transferencia de datos. Instrucciones booleanas. Instrucciones de salto. Arquitectura Comp JJVS/10 32 32 Instrucciones aritméticas Arquitectura Comp JJVS/10 33 33 Instrucciones lógicas Pulse para añadir texto Arquitectura Comp JJVS/10 34 34 Instrucciones de transferencia de datos Arquitectura Comp JJVS/10 35 35 Instrucciones booleanas Arquitectura Comp JJVS/10 36 36 Instrucciones de salto Arquitectura Comp JJVS/10 37 37 OPERACIÓN DEL TEMPORIZADOR Introducción. El temporizador es una serie de divisiones por dos de flip-flops que reciben una señal de entrada de reloj. La señal de reloj se aplica al primer flipflop que divide la frecuencia del reloj por 2. Ya que cada etapa sucesiva divide la señal de reloj por 2, un temporizador con n etapas divide la frecuencia del reloj de entrada en 2n. La salida de la última etapa genera una señal de sobreflujo (o bandera) en el último flip-flop, la cual puede ser leída por software o generar una interrupción. Arquitectura Comp JJVS/10 38 En este capítulo analizaremos el temporizador del chip 8051. Empezamos con un punto de vista simplificado del uso más común de temporizadores en microcontroladores. 38 +5V D D Q R e lo j Q D Q Q 0 D Q Q 0 F lip - f lo p b a n d e ra Q Q 0 0 M SB LSB R e lo j Q 0 (L S B ) Q 1 Q 2 (M S B ) C u e n ta 0 1 2 3 4 5 6 7 0 B a n d e ra Arquitectura Comp JJVS/10 39 La operación de un temporizador simple de 3 bits se ilustra en la siguiente figura, cada etapa compuesta de un flip-flop tipo D de flaco negativo, funciona como un divisor por 2.El flip-flop bandera es simplemente un latch tipo D que cambia con el último estado del temporizador. Es evidente en el diagrama de tiempos de la figura, que la primera etapa (Q0) se encuentra a ½ de la frecuencia de reloj, la segunda a ¼, etc. La cuenta se muestra en decimal y podemos verificarla fácilmente examinando el estado del tercer flip-flop. 39 El temporizador se ocupa de las aplicaciones orientadas al control. El 8031 cuenta con 2 temporizadores de 16-bits cada uno con 4 modos de operación. En general es usado para: a) temporizar intervalos b) contador de eventos c) generar el baud-rate para el puerto serial. Arquitectura Comp JJVS/10 40 Un temporizador de 16 bits permite dividir la frecuencia de reloj por 216 = 65,536 veces. Si tenemos un cristal de 12MHz la frecuencia mínima que se puede conseguir es de 1MHz/65536=15.26Hz con un tiempo mínimo de 65.53ms. Generalmente este tiempo no es suficiente para la mayoría de las aplicaciones que requieren del temporizador, sin embargo, una opción es aumentar este tiempo con ciclos de software. TEMPORIZAR INTERVALOS En aplicaciones de medición de tiempo, el temporizador se programa para que se genere un sobre-flujo a intervalos regulares y active la bandera del mismo nombre. Esta bandera se usa para temporizar una acción del programa, como revisar el estado de terminales de entrada o mandar datos a las salidas. En otras aplicaciones se puede medir el lapso de tiempo transcurrido entre dos condiciones (pe. medición del ancho de pulso). CONTADOR DE EVENTOS Se usa para determinar el número de veces que ocurre un evento determinado, o para medir el tiempo entre dos eventos. GENERAR EL BAUD-RATE PARA EL PUERTO SERIAL Se utiliza para seleccionar la velocidad de una comunicación serial. 40 Los temporizadores del 8051 pueden ser utilizados usando 6 registros de funciones especiales. TIMER SFR TCON TMOD TL0 TL1 TH0 TH1 PROPOSITO DIRECCION DIRECCIONABLE POR BIT Control 88H Si Modo 89H No Timer 0, byte bajo 8AH No Timer 1, byte bajo 8BH No Timer 0, byte alto 8CH No Timer 1, byte alto 8DH No Arquitectura Comp JJVS/10 41 En la tabla se muestran los registros necesarios para poner en funcionamiento al temporizador. En el registro TCON se encuentran los bits de activación y las banderas de sobre flujo, en TMOD se selecciona el modo del mismo, en los registros TLx (donde x puede ser 0 ó 1) se encuentra los ocho bits menos significativos del temporizador y en TLx se encuentran los ocho bits más significativos. 41 Registro de control de temporizador (TCON) El registro TCON contiene bits de control y de niveles para el temporizador 1 y 0. BIT NOMBRE DIRECCION TCON.7 TF1 8FH DESCRIPCION Bandera de sobreflujo del timer 1.Activada por hardware cuando existe sobreflujo. * TCON.6 TR1 8EH Bit de activación del Timer 1. Cuando es 1 inicia el timer y si es 0 para el timer. TCON.5 TF0 8DH Timer 0, bandera de sobreflujo TCON.4 TR0 8CH Timer 0, bit de activación TCON.3 IE1 8BH Bandera de la interrupción externa 1, disparada por flanco o por nivel. Activada por hardware cuando un flanco de bajada es detectado en INT1. * TCON.2 IT1 8AH Selección del modo de la interrupción: 1 por flanco de caída y 0 por nivel. TCON.1 IE0 89H Interrupción externa 0 disparada por flanco TCON.0 IT0 88H Interrupción externa 0 disparada por nivel Arquitectura Comp JJVS/10 42 Los 4 bits superiores en TCON se usan para activar o desactivar los temporizadores (TR0, TR1), o para señalar un sobre-flujo en un temporizador (TF0, TF1). Los 4 bits bajos en TCON no se usan en los temporizadores. Estos se emplean para activar una interrupción externa y para seleccionar el tipo de activación. 42 Registro del modo del temporizador (TMOD) BIT NOMBRE TIMER DESCRIPCION 7 GATE 1 Bit de compuerta. Cuando esta activa (1), el timer únicamente actúa mientras INT1 está en alto, si es cero actúa el timer interno. 6 C/T 1 Contador/bit de selección de timer 1=contador de eventos 0=temporizador de intervalos 5 M1 1 Bit 1 del modo 4 M0 1 Bit 0 del modo 3 GATE 0 Timer 0, bit compuerta 2 C/T 0 Timer 0, contador/bit de selección de timer. 1 M1 0 Timer 0, bit M1 0 M0 0 Timer 0, bit M0 M1 0 0 1 1 M0 0 1 0 1 MODO 0 1 2 3 DESCRIPCIÓN Modo timer de 13 bits Modo timer de 16 bits Modo auto-recargable de 8 bits Modo split timer: Timer 0: TL0 es un timer de 8 bits controlado por los bits de timer modo 0; TH0 igual pero está controlado por los bits de timer modo 1 Timer 1: detenido. Arquitectura Comp JJVS/10 43 El modo del temporizador y la bandera de sobre-flujo. En el registro TMOD se encuentran los bits GATE, C/T, M1 y M0, repetidos para dos temporizadores. A continuación se describen los bits: El bit de compuerta GATE sirve para activar al temporizador por interrupciones, ver página 24. El bit C/T sirve para seleccionar al temporizador como contador de eventos (sí se activa C/T=1) o como un temporizador de intervalos (C/T=0). Los bits M1 y M0 sirven para seleccionar el modo del temporizador. A continuación son descritos con detalle. 43 Reloj TLx THx (5 bits) (8 bits) TFx Modo 0 Reloj TLx THx (8 bits) (8 bits) TFx Modo 1 Reloj TLx (8 bits) TFx THx (8 bits) Modo 2 Arquitectura Comp JJVS/10 44 Modo 0 Es un temporizador de 13 bits, pues los 3 bits superiores de TLx no se usan. Modo 1 Es un temporizador de 16 bits. Un sobre-flujo en este, ocurre en la transición FFFFH a 0000H y entonces se activa la bandera de sobre-flujo del temporizador. La bandera de sobre-flujo es el bit TFx en TCON el cual se lee o se escribe por software. El LSB divide la frecuencia de entrada del reloj por 2, mientras que el MSB la divide por 65,536. Modo 2 Es un modo auto-recargable de 8 bits. El byte bajo (TLx) opera como un temporizador de 8 bits y THx mantiene el valor de recarga. Una vez que TMOD y THx son inicializados, el sobre flujo del timer ocurrirá en intervalos específicos de tiempo. 44 Reloj Reloj TL1 TH1 (8 bits) (8 bits) TL0 TF0 (8 bits) Bandera de sobreflujo Fosc/12 TH0 (8 bits) Modo 3 Arquitectura Comp JJVS/10 TF1 Bandera de sobreflujo 45 Modo 3 TL0 y TH0 actúan como dos timers de ocho bits separados, con sobre-flujo en los bits TF0 y TF1. El temporizador 1 se detiene en el modo 3 pero puede ser iniciado nuevamente, cambiando a uno de los otros tres modos. Este modo proporciona un timer extra de 8 bits. 45 Fuentes de Reloj Hay dos posibles fuentes de reloj para los temporizadores. Estas son seleccionadas con el bit contador/temporizador (C/T) en TMOD cuando se inicia el temporizador. Una fuente de reloj es utilizada para temporizar intervalos y la otra para contabilizar eventos. Oscilador Cristal /12 del circuito Terminal del T0 ó T1 Al reloj del temporizador 0=Up (medición de intervalos) 1=Down (contador de eventos) C/T Arquitectura Comp JJVS/10 46 Temporizador de intervalos. Con C/T=0 seleccionamos una operación continua del temporizador, el cual es controlado desde el oscilador del chip. Se adiciona una división por 12 etapas para reducir la frecuencia del oscilador a un valor razonable en la mayoría de las aplicaciones. Cuando seleccionamos una operación continua del temporizador, estamos utilizando el temporizador para medir el tiempo entre eventos. Los registros del temporizador (TLx/ THx) se incrementan a una razón de 1/12 de la frecuencia del oscilador; así un cristal de 12MHz puede dar hasta 1MHz.Los sobre-flujos del temporizador ocurren después de un número fijo de pulsos, dependiendo del valor previamente cargado dentro de los registros TLx/THx. Contador de eventos. Si C/T=1, el temporizador se controla por medio de una fuente externa. En muchas aplicaciones esta fuente externa alimenta el temporizador con un pulso cada vez que ocurre un evento. El número de eventos se determina leyendo por software los registros del temporizador TLx/THx, puesto que los valores en estos registros se incrementan por cada evento. La fuente de reloj externa viene de las terminales de funciones alternas del puerto 3, P3.4 y P3.5. En estas aplicaciones los registros del temporizador se incrementan respondiendo a transiciones de 1 a 0, de la entrada externa, Tx. Puesto que esto toma dos ciclos de máquina (2us) la máxima frecuencia externa es 500kHz (Suponiendo una operación de 12MHz). 46 12MHz Oscilador 0=Up ¸12 en 0=Up 1=Down 1=Down chip TL1 T1 TH1 TF1 16 bits (P3.5) C/T TR1 and GATE or INT1 Temporizador 1 en modo de operación 1 (P3.3) Arquitectura Comp JJVS/10 47 Iniciando, deteniendo y controlando los temporizadores. El método más simple para iniciar o detener los temporizadores es con el bit de inicialización TRx, en TCON. TRx se limpia después de reiniciar el sistema y los temporizadores quedan desactivados. TRx se activa por software para iniciar el temporizador. Por ejemplo, el temporizador 0 se inicia con: SETB TR0 y se detienen con: CLR TR0 47 Características de la familia mejorada del 8051 Arquitectura Comp JJVS/10 48 48 Ejercicio: Determine la función de este programa. #include <c8051f200.h> // Declaración del registro de funciones especiales #define CERO 0x11 #define UNO 0xD7 #define DOS 0x32 #define TRES 0x92 #define CUATRO 0xD4 #define CINCO 0x98 #define SEIS 0x18 #define SIETE 0xD3 #define OCHO 0x10 #define NUEVE 0x90 #define NADA 0xFF sbit ENT0 = P2^0; sbit ENT1 = P2^1; sbit ENT2 = P2^2; sbit ENT3 = P2^3; void main() { unsigned char p3in=0, aux_bit=0; switch (p3in) { case 0x00 : P1=CERO; break; case 0x01 : P1=UNO; break; case 0x02 : P1=DOS; break; case 0x03 : P1=TRES; break; case 0x04 : P1=CUATRO; break; case 0x05 : P1=CINCO; break; case 0x06 : P1=SEIS; break; case 0x07 : P1=SIETE; break; case 0x08 : P1=OCHO; break; case 0x09 : P1=NUEVE; break; default : P1=CERO; break; } } while (1) { p3in=ENT0; aux_bit=ENT1; p3in=p3in+aux_bit*2; aux_bit=ENT2; p3in=p3in+aux_bit*4; } aux_bit=ENT3; p3in=p3in+aux_bit*8; Arquitectura Comp JJVS/10 49 49 Temporizador (1) #include <reg51.h> void main (void) { P10=0; TMOD=0x10; /* timer ? en modo ?, :)*/ while (1) { TH1=0xFE; TL1=0x0C; TR1=1; while(TF1!=1); TF1=0; P10=!P10; } } Arquitectura Comp JJVS/10 50 50 #include <reg51.h> Temporizador (2) void main (void) { TMOD=0x02; TH0=0xCE; TL0=0xCE; EA=1; ET0=1; TR0=1; while(1); } void tmr0 (void) interrupt 1 using 1 { P10=!P10; } Arquitectura Comp JJVS/10 51 51 INTERRUPCIONES INTRODUCCIÓN Una interrupción es el acontecimiento de una condición (o un evento) que causa una suspensión temporal de un programa mientras la condición es atendida por una subrutina; éstas permiten que el sistema responda en forma asíncrona a un evento mientras otro programa se está ejecutando. ORGANIZACIÓN DE INTERRUPCIONES DEL 8051 Hay 5 fuentes de interrupciones en el 8051: dos interrupciones externas, dos interrupciones de timers y una interrupción del puerto serial. Si suceden dos o más interrupciones simultaneas, o una interrupción ocurre mientras otra interrupción esta siendo atendida, hay dos formas de programar las interrupciones : con secuencia por omisión y con un esquema de prioridades Arquitectura Comp JJVS/10 52 de dos niveles. Cuando ocurre una interrupción, se suspende temporalmente la ejecución del programa principal y brinca a la rutina de servicio de interrupción (ISR). Dentro de esta rutina se realiza la tarea de atención a la interrupción y al concluirse el programa principal continúa donde se quedó. 52 ACTIVANDO Y DESACTIVANDO INTERRUPCIONES Cada una de las 5 fuentes de interrupciones es activada o desactivada a través del registro de funciones especiales (IE), que se muestra en la siguiente tabla: BIT SIMBOLO IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 EA ET2 ES ET1 EX1 ET0 EX0 BIT DE DIRECCIONES AFH AEH ADH ACH ABH AAH A9H A8H DESCRIPCIÓN 1=HABILITADO, 0=DESHABILITADO. Habilitación/deshablitación global. No definida Habilita interrupción Timer 2 (8052) Habilita interrupción del puerto serial Habilita interrupción Timer 1 Habilita interrupción externa 1 Habilita interrupción Timer0 Habilita interrupción externa 0 Dos bits deben ser activados para iniciar cualquier interrupción: El bit de habilitación individual y el bit de habilitación global. Arquitectura Comp JJVS/10 53 Este registro es direccionable por bit. 53 PRIORIDAD DE INTERRUPCIONES Cada interrupción es programada individualmente en uno o dos niveles de prioridades a través del registro de funciones especiales (IP), que se muestra en la siguiente tabla. BIT SIMBOLO BIT DE DIRECCIONES IP.7 IP.6 IP.5 PT2 . 0BDH IP.4 PS 0BCH IP.3 IP.2 IP.1 IP.0 PT1 PX1 PT0 PX0 0BBH 0BAH 0B9H OB8H DESCRIPCIÓN 1=nivel alto, 0=nivel bajo. No definido No definido Prioridad para interrupción Timer 2 (8052) Prioridad para interrupción del puerto serie Prioridad para interrupción Timer 1 Prioridad para interrupción externa1 Prioridad para interrupción Timer 0 Prioridad para interrupción externa 0 Arquitectura Comp JJVS/10 54 La idea de prioridades permite al servicio de atención a interrupciones (ISR) realizar una nueva interrupción sí ésta es de más alta prioridad que la interrupción que se encuentre activa. El programa principal siempre puede ser interrumpido, sin importar la prioridad de la interrupción. Si dos interrupciones de diferentes prioridades ocurren simultáneamente, la interrupción con prioridad más alta es la que se atiende primero. 54 SECUENCIA POR OMISIÓN. Si ocurren dos interrupciones de la misma prioridad, una secuencia por omisión determina cual se utiliza primero. La secuencia por omisión es externa 0, Timer 0, externa 1, Timer 1, puerto serial, Timer 2. BANDERAS DE INTERRUPCIÓN El estado de todas las interrupciones está disponible a través del SFR. INTERRUPCION BANDERA Externa 0 Externa 1 Timer 1 Timer0 Puerto serie Puerto serie IE0 IE1 TF1 TF0 TI RI REGISTROS SFR Y POSICION DE BIT TCON.1 TCON.3 TCON.7 TCON.5 SCON.1 SCON.0 Arquitectura Comp JJVS/10 55 El estado de todas las fuentes de interrupciones está disponible a través de las banderas en los registros mostrados en la tabla. Si no se activan las interrupciones, en el programa pueden emplearse las banderas de interrupción. 55 ESTRUCTURA DE INTERRUPCIONES DEL 8031 Arquitectura Comp JJVS/10 56 En esta figura es posible observar un esquema simplificado de las interrupciones dentro del microcontrolador 8031. Las interrupciones externas INT0 e INT1 pueden activarse por flanco o por nivel (con el bit IT0 e IT1, respectivamente). Las banderas que indican una interrupción de este tipo son IE0 y IE1. En la figura se puede observar la secuencia por omisión y el registro de selección de prioridades. 56 INTERRUPCIONES DEL PUERTO SERIAL Una interrupción de transmisión ocurre cuando un carácter(letra o número) fue recibido en el buffer serie (SBUF). Una interrupción de recepción ocurre cuando un carácter se ha recibido completamente y está esperando ser leído del SBUF. INTERRUPCIONES EXTERNAS Las interrupciones externas ocurren como resultado de un nivel bajo (cero) o por un flanco de bajada en las terminales INT0 o INT1 del 8051. Las banderas que generan estas interrupciones son los bits IE0 e IE1 en TCON. La selección del modo de la interrupción, activada por nivel bajo o activada por flanco de bajada se programa a través de los bits IT0 e IT1 en TCON. Arquitectura Comp JJVS/10 57 La interrupción serial ocurre cuando las banderas TI o RI se activan en alto. La bandera que causa una interrupción en el puerto serie no es limpiada por hardware cundo el CPU brinca al vector de interrupción, la razón es que hay 2 fuentes de interrupción del puerto serie, TI o RI. La fuente de la interrupción debe ser determinada en el servicio de atención a interrupciones (ISR) y la bandera de interrupción debe ser borrada por software. Las interrupciones externas ocurren como resultado de un nivel bajo o flanco negativo en los pines INT0 o INT1 del 8051. Las banderas que generan actualmente estas interrupciones son los bits IE0 e IE1 en TCON. Cuando una interrupción externa se genera, la bandera que generó esta se borra por hardware cuando se brinca al ISR únicamente si la interrupción fue activada por transición. Si la interrupción fue activada por nivel, entonces la fuente externa solicitada controla el nivel de la bandera, aun más que el hardware del chip. La selección del interrupción activada por nivel bajo o activada por flanco negativo se programa a través de los bits IT0 e IT1 en TCON. Los pines de interrupciones externas son probados una vez cada ciclo de máquina, una entrada puede ser retenida al menos por 12 periodos de oscilación para asegurar un muestreo apropiado. 57 Ejemplo: interrupciones /* Ejemplo No. 6 */ /* Programa que utiliza las interrupciones */ #include <c8051f200.h> // Declaración del registro de funciones especiales #define CERO 0x11 #define UNO 0xD7 #define DOS 0x32 #define TRES 0x92 #define CUATRO 0xD4 #define CINCO 0x98 #define SEIS 0x18 #define SIETE 0xD3 #define OCHO 0x10 #define NUEVE 0x90 #define NADA 0xFF void delay(unsigned int); void interrupcion(); void main () { unsigned char i=0; WDTCN = 0xde; WDTCN = 0xad; PRT2CF |= 0xFF; EX0 = 1; IT0 = 1; EA= 1; while (1) { delay(30000); switch (i) { case 0 : P1=CERO; break; case 1 : P1=UNO; break; case 2 : P1=DOS; break; case 3 : P1=TRES; break; case 4 : P1=CUATRO;break; case 5 : P1=CINCO; break; case 6 : P1=SEIS; break; case 7 : P1=SIETE; break; case 8 : P1=OCHO; break; case 9 : P1=NUEVE; break; } delay(30000); void interrupcion() interrupt 0 using 0 { P1=0xFE; } void delay(unsigned int tiempo) { unsigned int k, j; for (k=0; k<tiempo; k++); for (j=0; j<2000; j++); } if (i<9) i++; else i=0; } } Arquitectura Comp JJVS/10 58 58 PUERTO SERIE INTRODUCCION El 8051 incluye un puerto serial que puede operar en algunos modos sobre un amplio rango de frecuencias. La función esencial del puerto serial es realizar la conversión paralelo-serie para salida de datos y serie-paralelo para entrada de datos. El hardware de acceso al puerto serial es a través de los pines TXD y RXD. REGISTROS DE CONTROL DEL PUERTO SERIAL Los registros de control del puerto serial (SCON) contienen bits de estado y bits de control. Los bits de control inician el modo de operación para el puerto y los de estado indican el final de una transmisión o recepción de un carácter. Los bits de estado son probado en software o programados para causar una interrupción. La frecuencia de operación del puerto serial o baud rate, puede ser fija o variable. Arquitectura Comp JJVS/10 59 El puerto serial presenta una operación full duplex (transmisión y recepción simultánea) y receive buffering, permitiendo recibir y mantener un carácter en un buffer mientras un segundo carácter es recibido. El buffer del puerto serial (SBUF) en la dirección 99H son realmente 2 buffers. Escribiendo a SBUF cargamos un dato para ser transmitido y leyendo SBUF se obtiene el dato recibido. 59 BIT SCON.7 SCON.6 SCON.5 SIMBOLO SM0 SM1 SM2 SCON.4 REN SCON.3 TB8 SCON.2 SCON.1 RB8 TI SCON.0 RI DIRECCION DESCRIPCION 9FH Bit 0 del modo del puerto serial 9EH Bit 1 del modo del puerto serial 9DH Habilita las comunicaciones entre microcontroladores en los modos 2 y 3, RI no se activa si el noveno bit recibido es bajo. 9CH Habilita la recepción, debe inicializarse para recibir caracteres. 9BH Transmite el bit 8 (0-7); noveno bit en modos 2 y 3; iniciado/borrado por software. 9AH Recibe el bit 8 (0-7), noveno bit. 99H Bandera de interrupción de transmisión. Indica el final de la transmisión de caracteres; limpiada por software. 98H Bandera de interrupción de recepción. Indica el final de la recepción de caracteres; limpiado por software. Registro de control del puerto serial Arquitectura Comp JJVS/10 60 Antes de usar el puerto serial, SCON se inicializa para trabajar en el modo correcto: Se selecciona el modo (sí es el modo 1 SM0/SM1=0/1), se activa el bit que permite la recepción (REN=1) y se activa la bandera de interrupción de transmisión (TI=1) para indicar que el transmisor está listo para operar. Después de recibir un bit de inicio correcto, se procede a recibir los 8 bits de datos, el noveno bit es almacenado en RB8 en SCON. La bandera RI se activa (1). Todo esto ocurre sí RI=0 y Para comunicación con multi microcontroladores SM2=1 y el bit de paro sea 1, o SM2=0. 60 MODOS DE OPERACIÓN El puerto serial del 8051 tiene 4 modos de operación. SM0 0 0 1 SM1 0 1 0 MODO DESCRIPCION 0 Registro de corrimiento 1 UART de 8 bits 2 UART de 9 bits 1 1 3 UART de 9 bits BAUD RATE Fijo (Frecuencia de oscilación entre 12) Variable (seleccionado con el timer) Fijo (frecuencia de oscilación entre 32 o 64) Variable (seleccionado con el timer) Arquitectura Comp JJVS/10 61 Tres de estos modos habilitan la comunicación asíncrona, cada uno de los bytes transmitidos o recibidos están enmarcados por un bit de inicio y un bit de paro. El modo restante permite usar el puerto serie como un registro de corrimiento. 61 Registro de corrimiento de 8 bits (modo 0). La línea RXD se usa para entrada y salida de datos y la línea TXD sirve como reloj. La transmisión es iniciada por cualquier instrucción que escriba datos a SBUF. Una posible aplicación del modo de registro de corrimiento es expandir las capacidades de salida del 8051. 8 salidas extras. 8031 TXD (P3.1) Reloj Registro de RXD (P3.0) Datos corrimiento Arquitectura Comp JJVS/10 62 En el modo 0 los datos seriales entran y salen a través de RXD, TXD envía la señal de reloj. Los términos RXD y TXD no son correctos en este modo. La transmisión es iniciada por cualquier instrucción que escriba datos a SBUF. Los datos son llevados a la línea RXD (P3.0), con pulsos de reloj mandados a la línea TXD (P3.1). Una posible aplicación del modo de registro de corrimiento es expandir las capacidades de salida del 8051. Un CI de registro de corrimiento serieparalelo se puede conectar a las líneas TxD y RxD del 8051, proporcionando 8 líneas extras de salida, como puede observarse en la figura. Además otros registros de corrimiento pueden conectarse en cascada con el primero y permitir más expansión. 62 UART de 8 bits con Baud rate variable (Modo 1) En el modo 1 el puerto serie del 8051 opera como un UART (universal asynchronous receiver/transmitter) de 8 bits con baud-rate variable (programable con el timer). En el modo 1 son transmitidos 10 bits sobre TXD o recibidos en RXD. Estos consta de un bit de inicio, (siempre 0), 8 bits de datos (primero LSB), y un bit de paro (siempre 0). 1/ (Baud rate) Arquitectura Comp JJVS/10 63 Durante la recepción, el bit de paro activa RB8 de SCON. Los datos enviados a TXD empiezan con un bit de inicio, seguido por 8 bits de datos y finalmente el bit de paro. El periodo para cada bit es el recíproco del baud rate que se ha programado en el timer. La bandera de interrupción de transmisión (TI) se activa cuando el bit de paro aparece en TXD. La recepción se inicia por una transición de 1 a 0 en RXD. El receptor incluye detección de falso bit de inicio, esto se logra esperando un cero después de 8 cuentas desde la transición. Si esto no ocurre, se supone que el receptor fue activado por ruido más que por un carácter válido. El receptor es reiniciado y se regresa al estado de espera, listo para la siguiente transición de 1 a 0. 63 UART de 9 bits con baud rate fijo (Modo 2). En este modo se reciben o transmiten 11 bits: un bit de inicio, 8 bits de datos, un noveno bit de dato programable, y un bit de paro. El baud rate en el modo 2 es 1/32 o 1/64 de la frecuencia del oscilador del chip. UART de 9 bits con baud rate variable (Modo 3) La diferencia para cada uno de los modos se encuentra en el baud rate (fijo en el modo 2, variable en el modo 1 y 3) y en el número de bits de datos (8 en el modo 1, nueve en el modo 2 y 3 ). En este modo el baud rate es seleccionado por el timer. Arquitectura Comp JJVS/10 64 En transmisión, el bit nueve se coloca en TB8 de SCON. En recepción, el noveno bit recibido se coloca en RB8. 64 Inicialización de los registros del puerto serial. Habilitación de receptor: El bit de habilitación de receptor (REN) en SCON debe iniciarse por software para habilitar la recepción de caracteres. El noveno bit de datos:El noveno bit transmitido en el modo 2 y 3 debe ser cargado en TB8 por software. El noveno bit de datos recibido se coloca en RB8. Banderas de interrupción: Típicamente RI se inicia al final de la recepción de caracteres e indica que el buffer de recepción está lleno. Esta condición es examinada por software o programada para causar una interrupción. TI se inicia al final de la transmisión de caracteres e indica que el buffer de transmisión está vacío. Arquitectura Comp JJVS/10 65 Si el software requiere la entrada de un carácter desde el elemento conectado al puerto serial, este debe esperar hasta que RI este en un nivel alto, entonces RI se limpia y se lee el carácter desde SBUF. TI se activa (nivel alto) al final de una transmisión de un carácter indicando buffer de transmisión vacío. Si se desea mandar un dato por el puerto serial , debe revisarse que el puerto serie este listo. 65 Baud rate del puerto serie Suponiendo una frecuencia de 12 MHz, el baud rate del modo 0 es 1MHz. Oscilador ¸12 Baud rate MODO 0 Después reiniciar el sistema el baud rate en el modo 2 es la frecuencia del oscilador dividida por 64. Activando SMOD es posible doblar la frecuencia del baud rate en el modo 2 ¸64 Oscilador SMOD = 0 Baud rate ¸32 SMOD = 1 MODO 2 Arquitectura Comp JJVS/10 66 El baud rate también es modificado por el bit 7 de PCON, SMOD. Activando en alto SMOD se obtiene el efecto de doblar el baud rate en los modos 1, 2 y 3. 66 Activando el bit SMOD se dobla el baud rate en los modos 1,2 y 3. ¸32 Sobreflujo de Timer 1 ¸16 SMOD = 0 Baud rate SMOD = 1 MODO 1 y 3 El baud rate del 8051 en los modos 1 y 3 está determinado por el la razón de sobre-flujo del Timer 1. Como el timer opera a una frecuencia relativamente alta , el sobre-flujo es dividido por 32 (16 si SMOD = 1) antes de dar el reloj de baud rate al puerto serial. Arquitectura Comp JJVS/10 67 67 Usando el timer 1 como reloj de Baud Rate. Para un 8051, la técnica usual para generar el baud rate es iniciando TMOD en modo de 8 bits auto-recargable (Modo 2 del timer) y poner el valor correcto en TH1 para dar la razón de sobre-flujo apropiado para el baud rate. BAUD RATE 9600 2400 1200 19200 9600 2400 1200 FRECUENCIA DEL CRISTAL 12.000 MHz 12.000 MHz 12.000 MHz 11.059 MHz 11.059 MHz 11.059 MHz 11.059 MHz SMOD 1 0 0 1 0 0 0 TH1 RELOAD VALUE -7 (F9H) -13 (F3H) -26 (E6H) -3 (FDH) -3 (FDH) -12 (F4H) -24 (E8H) BAUD RATE ACTUAL 8923 2404 1202 19200 9600 2400 1200 Arquitectura Comp JJVS/10 ERROR 7% 0.16% 0.16% 0 0 0 0 68 La formula para determinar el baud rate en los modods 1 y 3, es: BAUD RATE=TIMER1 OVERFLOW RATE ¸ 32 Por ejemplo, un baud rate de 1200 requiere un sobreflujo del timer calculado así: 1200 = TIMER1 OVERFLOW RATE ¸ 32 TIMER1 OVERFLOW RATE = 38.4 KHz Sí se usa un cristal de 12 MHz, el TIMER1 esta operando a una razón de 1MHz o 1000 KHz. Ya que el timer debe tener un sobleflujo a una razón de 38.4 KHz, se requiere un sobreflujo cada: 1000 ¸ 38 =26.04 redondeado se toma 26, ya que el timer se desborda en la transición de FFH a 00H, se carga en TH1 el valor de 26 o bien E6H. 68 #include <reg51.h> #define ESC 0x1B unsigned char lee_dato(void) { unsigned char dato; Funciones para el puerto serial void trx_cadena (char *mensaje) { char ch; unsigned char i; while (!RI) dato = 0; RI = 0; dato = SBUF; i = 0; return dato; do { ch = mensaje[i++]; if ( ch != '0' ) trx_dato (ch); } while ((ch != '0')); trx_dato(ESC); } } void trx_dato (char dato) { unsigned int bde; while (!TI); bde = 1; TI=0; SBUF=dato; } Arquitectura Comp JJVS/10 69 69 Quiz Realice un programa que envíe la frase hola mundo a una frecuencia de 2400 baudios. Use el timer 1 para generar la señal de reloj. Arquitectura Comp JJVS/10 70 70 Diagrama a bloques Arquitectura Comp JJVS/10 71 71 Comparación Arquitectura Comp JJVS/10 72 72 Convertidor Analógico Digital Arquitectura Comp JJVS/10 73 73 Comparadores Pulse para añadir texto Arquitectura Comp JJVS/10 74 74 Diagrama a bloques Arquitectura Comp JJVS/10 75 75