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