contador serial 65000 v2

9
Empleo del microcontrolador 8051 como contador de eventos y Empleo del microcontrolador 8051 como contador de eventos y posterior envío mediante comunicación por puerto serial posterior envío mediante comunicación por puerto serial Use of 8051 microcontroller as events counter and later sending Use of 8051 microcontroller as events counter and later sending by serial port by serial port Anthony Ariano Cordero Gavilán, Carlos Burga Guardales Universidad Nacional de Ingeniería, Av. Túpac Amaru 210 - Rímac / Lima 25 - Perú Resumen El 8051 es un microcontrolador que por sus características y bajo costo ofrece numerosas aplicaciones hoy en día. Una de esas características es su capacidad de operar como contador de eventos externos empleando una sencilla programación y, además ofrece la capacidad de transmitir dicha información mediante el empleo de una conexión por el puerto serial que incorpora facilitando su conexión con otros dispositivos como una computadora personal. Descriptores: microcontrolador, 8051, puerto serial, contador Abstract The 8051 is a microcontroller who by his characteristics and low cost offers numerous applications nowadays. One of those characteristics is its capacity to operate like a counter of external events using a simple programming and, in addition it offers the capacity to transmit this information by means of the use of a connection by the serial port that incorporates facilitating its connection with other devices like a personal computer. Keywords: microcontroller, 8051, serial port, counter 1. Introducción El 8051 es el nombre de una gran familia de microcontroladores que fueron desarrollados por Intel en 1980 para su uso en sistemas empotrados. Un Microcontrolador es todo un "sistema mínimo" dentro de un sólo dispositivo, lo cual ofrece un enorme panorama hacia el mundo de la compatibilidad el cual consta de un CPU, puertos paralelos de entrada y salida, puerto serie, timers, contadores, memorias, y en algunos casos hasta convertidores analógicos digitales, todo esto dentro de un solo chip. El 8051 y sus derivados mejorados, compatibles con el original, permanecen populares hasta el día de hoy. Este trabajo se centrará en las funciones del 8051 como timer/contador y salida de data por puerto serial. 1.1 Características del 8051 1

Upload: cordero-ariano

Post on 20-Dec-2015

84 views

Category:

Documents


0 download

DESCRIPTION

Algoritmo de conteo , para el microcontrolador 8051 , diagrama de flujo y funcionamiento

TRANSCRIPT

Page 1: Contador Serial 65000 v2

Empleo del microcontrolador 8051 como contador de eventos y posterior envíoEmpleo del microcontrolador 8051 como contador de eventos y posterior envío mediante comunicación por puerto serialmediante comunicación por puerto serial

Use of 8051 microcontroller as events counter and later sending by serial port Use of 8051 microcontroller as events counter and later sending by serial port

Anthony Ariano Cordero Gavilán, Carlos Burga Guardales

Universidad Nacional de Ingeniería, Av. Túpac Amaru 210 - Rímac / Lima 25 - Perú

Resumen

El 8051 es un microcontrolador que por sus características y bajo costo ofrece numerosas aplicaciones hoy en día. Una de esas características es su capacidad de operar como contador de eventos externos empleando una sencilla programación y, además ofrece la capacidad de transmitir dicha información mediante el empleo de una conexión por el puerto serial que incorpora facilitando su conexión con otros dispositivos como una computadora personal.

Descriptores: microcontrolador, 8051, puerto serial, contador

Abstract

The 8051 is a microcontroller who by his characteristics and low cost offers numerous applications nowadays. One of those characteristics is its capacity to operate like a counter of external events using a simple programming and, in addition it offers the capacity to transmit this information by means of the use of a connection by the serial port that incorporates facilitating its connection with other devices like a personal computer.

Keywords: microcontroller, 8051, serial port, counter

1. Introducción

El 8051 es el nombre de una gran familia de microcontroladores que fueron desarrollados por Intel™ en 1980 para su uso en sistemas empotrados. Un Microcontrolador es todo un "sistema mínimo" dentro de un sólo dispositivo, lo cual ofrece un enorme panorama hacia el mundo de la compatibilidad el cual consta de un CPU, puertos paralelos de entrada y salida, puerto serie, timers, contadores, memorias, y en algunos casos hasta convertidores analógicos digitales, todo esto dentro de un solo chip. El 8051 y sus derivados mejorados, compatibles con el original, permanecen populares hasta el día de hoy. Este trabajo se centrará en las funciones del 8051 como timer/contador y salida de data por puerto serial.

1.1 Características del 8051

El microcontrolador 8051 contiene una Unidad Aritmético Lógica (ALU) y un bus de datos de 8-bits, cuatro puertos bidireccionales de entrada/salida, uno de los cuales (P3) es también un puerto de control, el cual a su vez contiene; un puerto serie,

dos entradas para Timer/Contador de 16 bits, dos entradas para interrupciones externas, las señales de RD y WR para la toma o almacenamiento de datos externos en RAM, la señal de PSEN para la lectura de instrucciones almacenadas en EPROM externa. Gracias a estas tres señales el microcontrolador 8051 puede direccionar 64 KB de programa y 64KB de datos separadamente, es decir un total de 128KB. Además cuenta con 128 bytes de memoria RAM interna.

Además el 8051 puede generar la frecuencia (Baud Rate) de Transmisión/Recepción de datos por el puerto serie de manera automática partiendo de la frecuencia del oscilador general, por medio de la programación del Timer 1.

Dicha frecuencia de transmisión puede ser cambiada en cualquier momento con solo cambiar el valor almacenado en el control o también se puede duplicar o dividir la frecuencia con solo escribir sobre el bit 7 (SMOD) del registro de control (PCON).[1]

1

Page 2: Contador Serial 65000 v2

1.2 Los timers del 8051

El 8051 viene equipado con dos timers, ambos de ellos capaces de ser configurados individualmente. En general pueden cumplir tres funciones: 1) Medir o calcular la cantidad de tiempo entre dos eventos, 2) Contar los eventos en si mismos, o 3) Generar una señal de baudaje o baudrate para el puerto serial.

Los timers del 8051[2] son accesados a través de seis registros de funciones especiales como se muestran en la tabla 1:

Tabla 1: Registros de funciones especiales para el timer.

Timer SFR

Función DirecciónDireccionable

por bit

TCON Control 88h Si

TMOD Modo 89h No

TL0Byte Bajo Timer 0

8Ah No

TH0Byte Alto Timer 0

8Ch No

TL1Byte Bajo Timer 1

8Bh No

TH1Byte Alto Timer 1

8Dh No

El registro TMOD se usa para controlar el modo de operación de ambos timers, tal como se explica en la tabla 2:

Tabla 2: Descripción de funciones del registro TMOD.

Bit Nombre Función Timer

7 Gate1Si es 1 el timer 1 corre sólo si

INT1 (P3.3) esta el alta, si es 0 corre sin importar su estado.

1

6 C/T1Si C/T1=1 cuenta eventos en T1 (P3.5), si C/T1=0 se incrementa

cada ciclo de máquina.1

5 T1M1 Modo timer 1 bit 1 1

4 T1M0 Modo timer 1 bit 0 1

3 Gate0Si es 1 el timer 0 corre sólo si

INT0 (P3.4) esta el alta, si es 0 corre sin importar su estado.

0

2 C/T0Si C/T0=1 cuenta eventos en T0 (P3.4), si C/T0=0 se incrementa

cada ciclo de máquina.0

1 T0M1 Modo timer 0 bit 1 0

0 T0M0 Modo timer 0 bit 0 0

De este registro, cuatro bits son usados para especificar un modo de operación. Estos modos son:

Tabla 3: Modos de operación para los timers:

M1 M0 Modo Descripción

0 0 0 Modo 13-bit

0 1 1 Modo 16-bit

1 0 2 Modo 8-bit con autorecarga

1 1 3Modo 8-bit donde el timer 0

funciona en TL0 mientras que el timer1 en TH0

En el modo 0 (13-bit) TL se incrementa hasta 31, luego regresa a 0 e incrementa TH desde 0 a 255.

En el modo 1 (16-bit) TL se incrementa hasta 255, luego regresa a 0 e incrementa TH desde 0 hasta 255.

En el modo 2 (8-bit con autorecarga) TL se incrementa hasta 255 y regresa con un valor inicial igual al almacenado en TH.

En el modo 3 el Timer 0 funciona en TL0 y el Timer 1 en TH0. Ambos timers cuentan desde 0 a 255 y desbordan de vuelta a 0. Todos los bits relacionados al Timer 1 pertenecen ahora a TH0.

Otro registro que proporciona información sobre los dos timers es TCON con la siguiente estructura:

Tabla 4: Registro de control para los timers.

Bit Nombre Descripción

7 TF1Este bit se fija cuando el timer1

se desborda.

6 TR1Si es 1 el timer1 se activa, si es 0

se apaga.

5 TF0Este bit se fija cuando el timer0

se desborda.

4 TR0Si es 1 el timer0 se activa, si es 0

se apaga.

Solo se muestran cuatro bits ya que la función de los restantes están relacionadas con la función de interrupciones.

2

Page 3: Contador Serial 65000 v2

1.3 El Timer como contador de eventos

El 8051 se puede configurar para contar transiciones lógicas de 1 a 0 en el pin P3.4 para el timer 0 o en el pin P3.5 para el timer 1. Estas cuentas se alma-cenan en los mismos registros empleados para la función de "timer", es decir, en TL y TH obedeciendo también la configuración asignada en los bits TxM0 y TxM1. Esto significa que, por ejemplo, el timer 0 puede estar contando eventos externos en cualquiera de los modos 0-2 mientras que timer 1 puede estar fijado por software.

Además se debe mencionar que el 8051 revisa estas transiciones 1-0 cada ciclo de máquina (12 ciclos del reloj) por lo que eventos que ocurran en un tiempo menor a 1/24 de la frecuencia del reloj no serán detectados.

1.4 Salida de datos mediante el puerto serial

El 8051 posee un circuito de comunicación serial que usa el registro SBUF para retener datos. El registro SCON controla la comunicación de datos, el registro PCON controla la velocidad y los pines RXD (P3.0) y TXD (P3.1) proveen la conexión externa.

El registro SBUF son físicamente dos. Uno es de solo escritura y se usa para la transmisión vía el pin TXD, mientras que el otro es sólo lectura y guarda los datos recibidos por RXD. Ambos registros usan la dirección 99h.

Para configurar el puerto serial del 8051 hacemos uso del registro SCON que posee la siguiente estructura:

Tabla 5: Descripción de funciones del registro SCON.

Bit Nombre Descripción

7 SM0 Modo serial bit 0

6 SM1 Modo serial bit 1

5 SM2 Activa comunicación multiproceso

4 REN Activa recepción

3 TB8Corresponde al 9-bit a enviar en los

modos 2 y 3

2 RB8Corresponde al 9-bit al recepcionar

en los modos 2 y 3

1 TIBandera de transmisión, se activa al

terminar de enviar un byte

0 RIBandera de recepción, se activa al

terminar de recepcionar un byte

Los bits SM0 y SM1 nos permiten configurar el puerto serial de 4 modos [4]:

Tabla 6: Modos de operación del puerto serial

SM1 SM0 Modo DescripciónVelocidad de

Baudios

0 0 08-bit Shift Register

Oscilador / 12

0 1 1 8-bitUART Fijado por Timer 1

1 0 2 9-bitUART Oscilador / 32

1 1 3 9-bitUART Fijado por Timer 1

Modo 0

El modo 0 tiene una velocidad de baudios fija, que es 1/12 la frecuencia del oscilador. En este modo sólo se necesita configurar el registro SCON.

Modo 1

El modo 1 tiene una velocidad de baudios variable para 8 bits de datos. Usando el timer 1 en modo 2 la velocidad de baudios será:

Usando el timer 1 en los otros modos se tendrá:

El valor SMOD corresponde al bit de control en PCON que tiene el efecto de duplicar la velocidad de baudios.

Modo 2

En el modo 2, la velocidad de baudios se fija para datos de 9 bits la cual es 1/32 o 1/64 la frecuencia del oscilador, dependiendo del valor del bit SMOD en el registro PCON.

Modo 3

3

Page 4: Contador Serial 65000 v2

La velocidad de baudios en el modo 3 es variable e se fija del mismo modo que para el modo 1. Este modo permite transferencia de datos de 9 bits.Transmisión de Datos

La transmisión de datos comienza en el momento que se escribe en SBUF. El bit TI se fija el dato ha sido trasmitido lo que significa que SBUF se encuentra vacío y que otro byte de datos se puede enviar.

Recepción de Datos

La recepción de datos comenzará si el bit de recepción (REN) está activado. Adicionalmente, en el modo 0, RI también debe ser puesto a 0. El bit RI se fija después de haber recibido datos en todos los modos. El requerimiento de fijar RI=0 para el modo 0 prevendrá la recepción de nuevos datos hasta que el programa termine de manejar con los datos anteriores y reinicie RI.

2. Metodología

En este proyecto se empleo un sistema basado en el 8051 modelo TMC51 (Trainer Module of Cruz for the 8051) el cual es un módulo entrenador que se utiliza para aprender a programar y probar programas realizados en lenguaje assembler o en cualquier otro lenguaje como “C”.

Tiene como principales características:

Microcontrolador ATMEL AT89S52 (8KB Flash ROM con direcciones de memoria de 0h a 1FFFh)

Un Firmware incorporado llamado programa MONITOR que gestiona la recepción y ejecución de los programas enviados por el usuario.

Un cristal de 11.0592 MHz 32 KB de RAM externa (desde la dirección

8000h a FFFFh) destinado para el almacenaje de programas.

Interfaz serie-USB que permite una comunicación entre el TMC51 y cualquier PC con un puerto USB libre a una velocidad de 19200 baudios.

Además tiene disponible todo el puerto P1 y los pines del puerto P3: P32/INT0, P33/INT1, P34/T0 y P35/T1. Todos los pines del puerto P1 y P3 están conectados a conectores externos de 10 pines cada uno. Además, el pin P1.0 se conecta a un led y los pines P3.2 y P3.3 se conectan a 2 botones.

El emplear este sistema facilitó la implementación del algoritmo ya que sólo se necesitó conectarlo a una PC vía puerto USB para comprobar la

transmisión serial sin necesidad de tener que diseñar un sistema para el 8051 desde cero.

Figura 1: Módulo entrenador TMC51 basado en el microcontrolador AT89S52

Como receptor se empleó una computadora personal con el sistema operativo Windows™. Los resultados de la transmisión de datos se visualizaron utilizando el programa Hyperterminal.

2.1 Algoritmo de conteo

El objetivo es emplear direcciones de memoria que almacenarán las cifras que formarán el número completo.

Tabla 6: Direcciones de memoria que contienen el número.

Dirección 40h 41h 42h 43h 44h

CONTEO

0 0 0 0 0

0 0 0 0 1

0 0 0 0 2

. . . . .

6 4 9 9 9

6 5 0 0 0

El proceso consiste en declarar un vector nulo (posiciones de memoria consecutivas y de valor 0) para formar el número ; asignando a cada posición una cifra ; el conteo se realiza aumentando la primera posición (las unidades) hasta el valor de 9 , dando aquí un salto a la siguiente posición aumentándola en una unidad y actualizando la anterior(o anteriores) con 0, este proceso se repite hasta llenar el máximo valor de la correspondiente posición , por ejemplo en las decenas el 99, en las centenas el 999 y así sucesivamente hasta el valor límite previamente asignado en otra posición de

4

Page 5: Contador Serial 65000 v2

memoria donde un valor de bandera indicara el fin del programa.

Diagrama 1: Funcionamiento general del programa El pseudocódigo de implementación es:

Inicio Entero Numero[5]Entero count , Flag , limiteFlag <-0limite <-9Para count<-1 hasta 5

Numero[count] <-0 ;

//Inicio del timerTimer 0 <- 26h // modo 2Tl0 <- 255TH0 <- 255TR0 <- 1

ContadorSi (Flag es igual 1) salta a Fin_Programa;Mientras (Tf0 diferente cero);

// queda dando vueltas TF0 <-0;

Imprimir Numero; //obtención del número

Si (Numero[5] no es igual a 9) { Numero[5] <- Numero[5]+1;

Salta a Contador;}Sino { Si(Numero[4]no es igual a 9)

{ Numero[4] <- Numero[4]+1; Numero[5] <- 0; Salta a Contador;}Sino

{Si(Numero[3] no es igual a 9){Numero[3] <- Numero[3]+1; Numero[4] <- 0; Numero[5] <- 0; Salta a Contador;}

Sino {Si (Numero[2]no es igual a Limite)

{Numero[2] <- Numero[2]+1; Numero[3] <- 0; Numero[4] <- 0; Numero[5] <- 0;

Si (Numero[2] es igual a 5)Flag <- 1 ;

//Aviso de fin de programa }

Sino{Si(Numero[1] no es igual a 6)

{Numero[1] <- Numero[1]+1; Numero[2] <- 0; Numero[3] <- 0; Numero[4] <- 0; Numero[5] <- 0 Si(Numero[1] es igual a 6 ) limite <- 4 ; Salta a Contador}

}}

5

Transición 1-0 en P3.41

0

Inicializa Puerto Serial:

Fija baud rate 19200

Imprimir Número

Inicio

Algoritmo de conteo

Saludo Inicial

Si

Sigue esperando

No

Envío al P.SerialRegistros 40h al 44h(número completo)

Flag = 1

Fin

Imprimir último Número

Si

No

Page 6: Contador Serial 65000 v2

Fin_programa;

2.2 Envío mediante conexión por puerto serial

Una vez que los registros del 40h al 45h contienen las cifras que formarán el número completo se procede a enviarlos por conexión serial uno por uno. Para esto, el puerto serial se configuró del modo siguiente:

SCON = #50HPCON = #80HTMOD = #26HTH1 = #0FDHTL1 = #0FDH

Aquí es el timer 1 el que genera el baudrate de modo que trabaje para 19200 baudios.

La señal que ha de disparar el envío del número completo va a ser el desborde del Timer 0. Para esto se fijó en modo 2 con auto recarga con un valor inicial de TL0 y de TH0 igual a #255. Esto ocasionará que al primer evento se incremente el registro TL0 y desborde inmediatamente.Al desbordar envía al puerto serial el contenido de los registros del 40h al 44h que en conjunto forman el número completo.

3. Resultados y discusión

Este algoritmo, como se señalo antes, es capaz de ser ampliado para llevar cuentas de números muy grandes mientras queden direcciones de memoria disponibles.

El objetivo principal consistía en lograr que el 8051 sea capaz de contar hasta 65000. Como se conoce, el 8051 es de 8 bits, sin embargo para la función de timer se tiene asignados 2 registros lo que le permite manejar cantidades hasta la cifra 65535. Sin embargo este también constituye un límite si se deseara trabajar con cantidades mayores. El diseño del algoritmo toma en cuenta esto y propone trabajar con unidades individualmente asignándoles a cada una un registro lo que permitiría expandir el límite siempre y cuando se cuente con direcciones de memoria disponibles.

Además, el microcontrolador 8051 al poseer un contador y puerto serial ofrece una solución integral sin necesidad de implementar otros dispositivos y

empleando una sencilla programación. Su uso estará dirigido hacia aplicaciones concretas en donde, el espacio, y número de componentes es mínimo, además, los cambios o ampliaciones futuras del sistema son casi nulos.

4. Conclusiones

La transmisión de datos desde el microcontrolador 8051 a la PC fue exitosa.

Figura 2: Conexión exitosa entre el microcontrolador y la Pc.

El algoritmo mostrado da un amplio rango de conteo, este de 0 a (10^128) -2 dependiendo cuantos espacios de memoria vacíos se tengan, también dependiendo del microcontrolador este puede variar aumentando o disminuyendo el rango de acuerdo a la memoria disponible.

Figura 3: Aumento en el número de cifras, probado en el simulador Edsim51.

De acuerdo a que el algoritmo usado tiene partes independientes, a este puede implementarse más funciones sin modificar o interferir con las demás, haciendo a este flexible y tener la capacidad de usarse en otros dispositivos.

6

Page 7: Contador Serial 65000 v2

El conteo de pulsos se realizó satisfactoriamente, evidenciándose este en la mayor y menor velocidad de conteo al variar la frecuencia de la fuente y la inactividad de este al estar la fuente apagada.

Figura 4: Conteo de pulsos y expansión del límite.

5. Agradecimientos

Agradecemos al profesor C. Martín Cruz Salazar por su apoyo, amabilidad, conocimientos y gran ayuda en el proceso de desarrollo y depuración del algoritmo final sin el cual este proyecto no hubiera tenido éxito.

6. Referencias

[1] A. Vega, "Manual del Microcontrolador 8051" (1999)

[2] S. MacKenzie, "The 8051 Microcontroller" 2Ed (1995) 63-95

[3] K. J. Ayala, "The 8051 Microcontroller Architecture Programming and Applications" (1991) 28-37

[4] M. O. Durham, "Systems Design and the 8051" 2Ed (2003) 144-154

E-mail: [email protected] [email protected]

7