• No se han encontrado resultados

Cálculo de la temperatura real de la resistencia.

2 Práctica de Control de Temperatura con Lectura de Diez Bits

Código 6. Cálculo de la temperatura real de la resistencia.

Como la precisión de la conversión es aproximadamente igual a 0,1 ºC / cuenta, los tres bits menos significativos del resultado de la conversión nos proporcional directamente el dígito decimal.

2.3 Controlador Digital

La solución de este apartado es la misma que la dada anteriormente en el apartado 1.3.

2.4 Aplicación de Ejemplo

El código siguiente es un ejemplo de aplicación de control de temperatura del horno cuando la recepción de la conversión analógico – digital es de diez bits.

La aplicación presenta por pantalla el estado de la consigna de temperatura y el valor de la temperatura real. El valor de consigna se puede aumentar o disminuir pulsando las teclas ‘+’ y ‘-‘ respectivamente.

;********************************************************************* ;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES

;MODULO No. 2: Control de temperatura

;APLICACION: Programa de control V.2.0 (Recepcion ADC de 10 bits) ;

;Realizado por: ANTONIO MIGUEL ZAPLANA ALCARAZ ;Director: JOSE LUIS RAMIREZ FALO

;*********************************************************************

ABSOLUTE ORG $25000 ;REGISTROS DE LA VIA

VIA EQU $60021 ;Direccion base de la VIA PORTB EQU VIA+0 ;Output / Input Register B

ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA

SOLUCIÓN DE LAS PRÁCTICAS

114

PORTA EQU VIA+2 ;Output / Input Register A DDRB EQU VIA+4 ;Data Direction Register B DDRA EQU VIA+6 ;Data Direction Register A ACR EQU VIA+22 ;Auxiliary Control Register PCR EQU VIA+24 ;Peripheral Control Register IFR EQU VIA+26 ;Interrupt Flags Register IER EQU VIA+28 ;Interrupt Enable Register

;REGISTROS DE LA DUART

DUART EQU $60041 ;Direccion base la DUART MR1A EQU DUART+0 ;Mode Register A

MR2A EQU DUART+0

SRA EQU DUART+2 ;Status Register A

CSRA EQU DUART+4 ;Clock Select Register A CRA EQU DUART+4 ;Command Register A RBA EQU DUART+6 ;Receiver Buffer A TBA EQU DUART+6 ;Transmitter Buffer A

IPCR EQU DUART+8 ;Input Port Change Register ACRD EQU DUART+8 ;DUART Auxiliay Control Register ISR EQU DUART+10 ;Interrupt Status Register

IMR EQU DUART+10 ;Interrupt Mask Register CUR EQU DUART+12 ;Current MSB of Counter

CTUR EQU DUART+12 ;Cunter / Timer Upper Register CLR EQU DUART+14 ;Current LSB of Counter

CTLR EQU DUART+14 ;Counter / Timer Lower Register MR1B EQU DUART+16 ;Mode Register B

MR2B EQU DUART+16

SRB EQU DUART+18 ;Status register B

CSRB EQU DUART+20 ;Clock Select Register B CRB EQU DUART+20 ;Command Register B RBB EQU DUART+22 ;Receiver Buffer B TBB EQU DUART+22 ;Transmitter Buffer B IVR EQU DUART+24 ;Interrupt Vector Register ;VARIABLES DEL PROGRAMA

VARIABLES EQU $27000 CONSIGNA EQU VARIABLES+0 TREAL EQU VARIABLES+2 BAJO EQU VARIABLES+4 TEMP1 EQU VARIABLES+8 TEMP2 EQU VARIABLES+10 ADRESH EQU VARIABLES+12 ADRESL EQU VARIABLES+14 DECIMAL EQU VARIABLES+16 CADENA EQU VARIABLES+18

VECTOR_VIA EQU $2003E ;Direccion del Pseudo-vector para la ;interrupcion de la VIA

VECTOR_DUART EQU $20098 ;Direccion del Pseudo-vector para ;la interrupcion de la DUART

;INICIALIZACION DE VARIABLES CLR.W CONSIGNA CLR.W TREAL CLR.W TEMP2 CLR.W TEMP1 CLR.W ADRESH CLR.W ADRESL

ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA

SOLUCIÓN DE LAS PRÁCTICAS

115 CLR.W CADENA

CLR.L D6 ;Indica si el programa debe terminar MOVE.B #$FF,BAJO

;INICIALIZACION DE LOS PUERTOS DE LA VIA

MOVE.B #$00,DDRA ;Puerto A como entrada MOVE.B #$FF,DDRB ;Puerto B como salida ;CONFIGURACION DE LA INTERRUPCION DE LA DUART

MOVE.B IVR,TEMP1 ;Salva el vector de interrupcion ;anterior

ANDI.B #$BF,MR1B ;Modo de interrupcion por llegada de ;caracter válido

MOVE.B #$40,IVR ;Indica el numero de interrupcion

MOVE.L #TECLADO,VECTOR_DUART ;Direccion de la rutina de ;atencion a la interrupcion del teclado MOVE.B #$20,IMR ;Activa la interrupcion del teclado ;CONFIGURACION DE LA INTERRUPCION DE LA VIA

MOVE.B IER,TEMP2 ;Guarda el estado de las interrupciones ;de la VIA

MOVE.B #%01111111,IER ;Desactiva interrupciones

MOVE.L #INTERR,VECTOR_VIA ;Direccion de la rutina de ;atencion a la interrupcion de la VIA ANDI.B #%11111000,PCR ;Linea CA1 activa por flanco

;descendente ORI.B #%00001000,PCR

CLR.B IFR ;Limpia los flags

MOVE.B #%10000010,IER ;Activa la interrupcion de CA1 ;*********** INICIO DEL PROGRAMA PRINCIPAL *************** INICIO:

CMPI #0,D6

BNE FINAL ;Se ha pulsado la tecla escape y el programa ;debe terminar

JSR DEC_ADRES ;Calcula la temperatura real JSR CONTROL ;Algoritmo de control

;PRESENTA POR PANTALLA EL ESTADO DE LAS VARIABLES ESCRIBE:

LEA TEXT,A1 ;Borra la linea de la pantalla JSR PUTS

CLR.L D4

MOVE.B CONSIGNA,D4

JSR ITOA ;Convierte la consigna a una cadena de ;caracteres ASCII

LEA TEXT2,A1 JSR PUTS

LEA CADENA,A1 ;Carga la direccion de la cadena a ;visualizar

JSR PUTS ;Visualiza la consigna en la pantalla LEA TEXT1,A1

ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA

SOLUCIÓN DE LAS PRÁCTICAS

116 JSR PUTS

CLR.L D4

MOVE.B TREAL,D4

JSR ITOA ;Convierte la Temperatura real a una cadena de ;caracteres ASCII

LEA CADENA,A1 ;Carga la direccion de la cadena a visualizar JSR PUTS ;Visualiza la Temperatura real en la pantalla LEA TEXT4,A1

JSR PUTS CLR.L D4

MOVE.B DECIMAL,D4

JSR ITOA ;Convierte el decimal de la Temperatura real a ;una cadena de caracteres ASCII

LEA CADENA,A1 ;Carga la direccion de la cadena a visualizar JSR PUTS ;Visualiza el decimal de la Temperatura real en

;la pantalla LEA TEXT3,A1

JSR PUTS

JMP INICIO ;Vuelve al principio FINAL:

MOVE.B TEMP2,IER ;Desactiva interrupciones de la VIA MOVE.B #$00,IMR ;Desactiva interrupciones de la DUART MOVE.B TEMP1,IVR ;Restaura el vector de interrupcion TRAP #5 ;Fin del programa de control

;************** DEFINICION DE SUBRUTINAS ********************** ;Funcion ITOA: convierte un entero situado en el registro D4 a una ;cadena de caracteres ASCII cuya direccion de inicio es la variable ;CADENA

ITOA:

MOVE.L #10,-(A7) ;Base numerica de la conversion

MOVE.L #CADENA,-(A7) ;Direccion de inicio del String MOVE.L D4,-(A7) ;Dato a convertir

MOVE.L #19,D0 ;Funcion itoa() del programa monitor TRAP #0 ;Convierte un entero a ASCII

ADDA.L #12,A7 ;Limpia la pila RTS ;Fin de la subrutina

;Funcion PUTS: envia por el puerto serie una cadena de caracteres cuya ;direccion de inicio esta situada en el registro A1. El envio finaliza ;con el caracter $00

PUTS:

CMPI.B #$00,(A1) ;Comprueba si es el final de la cadena BEQ FIN_CHAR ;Si. Finaliza el envio

BUSY:

BTST #2,SRB ;Comprueba si el transmisor está preparado BEQ BUSY ;No esta preparado

ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA

SOLUCIÓN DE LAS PRÁCTICAS

117

MOVE.B (A1)+,TBB ;Si. Envia el caracter al puerto serie JMP PUTS ;Envia el caracter siguiente

FIN_CHAR:

RTS ;Finaliza el envio de caracteres

;******* RUTINAS DE ATENCION A LAS INTERRUPCIONES ************* ;Rutina INTERR: Rutina de atencion a la interrupcion provocada por un ;flanco descendente en la linea CA1 de la VIA

INTERR:

CLR.L D5 MOVE.B BAJO,D5 BEQ LEE_ALTO

MOVE.B PORTA,D5 ;Lee los 5 LSB de la conversion BTST #7,D5 ;Comprueba si es el byte bajo BNE EOI ;No es el correcto. Vuelve a leer MOVE.B D5,ADRESL

MOVE.B #$00,BAJO RTE

LEE_ALTO:

MOVE.B PORTA,D5 ;Lee los 5 MSB de la conversion BTST #7,D5 ;Comprueba si es el byte correcto BEQ EOI ;No es el correcto. Vuelve a leer

BCLR #7,D5 ;Borramos el bit indicador de byte alto MOVE.B D5,ADRESH MOVE.B #$FF,BAJO EOI: RTE DEC_ADRES: MOVE.B ADRESL,DECIMAL ANDI.B #%00000111,DECIMAL ;Reconstruimos el dato de 10 bits MOVE.B ADRESH,D1

MOVE.B ADRESL,D2 ASL #5,D1

OR D2,D1 ;El dato de 10 bits ya esta reconstruido ANDI.L #$000003FF,D1

DIVU.W #10,D1 ;Calcula el valor de la temperatura real ANDI.L #$000000FF,D1

CLR.W TREAL

MOVE.B D1,TREAL ;Guarda el valor de la temperatura real RTS

CONTROL:

CLR.L D7

MOVE.B CONSIGNA,D7 CMP.B TREAL,D7

BGT MAYOR ;Consigna > Temperatura real ;Consigna <= Temperatura real

MOVE.B #$00,PORTB ;Limpia el flag de CA1. Interrupcion ;servida

ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA

SOLUCIÓN DE LAS PRÁCTICAS

118 MAYOR:

MOVE.B #$FF,PORTB ;Limpia el flag de CA1. Interrupcion ;servida

RTS

;Rutina TECLADO: Rutina de atencion a la interrupcion provocada por la ;llegada de un caracter por el puerto serie

TECLADO:

CLR.L D3

MOVE.B RBB,D3 ;Lee el caracter recibido

CMPI.B #$1B,D3 ;¿Ha sido la tecla ESC? BEQ ESCAPE

CMPI.B #$2B,D3 ;¿Ha sido la tecla '+'? BEQ MAS

CMPI.B #$2D,D3 ;¿Ha sido la tecla '-'? BEQ MENOS

RTE ;Ha sido una tecla diferente de las anteriores.

;Fin de la rutina de atencion a la interrupcion del teclado ESCAPE:

MOVE.B #1,D6 ;Indicamos al programa principal que debe ;terminar

RTE ;Fin de la rutina de atencion a la interrupcion ;del teclado

MAS:

CMPI.B #100,CONSIGNA

BEQ MAXIMO ;La consigna esta a su valor maximo ADDQ.B #1,CONSIGNA ;No. Incrementa el valor de la consigna RTE ;Fin de la rutina de atencion a la interrupcion del teclado MAXIMO:

MOVE.B #100,CONSIGNA ;Consigna a su valor maximo

RTE ;Fin de la rutina de atencion a la interrupcion del teclado MENOS:

CMPI.B #0,CONSIGNA

BEQ MINIMO ;La consigna esta a su valor minimo SUBQ.B #1,CONSIGNA ;No. Decrementa el valor de la consigna RTE ;Fin de la rutina de atencion a la interrupcion del teclado MINIMO:

MOVE.B #0,CONSIGNA ;Consigna a su valor minimo

RTE ;Fin de la rutina de atencion a la interrupcion del teclado TEXT DB $08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$0 8,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$0 TEXT1 DB ' T. Real: ',$0 TEXT2 DB ' Consigna: ',$0 TEXT3 DB ' ',$0 TEXT4 DB '.',$0 END