INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
CONTROL DE TEMPERATURA EMPLEANDO UN
µC 89C51
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
DESARROLLO
La temperatura del ambiente se senso a través del Luego de incorporar el conversor al proceso de
sensor AD22100 de la compañia Analog Devices, sensado obtenemos la siguiente expresión de
este dispositivo genera un voltaje de salida temperatura en función del dato binario de
proporcional al valor de temperatura de acuerdo a salida dl ADC que corresponde al Vout del
la siguiente ecuación: sensor AD22100.
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
Controlador
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
;TEM: XX YY °C
;VEL:XXXB VS:XXXB
;****************TEMPERATURA*****************
;T
MOV R0,#54H
ACALL ESC
;E
Los pines de los extremos del potenciómetro (A,B) MOV R0,#65H
son conectados a +5 voltios y en el pin de ACALL ESC
derivación(w) es donde se toma el voltaje de ;M
MOV R0,#6DH
referencia que se necesita en el circuito PWM para ACALL ESC
variar el ancho del pulso y por ende la velocidad del ;:
MOV R0,#3AH
motor. ACALL ESC
;_
MOV R0,#20H
PROGRAMA ACALL ESC
;CORRER A LA 8C RENGLON 1 13
$MOD51 MOV R0,#8CH
$TITLE(RAGE AGAINST THE MACHINE) ACALL ESCC
;R2 Y R3 ALMACENAN DECENAS Y UNIDADES LEIDAS T° ;°
;R5 Y R6 DATOS DEL TECLADO MOV R0,#0DFH
;CONVERSION VOLTAJE DATO BINARIO A TEMPERATURA ACALL ESC
;R0 VALOR QUE RECIBEN LAS FUNCIONES ;C
MOV R0,#43H
INTE0 EQU 0400H ;RUTINA INTERRUPCION 0 ACALL ESC
ORG 0H ;BAJAR RENGLÓN
LJMP MAIN ; salto al inicio de la rutina principal MOV R0,#0C0H
ORG 0003H ACALL ESCC
LJMP INTE0 ; salto hacia el inicio de la rutina de interrupción
ORG 100H ;***************VELOCIDAD******************
MAIN: MOV SP,#25H ; se declara el inicio de la memoria de pila ;V
en la dirección 25h MOV R0,#56H
MOV IE,#81H ; se habilitan las interrupciones ACALL ESC
MOV IP,#01H ; se establece la interrupción cero como de mayor ;E
prioridad MOV R0,#65H
MOV P2,#00H ; se clarea el puerto P0 ACALL ESC
;L
;*******INICIALIZACION DE LA PANTALLA************ MOV R0,#6CH
ACALL R15M MOV R0,#03H ACALL ESC
ACALL ESCD ;:
ACALL R4100U MOV R0,#3AH
MOV R0,#03H ACALL ESC
ACALL ESCD ;_
ACALL R100U MOV R0,#20H
MOV R0,#03H ACALL ESC
ACALL ESCD ;MOVER EN EL RENGLON 2
ACALL R4100U MOV R0,#0C7H
MOV R0,#02H ACALL ESCC
ACALL ESCD ;B
ACALL R4100U MOV R0,#62H
;BUS DE DATOS 4 BITS ACALL ESC
MOV R0,#2CH ;_
ACALL ESCC MOV R0,#20H
;BORRAR ACALL ESC
MOV R0,#01H ;V
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
MOV R0,#56H ;con estas instrucciones se controla el potenciómetro digital y se envía el
ACALL ESC valor de R4
;S ;de forma serial, para variar el valor de resistencia y por consiguiente el
MOV R0,#73H ;volatje de referencia que controla la velocidad del motor.
ACALL ESC
;: ;P1.4 pin del puerto P1 por el que se envia el valor de R4 en forma serial
MOV R0,#3AH al potenciometro,
ACALL ESC ;para ello se rota el registro R4 y se procesa para determinar si en
; P1.4 se debe colocar un '1'o'0'.
;MOVER EN EL RENGLON 2
MOV R0,#0CFH ;P1.6 pin del puerto P1 con el que se controla el habilitador del
ACALL ESCC potenciómetro digital,
;B ;se coloca en cero cuando se inicia el envió de datos y se coloca uno
MOV R0,#62H cunado se termina.
ACALL ESC ;P1.5 pin del puerto P1 con el que se genera la señal de reloj que requiere
el potenciómetro
;*****************PROGRAMA PRINCIPAL**************** ;para aceptar cada bit que se envía por al pin P1.4.
LL1: MOV A,R1 ; ciclo infinito que detiene la ejecución del ;----------------------------------------------
programa cuando C10: MOV R0,#03H
JZ LL1; se energiza el circuito para esperar que el CLR P1.4
usuario programe CLR P1.6
LL2: CJNE R1,#00H,LL2 ; la temperatura de referencia. CLR P1.5
;***************************************************
C9: ACALL LADC ; llamado a la subrutina que lee el puerto P0 L1: SETB P1.5
y convierte el dato binario CLR P1.5
; enviado por el conversor ADC en DJNZ R0,L1
valores de temperatura y lo almacena en R7.
;R7 TIENE VALOR DE TEMPERATURA LEIDO DEL AMBIENTE MOV R0,#08H
;R2 TIENE VALOR EL VALOR DE TEMPERATURA DE REFERENCIA MOV A,R4
INGRESADO POR TECLADO ANL A,#80H
MOV A,R7 ;se mueve al acumulador el valor de R7. L4: CJNE A,#00H,L2
SUBB A,R2 ;se resta el valor de temperatura leido con el LJMP L3
;valor de temperatura de referencia. L2: SETB P1.4
JZ PRO ; salta a la etiqueta llamada como PRO si la resta da LJMP L5
valor cero. L3: CLR P1.4
JC MM0 ;salta a la etiqueta llamada como MM0 si la resta da valor L5: SETB P1.5
negativo. CLR P1.5
MOV A,R4 ; muevo al acumulador el valor de R4, en R4 se MOV A,R4
almacena el valor que RL A
; se envía al potenciómetro digital que varia el voltaje de referencia MOV R4,A
; que controla la velocidad del motor. ANL A,#80H
ADD A,#25 ; como la temperatura del medio es mayor que la de DJNZ R0,L4
referencia se incrementa SETB P1.6
; el valor del acumulador en 25. LJMP PRO
MOV R4,A ; se almacena en R4 el nuevo valor para el ;***********************************
potenciómetro. PRO:
JC PRO1 ; salta a PRO1 si la suma da mayor a 255. ;Se lee el puerto P0 para determinar la temperatura del ambiente y
LJMP C10 mostrar el valor en la
;------------------------------------------------ ;pantalla LCD.
;las siguientes instrucciones se ejecutan si la temperatura del ambiente es ;*******************************
menor que la de ACALL LADC
; referencia con el fin de disminuir la velocidad del motor. ACALL RMAX
;------------------------------------------------- MOV R0,#86H
ACALL ESCC
MM0: CLR PSW.7 ; borra el bit de carrier. ACALL R40U
MOV A,R4 MOV A,10H
SUBB A,#25 ; MOV R0,A
MOV R4,A ACALL ESC
JC PRO2 MOV A,11H
LJMP C10 MOV R0,A
;--------------------------------------------- ACALL ESC
; se carga R4 con el mínimo valor(00) para apagar el motor. ;Se muestra el valor binario de R4 con el que se ha programado el
PRO2: CLR PSW.7 potenciómetro digital
MOV R4,#00H ;en la pantalla LCD.
LJMP C10
;------------------------------------------------ MOV R0,#0C4H
; se carga R4 con el maximo valor(255) para que el motor gire a la ACALL ESCC
maxima velocidad. MOV A,R4
PRO1: CLR PSW.7 MOV B,#100
MOV R4,#255 DIV AB
;---------------------------------------------- ACALL ESCN
MOV A,B
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
MOV B,#10 RATB: DJNZ R3,RATB
DIV AB DJNZ R0,RATC
ACALL ESCN RET
MOV A,B ;Subrutina de retardo de 4.1ms para la inicialización del la pantalla.
ACALL ESCN R4100U: MOV R0,#25
;Se muestra en binario el valor de voltaje enviado por el sensor de RATE: MOV R3,#41
temperatura en la pantalla RATD: DJNZ R3,RATD
;LCD. DJNZ R0,RATE
MOV R0,#0CCH RET
ACALL ESCC
MOV A,P0 R100U: MOV R0,#49
SUBB A,#08 RATF: DJNZ R0,RATF
MOV B,#100 RET
DIV AB
ACALL ESCN ;***************ESCRITURA DATO COMANDO Y NUMERO*********
MOV A,B ;Subrutina para escribir caracteres en al pantalla LCD.
MOV B,#10 ESC: CLR P2.6
DIV AB MOV A,R0
ACALL ESCN ANL A,#0F0H
MOV A,B SWAP A
ACALL ESCN MOV P2,A
AJMP C9 SETB P2.7
NOP
;************************************************** SETB P2.6
subrutinas y rutina de atención de interrupciones. NOP
;*************************************************** NOP
;Subrutina que lee el puerto P0 y convierte el dato en temperatura CLR P2.6
;el resultado lo almacena en R7. MOV A,R0
;************************************************* ANL A,#0FH
MOV P2,A
LADC: MOV A,P0 SETB P2.7
SUBB A,#08 ;AJUSTE NOP
SUBB A,#69 SETB P2.6
MOV B,#09 NOP
DIV AB NOP
MOV R0,B CLR P2.6
MOV B,#08 ACALL R40U
MUL AB RET
ADD A,R0
MOV R7,A ;Subrutina para enviar comandos de 8 bits primero la parte alta
;SEPARAR EN DECENAS Y UNIDADES ;y después la parte baja, a la pantalla LCD.
MOV B,#10
DIV AB ESCC: CLR P2.6
ADD A,#30H MOV A,R0
MOV 10H,A ANL A,#0F0H
MOV A,B SWAP A
ADD A,#30H MOV P2,A
MOV 11H,A CLR P2.7
RET NOP
SETB P2.6
;******RUTINAS DE RATARDO SE EMPLEA R0 Y R3************* NOP
NOP
;Subrutina de retardo de 40us entre dos datos consecutivos que CLR P2.6
;se grafican en la pantalla LCD MOV A,R0
;para esperar que el controlador de la pantalla los procese. ANL A,#0FH
R40U: MOV R0,#19 MOV P2,A
RATA: DJNZ R0,RATA CLR P2.7
RET SETB P2.6
NOP
;Subrutina de retardo de dos segundos para que el usuario pueda NOP
; observar mejor la temperatura sensada. CLR P2.6
RMAX: MOV R0,#255 ACALL R40U
MOV 12H,#04 RET
RATO: MOV R3,#255 ;Subrutina para enviar comandos de 4 bits a la pantalla LCD.
RATU: DJNZ R3,RATU ESCD: CLR P2.6
DJNZ R0,RATO MOV P2,R0
DJNZ 12H,RATO SETB P2.7
RET NOP
;subrutina de retardo de 15ms para cuando se envían comandos a la NOP
pantalla LCD. SETB P2.6
R15M: MOV R0,#75 NOP
RATC: MOV R3,#50 NOP
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
CLR P2.6 caracteres por línea, puede almacenar en total 40
RET
;subrutina para generar el ASCCI de los números y mostrarlos. por línea. Es el usuario el que especifica qué 16
;en la pantalla LCD caracteres son los que se van a visualizar.
ESCN: ADD A,#30H
MOV R0,A
ACALL ESC
RET
;*************************INTERRUPCION************************
;Rutina de atención de interrupción con la cual se almacena
;la temperatura de referencia ingresada por teclado y se
,muestra en la pantalla LCD.
;*************************************************************
ORG 400H
CJNE R1,#00H,I4
MOV A,P1
ANL A,#0FH ;RECUPERO SOLO PARTE BAJA
CJNE A,#00,I5
ACALL RMAX
ACALL RMAX
ACALL RMAX
I5: MOV R2,A
MOV R0,#89H ;ENVIO DIR A COPIAR CARACTER
ACALL ESCC
MOV A,R2
ADD A,#30H
MOV R0,A
ACALL ESC El LCD dispone de una matriz de 5x8 puntos para
MOV A,R2 ;RECUPERO A DESPUES DE LAS RUTINAS
MOV B,#0AH
representar cada carácter. En total se pueden
MUL AB representar 256 caracteres diferentes. 240
INC R1 caracteres están grabados dentro del LCD y
MOV R2,A
LJMP I3 representan las letras mayúsculas, minúsculas,
I4: MOV A,P1 signos de puntuación, números, etc... Existen 8
ANL A,#0FH
MOV R5,A caracteres que pueden ser definidos por el usuario.
MOV R0,#8AH ;ENVIO DIR A COPIAR CARACTER
ACALL ESCC
MOV A,R5
DD RAM (Display Data Ram): En esta memoria se
ADD A,#30H almacenan los caracteres que están siendo
MOV R0,A visualizados o que se encuentran en posiciones no
ACALL ESC
MOV A,R5 ;RECUPERO A DESPUES DE LAS RUTINAS visibles. El display almacena en esta memoria dos
ADD A,R2 líneas de 40 caracteres pero sólo se visualizan 2
MOV R2,A
MOV R1,#00H líneas de 16 caracteres. Por ello la DD RAM tiene
MOV 14H,A un tamaño de 2x40=80 bytes.
I3: MOV A,P1
ANL A,#0FH LA CG RAM (Character Generator RAM): Es la
CJNE A,#00H,I3 memoria que contiene los caracteres definibles por
MOV A,14H
RETI el usuario. Está formada por 64 posiciones, con
END direcciones $00-$3F. Cada posición es de 5 bits.
Visualizacion En La Pantalla Lcd INTERFAZ DEL LCD: Los datos se transmiten por
un bus de datos de 8 bits de anchura (El display
El LCD esta constituido por un circuito impreso en ofrece la posibilidad de trabajar con este bus
el que están integrados los controladores del multiplexado en dos grupos de 4 bits, pero esto se
display y los pines para la conexión del display. verá más adelante). Para el control del display son
Sobre el circuito impreso se encuentra el LCD en sí, necesarios 3 bits: una señal de enable (E), una
rodeado por una estructura metálica que lo protege. para indicar lectura/escritura (R/W) y otra para
En total se pueden visualizar 2 líneas de 16 seleccionar uno de los dos registros internos (RS).
caracteres cada una, es decir, 2x16=32 caracteres. Por ello, en el caso peor, el sistema de control del
A pesar de que el display sólo puede visualizar 16 display necesitará utilizar 8+3=11 bits.
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
pausa antes de volver a enviar el siguiente mas significativos del LCD, dejando los otros 4 al
comando. Los tiempos máximos que tarda el ‘aire’. Primero enviamos unas secuencias de 4 bits
display en procesar los comandos están con unos retardos determinados. Al enviar el código
especificados por el fabricante y tienen un valor 2 (Bits 0 0 1 0) el display se configura para trabajar
típico de 40us. Si se realiza una pausa mayor o a 4 bits. Se puede observar cómo la línea superior
igual a esta se tiene garantía de que el display ha deja de estar más oscura que la inferior. A partir de
terminado de ejecutar el comando. En nuestro caso este momento las transferencias hay que realizarlas
elegimos esperar un tiempo de 40us. en dos partes: primero se envían los 4 bits mas
significativos y después los 4 bits menos
Secuencia Típica De Inicialización Del Lcd significativos. Para confirmar que la transferencia
es a 4 bits hay que enviar el código $28; primero los
Después de encender el LCD aparecerá la línea bits 0 0 1 0 y después los bits 1 0 0 0. De aquí en
superior un poco más oscura que la inferir. Esto adelante la inicialización es igual tanto para 8 bits
quiere decir que el display no ha sido inicializado como para 4, con la salvedad de que en el segundo
todavía. En el caso de 4 bits sólo se conectan 4 bits caso hay que enviar los datos multiplexados.
T e m : 2 5 2 7 ° C
V e l : 1 25 b V s :0 9 8 b
Visualización en la pantalla LCD 2x16. Entrada De Datos Por Teclado
El primer renglón corresponde a la temperatura del La entrada de datos por teclado se hizo
ambiente y la entrada del usuario por teclado implementando una GAL22V10, la cual, mediante
respectivamente expresadas en grados una lógica secuencial sincrona, permite mantener
centígrados. En el segundo se visualiza la en su salida un numero de 0 a 9 en formato BCD, y
velocidad como función del valor binario que se a su vez generar una interrupción para que el
envía al potenciómetro digital y el dato binario de microcontrolador le de prioridad a la operación de
temperatura recibido por el microcontrolador en el captura de datos por el puerto. La temperatura
puerto P0. deseada consta de dos dígitos entrados por
teclado, los cuales tienen que ser sucedidos de la
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
tecla asterisco, para que el microcontrolador los emplea una señal de voltaje de referencia que se
reconozca uno a uno (Se anexa programa en toma del potenciómetro digital, la cual varia de valor
PALASM). de acuerdo al programa de control, estas 2 señales
son las entradas invensora y no inversora
Circuito PWM respectivamente del comparador LF353. Las 2
señales se comparan y a la salida se genera una
Se encarga de generar los pulsos de ancho variable onda cuadrada, cuyo ciclo de trabajo cambia de
para activar y desactivar el MOSFET de potencia y acuerdo al valor del voltaje de referencia. La salida
de esta forma variar el voltaje promedio que cae del comparador se lleva a un optoacoplador el cual
sobre el motor, de acuerdo al ancho del pulso. Para cumple la función de aislamiento galvanico entre el
el circuito PWM se genero una señal triangular de 5 circuito de control y el dispositivo de potencia.
voltios pico con un offset de 2,5v. Además se
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
TN9 = N9 * /N8 * /N7 * /N6 * /N5 * /N4 * /N3 * /N2 * /N1 * /N0 * /AST CLOCKF CLOCK
;----------------------------------- Simulation Segment ------------ SETF AST
SIMULATION CLOCKF CLOCK
TRACE_ON CLOCK AST N0 N1 N2 OUT2 OUT1 OUT0 CHECK A
Diagrama General
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño
ivan_zambrano@hotmail.com jhortwo@hotmail.com darwin_c_82@hotmail.com
BIBLIOGRAFÍA http://www.analog.com/UploadedFiles/Data_Sheets/
380546564ad22100.pdf
Información LCD
http://www.beyondlogic.org/parlcd/parlcd.htm Información General
http://www.microbotica.es/web/downl/docs/display.p http://www.utdallas.edu/~parik/ee4380_spring03/Cla
df ss7%20-%20LCD%20Keypad%20Interrupts.pdf
http://dac.escet.urjc.es/docencia/Micros/i8051_LCD http://www.kit.we.ly/data/at89c51.pdf
s.pdf http://www.intersil.com/data/fn/fn3094.pdfhttp://scsx
http://dmi.uib.es/~goliver/lcd.pdf 01.sc.ehu.es/sbweb/webcentro/automatica/web_80
51/Contenido/tutor8051_52/indicetutor_8051.htm
Información Potenciómetro Digital González, J.A., Introducción a los
http://www.analog.com/UploadedFiles/Data_Sheets/ microcontroladores 8X51 y 8X52.
140808745AD5204_6_0.pdf
Información PWM
Información Sensor de Temperatura http://www.pablin.com.ar/electron/circuito/varios/pw
m-cc/index.htm