martes, 10 de marzo de 2015

Trabajo Colaborativo 2

INSTRUMENTACION       MÉDICA
TRABAJO COLABORATIVO Nº 2
TERMOMETRO MEDICO

Actividad 6

Presentado por
Andrés Ricardo González Idarraga 
Luis Alberto Sánchez Correa - CC 16.786.134 de Cali
Henry Andrés Ramírez Claro – Código 17.593.993
Julián Andrés Ramírez


Presentado a:
ANDRES SAULO GOMEZ

GRUPO:   299016_5

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA –
UNAD- PALMIRA
OCTUBRE
2013





INTRODUCCION


El ejercicio desarrollado en esta práctica colaborativa que  plantearemos  a continuación  permitirá  la  verificación  de  la temperatura;  el  cual  se  puede  desarrollar  en varios  escenarios  a  ya  sea  a  nivel  industrial, comercial, hospitalario, etc. Esto nos puede permitir menores consumos, también control de temperaturas criticas. El  micro controlador  es  un  componente electrónico  en  donde  tenemos  miles  de transistores, el cual permite realizar un Trabajo según nuestras necesidades.

El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas son palabras atrevidas,  y  hace  un  cuarto  de  siglo  tal afirmación habría parecido absurda. Pero cada año,  el  microprocesador  se  acerca  más  al centro de nuestras vidas, forjándose un sitio en el  núcleo  de  una  máquina  tras  otra.  Su presencia  ha  comenzado  a  cambiar  la  forma en  que  percibimos  el  mundo  e  incluso  a nosotros mismos. Cada vez se hace más difícil pasar  por  alto  el  microprocesador  como  otro simple producto en  una  larga  línea  de innovaciones  tecnológicas.

La realización del siguiente trabajo permite obtener una rápida visualización de los contenidos del módulo instrumentación medica favoreciendo  el repaso y el aprendizaje de manera organizada y jerarquizada rápida detección de los conceptos clave Como Ingeniería Biomédica, Bioinstrumentación, Instrumentación Diagnostica, Bioseñal,  etc. así como de las relaciones entre los mismos y como La medición de los distintos parámetros  eléctricos que intervienen en un proceso de diagnóstico y terapia para diversas enfermedades comunes. Así el conocimiento de los principios de funcionamiento básico de los diferentes equipos de electro medicina nos permitirá mejorar las competencias como profesionales.



II.  PLANTEAMIENTO DEL PROBLEMA


Medidor de temperatura. Primero  debemos  especificar  qué  tipo  de micro controlador debemos o queremos utilizar; debemos proponer con que vamos a realizar la lectura  análoga  del  sistema,  también  si queremos  que  sea  visualizada  o  solamente indicadores de alta o baja. Especificaremos  el  rango  de  trabajo  y  para que  será  utilizado;  continuaremos  con  la estructura  básica  o  programación  para ingresar estos datos al micro controlador dando los datos de entrada y salidas que se utilizaran por  ultimo  compilaremos  el  programa  y haremos  la  verificación  por  medio  de  un software  que  nos  permita  trabajar  con micro controladores.

III.  JUSTIFICACIÓN


Actualmente  las  mediciones  de  la temperatura  para  procesos  industriales, comerciales, hospitalarios, residenciales es un proceso  que  se  vive  a  diario,   debido  a  esto nos  proponemos  hacer  un  proyecto  de  un medidor de temperatura; pretendiendo a través de  esta  propuesta  verificar  niveles  de temperatura para cualquier ámbito o necesidad planteada Controlador de temperatura




OBJETIVOS
 Objetivo General
·         Utilizar  un  sistema  de  verificación  de temperatura  para  ser  leído  por  medio  de  un micro controlador  por  medio  de  su  (ADC)  y verificado bien sea por un LCD, display, o leds.

B.  Objetivos específicos
·         Se  verificaran  diferentes  tipos  de micro controladores para llegar a utilizar el más adecuado,  también  esquemas  de programación para concluir en el mas practico.
·         Se  determinaran  los  componentes electrónicos a utilizar.
.



V.  MARCO REFERENCIAL
El  modelo  del  controlador  debe  contar  con indicadores o visualizadores; la temperatura es un  componente  importante  en  cualquier proceso,  por  tal  motivo  este  no  puede  ser excluido o estar ausente.

VI.  METODOLOGÍA
·         Investigación  acerca  de  instrucciones  de programación
·         Investigación  acerca  de  sensores  de temperatura eficientes
·         Determinación de componentes a utilizar
·         Verificar funcionamiento de programas
·         Organizar diagramas de flujo
·         Verificación de software a utilizar
.

CONTENIDO
1.     Programa
# include<16f877.h>
# device adc=10
# device *=16
# use delay (clock=4M)
#include <lcd.c>
Float temperatura;
void main()
{
//**************Convertidor de temperatura
//*****************************
setup_adc_ports (RA0_ANALOG);//entrada lm35
setup_adc (ADC_CLOCK_INTERNAL); //***convertidor analógico digital o reloj interno
setup_COUNTERS (RTCC_internal.rtcc_div_1) ; //marca división para convertidor
set_adc_channel (0);
//*********************************
//****************Inicio del LCD **************
Lcd_init ();//******inicio lcd
Lcd_gotoxy (2,1);
Printf (lcd_putc,"Termometro UNAD");
delay_ms(400);
//******************************************


while(true)
{
temperatura= (float)read_adc()/2 ;// lectura convertidor análogo digital temperatura
lcd_gotoxy (25,1);
printf (lcd_putc,"%f",temperatura); //*****%f variable flotante***
lcd_gotoxy(33,1);
printf(lcd_putc,"Grados");
delay_ms (300);
//***********************Logica para temperatura Normal
if(temperatura<=39&&temperatura>=36)
{
output_high(pin_c1); //Led normal ON
output_low(pin_c2); //Led hipotermia OFF
output_low(pin_c3); //Led Hipertermia ON
lcd_gotoxy (6,3); //
printf(lcd_putc,"Normal");
delay_ms(400);
}
//*******************Logica para temperatura alta
if(temperatura<=200&&temperatura>39)
{
output_low(pin_c1); //Led normal OFF
output_low(pin_c2); //Led hipotermia OFF
output_high(pin_c3); //Led Hipertermia ON
lcd_gotoxy (6,3); //
printf(lcd_putc,"Hipertermia");
delay_ms(400);
lcd_gotoxy (6,3);
printf(lcd_putc,"           ");
output_low(pin_c3); //Led Hipertermia OFF - BLINK
delay_ms(400);
}
//***************************Logica para temperatura es baja
if(temperatura<36&&temperatura>=2)
{
output_low(pin_c1); //Led normal OFF
output_high(pin_c2); //Led hipotermia ON
output_low(pin_c3); //Led Hipertermia OFF
lcd_gotoxy (6,3); //
printf(lcd_putc,"Hipotermia");
delay_ms(400);
lcd_gotoxy (6,3); //
printf(lcd_putc,"          ");
output_low(pin_c2); //Led hipotermia OFF - BLINK
delay_ms(400);
}
}
}








PROYECTO EN LENGUAJE ASEMBLER
; CLock : 4 Mhz                                 
; WDT: deshabilitado     
; codeprotect: off                                           
;************************************************************************************************************

LIST        p=16F877

0000:  MOVLW  04
0001:  MOVWF  0A
0002:  GOTO   40B
0003:  NOP
# include<16f876.h>
Standard Header file for the PIC16F877 device ////////////////
#device PIC16F877
#list
# device adc=10
# device *=16
# use delay (clock=4M)
*
0034:  MOVLW  33
0035:  MOVWF  04
0036:  BCF    03.7
0037:  MOVF   00,W
0038:  BTFSC  03.2
0039:  GOTO   048
003A:  MOVLW  01
003B:  MOVWF  78
003C:  CLRF   77
003D:  DECFSZ 77,F
003E:  GOTO   03D
003F:  DECFSZ 78,F
0040:  GOTO   03C
0041:  MOVLW  4A
0042:  MOVWF  77
0043:  DECFSZ 77,F
0044:  GOTO   043
0045:  GOTO   046
0046:  DECFSZ 00,F
0047:  GOTO   03A
0048:  RETURN
.................... # include <lcd.c>
.................... ///////////////////////////////////////////////////////////////////////////////
.................... ////                             LCD.C                                     ////
.................... ////                 Driver for common LCD modules                         ////
.................... ////                                                                       ////
.................... ////  lcd_init()   Must be called before any other function.               ////
.................... ////                                                                       ////
.................... ////  lcd_putc(c)  Will display c on the next position of the LCD.         ////
.................... ////                     The following have special meaning:               ////
.................... ////                      \f  Clear display                                ////
.................... ////                      \n  Go to start of second line                   ////
.................... ////                      \b  Move back one position                       ////
.................... ////                                                                       ////
.................... ////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)        ////
.................... ////                                                                       ////
.................... ////  lcd_getc(x,y)   Returns character at position x,y on LCD             ////
.................... ////                                                                       ////
.................... ////  CONFIGURATION                                                        ////
.................... ////  The LCD can be configured in one of two ways: a.) port access or     ////
.................... ////  b.) pin access.  Port access requires the entire 7 bit interface     ////
.................... ////  connected to one GPIO port, and the data bits (D4:D7 of the LCD)     ////
.................... ////  connected to sequential pins on the GPIO.  Pin access                ////
.................... ////  has no requirements, all 7 bits of the control interface can         ////
.................... ////  can be connected to any GPIO using several ports.                    ////
.................... ////                                                                       ////
.................... ////  To use port access, #define LCD_DATA_PORT to the SFR location of     ////
.................... ////  of the GPIO port that holds the interface, -AND- edit LCD_PIN_MAP    ////
.................... ////  of this file to configure the pin order.  If you are using a         ////
.................... ////  baseline PIC (PCB), then LCD_OUTPUT_MAP and LCD_INPUT_MAP also must  ////
.................... ////  be defined.                                                          ////
.................... ////                                                                       ////
.................... ////  Example of port access:                                              ////
.................... ////     #define LCD_DATA_PORT getenv("SFR:PORTD")                         ////
.................... ////                                                                       ////
.................... ////  To use pin access, the following pins must be defined:               ////
.................... ////     LCD_ENABLE_PIN                                                    ////
.................... ////     LCD_RS_PIN                                                        ////
.................... ////     LCD_RW_PIN                                                        ////
.................... ////     LCD_DATA4                                                         ////
.................... ////     LCD_DATA5                                                         ////
.................... ////     LCD_DATA6                                                         ////
.................... ////     LCD_DATA7                                                         ////
.................... ////                                                                       ////
.................... ////  Example of pin access:                                               ////
.................... ////     #define LCD_ENABLE_PIN  PIN_E0                                    ////
.................... ////     #define LCD_RS_PIN      PIN_E1                                    ////
.................... ////     #define LCD_RW_PIN      PIN_E2                                    ////
.................... ////     #define LCD_DATA4       PIN_D4                                    ////
.................... ////     #define LCD_DATA5       PIN_D5                                    ////
.................... ////     #define LCD_DATA6       PIN_D6                                    ////
.................... ////     #define LCD_DATA7       PIN_D7                                    ////
.................... ////                                                                       ////
.................... ///////////////////////////////////////////////////////////////////////////////
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           ////
.................... //// This source code may only be used by licensed users of the CCS C  ////
.................... //// compiler.  This source code may only be distributed to other      ////
.................... //// licensed users of the CCS C compiler.  No other use, reproduction ////
.................... //// or distribution is permitted without written permission.          ////
.................... //// Derivative programs created using this software in object code    ////
.................... //// form are not restricted in any way.                               ////
.................... ///////////////////////////////////////////////////////////////////////////
.................... 
.................... // define the pinout.
.................... // only required if port access is being used.
.................... typedef struct  
.................... {                            // This structure is overlayed
....................    BOOLEAN enable;           // on to an I/O port to gain
....................    BOOLEAN rs;               // access to the LCD pins.
....................    BOOLEAN rw;               // The bits are allocated from
....................    BOOLEAN unused;           // low order up.  ENABLE will
....................    int     data : 4;         // be LSB pin of that port.
....................   #if defined(__PCD__)       // The port used will be LCD_DATA_PORT.
....................    int    reserved: 8;
....................   #endif
.................... } LCD_PIN_MAP;
.................... 
.................... // this is to improve compatability with previous LCD drivers that accepted
.................... // a define labeled 'use_portb_lcd' that configured the LCD onto port B.
.................... #if ((defined(use_portb_lcd)) && (use_portb_lcd==TRUE))
....................  #define LCD_DATA_PORT getenv("SFR:PORTB")
.................... #endif
.................... 
.................... #if defined(__PCB__)
....................    // these definitions only need to be modified for baseline PICs.
....................    // all other PICs use LCD_PIN_MAP or individual LCD_xxx pin definitions.
.................... /*                                    EN, RS,   RW,   UNUSED,  DATA  */
....................  const LCD_PIN_MAP LCD_OUTPUT_MAP =  {0,  0,    0,    0,       0};
....................  const LCD_PIN_MAP LCD_INPUT_MAP =   {0,  0,    0,    0,       0xF};
.................... #endif
.................... 
.................... ////////////////////// END CONFIGURATION ///////////////////////////////////
.................... 
.................... #ifndef LCD_ENABLE_PIN
....................    #define lcd_output_enable(x) lcdlat.enable=x
....................    #define lcd_enable_tris()   lcdtris.enable=0
.................... #else
....................    #define lcd_output_enable(x) output_bit(LCD_ENABLE_PIN, x)
....................    #define lcd_enable_tris()  output_drive(LCD_ENABLE_PIN)
.................... #endif
.................... 
.................... #ifndef LCD_RS_PIN
....................    #define lcd_output_rs(x) lcdlat.rs=x
....................    #define lcd_rs_tris()   lcdtris.rs=0
.................... #else
....................    #define lcd_output_rs(x) output_bit(LCD_RS_PIN, x)
....................    #define lcd_rs_tris()  output_drive(LCD_RS_PIN)
.................... #endif
.................... 
.................... #ifndef LCD_RW_PIN
....................    #define lcd_output_rw(x) lcdlat.rw=x
....................    #define lcd_rw_tris()   lcdtris.rw=0
.................... #else
....................    #define lcd_output_rw(x) output_bit(LCD_RW_PIN, x)
....................    #define lcd_rw_tris()  output_drive(LCD_RW_PIN)
.................... #endif
.................... 
.................... // original version of this library incorrectly labeled LCD_DATA0 as LCD_DATA4,
.................... // LCD_DATA1 as LCD_DATA5, and so on.  this block of code makes the driver
.................... // compatible with any code written for the original library
.................... #if (defined(LCD_DATA0) && defined(LCD_DATA1) && defined(LCD_DATA2) && defined(LCD_DATA3) && !defined(LCD_DATA4) && !defined(LCD_DATA5) && !defined(LCD_DATA6) && !defined(LCD_DATA7))
....................    #define  LCD_DATA4    LCD_DATA0
....................    #define  LCD_DATA5    LCD_DATA1
....................    #define  LCD_DATA6    LCD_DATA2
....................    #define  LCD_DATA7    LCD_DATA3
.................... #endif
.................... 
.................... #ifndef LCD_DATA4
.................... #ifndef LCD_DATA_PORT
....................    #if defined(__PCB__)
....................       #define LCD_DATA_PORT      0x06     //portb
....................       #define set_tris_lcd(x)   set_tris_b(x)
....................    #else
....................      #if defined(PIN_D0)
....................       #define LCD_DATA_PORT      getenv("SFR:PORTD")     //portd
....................      #else
....................       #define LCD_DATA_PORT      getenv("SFR:PORTB")     //portb
....................      #endif
....................    #endif   
.................... #endif
.................... 
.................... #if defined(__PCB__)
....................    LCD_PIN_MAP lcd, lcdlat;
....................    #byte lcd = LCD_DATA_PORT
....................    #byte lcdlat = LCD_DATA_PORT
.................... #elif defined(__PCM__)
....................    LCD_PIN_MAP lcd, lcdlat, lcdtris;
....................    #byte lcd = LCD_DATA_PORT
....................    #byte lcdlat = LCD_DATA_PORT
....................    #byte lcdtris = LCD_DATA_PORT+0x80
.................... #elif defined(__PCH__)
....................    LCD_PIN_MAP lcd, lcdlat, lcdtris;
....................    #byte lcd = LCD_DATA_PORT
....................    #byte lcdlat = LCD_DATA_PORT+9
....................    #byte lcdtris = LCD_DATA_PORT+0x12
.................... #elif defined(__PCD__)
....................    LCD_PIN_MAP lcd, lcdlat, lcdtris;
....................    #word lcd = LCD_DATA_PORT
....................    #word lcdlat = LCD_DATA_PORT+2
....................    #word lcdtris = LCD_DATA_PORT-0x02
.................... #endif
.................... #endif   //LCD_DATA4 not defined
.................... 
.................... #ifndef LCD_TYPE
....................    #define LCD_TYPE 2           // 0=5x7, 1=5x10, 2=2 lines
.................... #endif
.................... 
.................... #ifndef LCD_LINE_TWO
....................    #define LCD_LINE_TWO 0x40    // LCD RAM address for the second line
.................... #endif
.................... 
.................... BYTE const LCD_INIT_STRING[4] = {0x20 | (LCD_TYPE << 2), 0xc, 1, 6};
....................                              // These bytes need to be sent to the LCD
....................                              // to start it up.
.................... 
.................... BYTE lcd_read_nibble(void);
.................... 
.................... BYTE lcd_read_byte(void)
.................... {
....................    BYTE low,high;
.................... 
....................  #if defined(__PCB__)
....................    set_tris_lcd(LCD_INPUT_MAP);
....................  #else
....................   #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
....................    output_float(LCD_DATA4);
....................    output_float(LCD_DATA5);
....................    output_float(LCD_DATA6);
....................    output_float(LCD_DATA7);
....................   #else
....................    lcdtris.data = 0xF;
*
005C:  MOVLW  0F
005D:  BSF    03.5
005E:  ANDWF  06,W
005F:  IORLW  F0
0060:  MOVWF  06
....................   #endif
....................  #endif
....................         
....................    lcd_output_rw(1);
0061:  BCF    03.5
0062:  BSF    06.2
....................    delay_cycles(1);
0063:  NOP
....................    lcd_output_enable(1);
0064:  BSF    06.0
....................    delay_cycles(1);
0065:  NOP
....................    high = lcd_read_nibble();
0066:  CALL   055
0067:  MOVF   78,W
0068:  MOVWF  3A
....................       
....................    lcd_output_enable(0);
0069:  BCF    06.0
....................    delay_cycles(1);
006A:  NOP
....................    lcd_output_enable(1);
006B:  BSF    06.0
....................    delay_us(1);
006C:  NOP
....................    low = lcd_read_nibble();
006D:  CALL   055
006E:  MOVF   78,W
006F:  MOVWF  39
....................       
....................    lcd_output_enable(0);
0070:  BCF    06.0
.................... 
....................  #if defined(__PCB__)
....................    set_tris_lcd(LCD_INPUT_MAP);
....................  #else
....................   #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
....................    output_drive(LCD_DATA4);
....................    output_drive(LCD_DATA5);
....................    output_drive(LCD_DATA6);
....................    output_drive(LCD_DATA7);
....................   #else
....................    lcdtris.data = 0x0;
0071:  MOVLW  0F
0072:  BSF    03.5
0073:  ANDWF  06,W
0074:  MOVWF  06
....................   #endif
....................  #endif
.................... 
....................    return( (high<<4) | low);
0075:  BCF    03.5
0076:  SWAPF  3A,W
0077:  MOVWF  77
0078:  MOVLW  F0
0079:  ANDWF  77,F
007A:  MOVF   77,W
007B:  IORWF  39,W
007C:  MOVWF  78
.................... }
.................... 
.................... BYTE lcd_read_nibble(void)
.................... {
....................   #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
....................    BYTE n = 0x00;
.................... 
....................    /* Read the data port */
....................    n |= input(LCD_DATA4);
....................    n |= input(LCD_DATA5) << 1;
....................    n |= input(LCD_DATA6) << 2;
....................    n |= input(LCD_DATA7) << 3;
....................    
....................    return(n);
....................   #else
....................    return(lcd.data);
*
0055:  MOVF   06,W
0056:  MOVWF  77
0057:  SWAPF  06,W
0058:  ANDLW  0F
0059:  MOVWF  78
....................   #endif
.................... }
005A:  RETURN
.................... 
.................... void lcd_send_nibble(BYTE n)
.................... {
....................   #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
....................    /* Write to the data port */
....................    output_bit(LCD_DATA4, bit_test(n, 0));
....................    output_bit(LCD_DATA5, bit_test(n, 1));
....................    output_bit(LCD_DATA6, bit_test(n, 2));
....................    output_bit(LCD_DATA7, bit_test(n, 3));
....................   #else      
....................    lcdlat.data = n;
*
0049:  SWAPF  3A,W
004A:  ANDLW  F0
004B:  MOVWF  77
004C:  MOVLW  0F
004D:  ANDWF  06,W
004E:  IORWF  77,W
004F:  MOVWF  06
....................   #endif
....................       
....................    delay_cycles(1);
0050:  NOP
....................    lcd_output_enable(1);
0051:  BSF    06.0
....................    delay_us(2);
0052:  GOTO   053
....................    lcd_output_enable(0);
0053:  BCF    06.0
.................... }
0054:  RETURN
.................... 
.................... void lcd_send_byte(BYTE address, BYTE n)
.................... {
....................    lcd_output_rs(0);
*
005B:  BCF    06.1
....................    while ( bit_test(lcd_read_byte(),7) ) ;
*
007D:  MOVF   78,W
007E:  MOVWF  39
007F:  BTFSC  39.7
0080:  GOTO   05C
....................    lcd_output_rs(address);
0081:  BTFSS  37.0
0082:  BCF    06.1
0083:  BTFSC  37.0
0084:  BSF    06.1
....................    delay_cycles(1);
0085:  NOP
....................    lcd_output_rw(0);
0086:  BCF    06.2
....................    delay_cycles(1);
0087:  NOP
....................    lcd_output_enable(0);
0088:  BCF    06.0
....................    lcd_send_nibble(n >> 4);
0089:  SWAPF  38,W
008A:  MOVWF  39
008B:  MOVLW  0F
008C:  ANDWF  39,F
008D:  MOVF   39,W
008E:  MOVWF  3A
008F:  CALL   049
....................    lcd_send_nibble(n & 0xf);
0090:  MOVF   38,W
0091:  ANDLW  0F
0092:  MOVWF  39
0093:  MOVWF  3A
0094:  CALL   049
.................... }
0095:  RETURN
.................... 
.................... void lcd_init(void) 
.................... {
....................    BYTE i;
.................... 
....................  #if defined(__PCB__)
....................    set_tris_lcd(LCD_OUTPUT_MAP);
....................  #else
....................   #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7))
....................    output_drive(LCD_DATA4);
....................    output_drive(LCD_DATA5);
....................    output_drive(LCD_DATA6);
....................    output_drive(LCD_DATA7);
....................   #else
....................    lcdtris.data = 0x0;
0096:  MOVLW  0F
0097:  BSF    03.5
0098:  ANDWF  06,W
0099:  MOVWF  06
....................   #endif
....................    lcd_enable_tris();
009A:  BCF    06.0
....................    lcd_rs_tris();
009B:  BCF    06.1
....................    lcd_rw_tris();
009C:  BCF    06.2
....................  #endif
.................... 
....................    lcd_output_rs(0);
009D:  BCF    03.5
009E:  BCF    06.1
....................    lcd_output_rw(0);
009F:  BCF    06.2
....................    lcd_output_enable(0);
00A0:  BCF    06.0
....................     
....................    delay_ms(15);
00A1:  MOVLW  0F
00A2:  MOVWF  33
00A3:  CALL   034
....................    for(i=1;i<=3;++i)
00A4:  MOVLW  01
00A5:  MOVWF  25
00A6:  MOVF   25,W
00A7:  SUBLW  03
00A8:  BTFSS  03.0
00A9:  GOTO   0B2
....................    {
....................        lcd_send_nibble(3);
00AA:  MOVLW  03
00AB:  MOVWF  3A
00AC:  CALL   049
....................        delay_ms(5);
00AD:  MOVLW  05
00AE:  MOVWF  33
00AF:  CALL   034
....................    }
00B0:  INCF   25,F
00B1:  GOTO   0A6
....................     
....................    lcd_send_nibble(2);
00B2:  MOVLW  02
00B3:  MOVWF  3A
00B4:  CALL   049
....................    for(i=0;i<=3;++i)
00B5:  CLRF   25
00B6:  MOVF   25,W
00B7:  SUBLW  03
00B8:  BTFSS  03.0
00B9:  GOTO   0C3
....................       lcd_send_byte(0,LCD_INIT_STRING[i]);
00BA:  MOVF   25,W
00BB:  CALL   004
00BC:  MOVWF  26
00BD:  CLRF   37
00BE:  MOVF   26,W
00BF:  MOVWF  38
00C0:  CALL   05B
00C1:  INCF   25,F
00C2:  GOTO   0B6
.................... }
00C3:  BCF    0A.3
00C4:  BCF    0A.4
00C5:  GOTO   43B (RETURN)
.................... 
.................... void lcd_gotoxy(BYTE x, BYTE y)
.................... {
....................    BYTE address;
.................... 
....................    if(y!=1)
00C6:  DECFSZ 34,W
00C7:  GOTO   0C9
00C8:  GOTO   0CC
....................       address=LCD_LINE_TWO;
00C9:  MOVLW  40
00CA:  MOVWF  35
....................    else
00CB:  GOTO   0CD
....................       address=0;
00CC:  CLRF   35
....................      
....................    address+=x-1;
00CD:  MOVLW  01
00CE:  SUBWF  33,W
00CF:  ADDWF  35,F
....................    lcd_send_byte(0,0x80|address);
00D0:  MOVF   35,W
00D1:  IORLW  80
00D2:  MOVWF  36
00D3:  CLRF   37
00D4:  MOVF   36,W
00D5:  MOVWF  38
00D6:  CALL   05B
.................... }
00D7:  RETURN
.................... 
.................... void lcd_putc(char c)
.................... {
....................    switch (c)
....................    {
00D8:  MOVF   32,W
00D9:  XORLW  0C
00DA:  BTFSC  03.2
00DB:  GOTO   0E3
00DC:  XORLW  06
00DD:  BTFSC  03.2
00DE:  GOTO   0EB
00DF:  XORLW  02
00E0:  BTFSC  03.2
00E1:  GOTO   0F1
00E2:  GOTO   0F6
....................       case '\f'   :  lcd_send_byte(0,1);
00E3:  CLRF   37
00E4:  MOVLW  01
00E5:  MOVWF  38
00E6:  CALL   05B
....................                      delay_ms(2);
00E7:  MOVLW  02
00E8:  MOVWF  33
00E9:  CALL   034
....................                      break;
00EA:  GOTO   0FC
....................                      
....................       case '\n'   : lcd_gotoxy(1,2);        break;
00EB:  MOVLW  01
00EC:  MOVWF  33
00ED:  MOVLW  02
00EE:  MOVWF  34
00EF:  CALL   0C6
00F0:  GOTO   0FC
....................      
....................       case '\b'   : lcd_send_byte(0,0x10);  break;
00F1:  CLRF   37
00F2:  MOVLW  10
00F3:  MOVWF  38
00F4:  CALL   05B
00F5:  GOTO   0FC
....................      
....................       default     : lcd_send_byte(1,c);     break;
00F6:  MOVLW  01
00F7:  MOVWF  37
00F8:  MOVF   32,W
00F9:  MOVWF  38
00FA:  CALL   05B
00FB:  GOTO   0FC
....................    }
.................... }
00FC:  RETURN
....................  
.................... char lcd_getc(BYTE x, BYTE y)
.................... {
....................    char value;
.................... 
....................    lcd_gotoxy(x,y);
....................    while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
....................    lcd_output_rs(1);
....................    value = lcd_read_byte();
....................    lcd_output_rs(0);
....................    
....................    return(value);
.................... }
.................... 
.................... Float temperatura;
.................... void main()
.................... {
*
0033:  DATA 00,00
*
040B:  CLRF   04
040C:  BCF    03.7
040D:  MOVLW  1F
040E:  ANDWF  03,F
040F:  BSF    03.5
0410:  BSF    1F.0
0411:  BSF    1F.1
0412:  BSF    1F.2
0413:  BCF    1F.3
.................... //**************Convertidor de temperatura 
.................... //*****************************
.................... setup_adc_ports (RA0_ANALOG);//entrada lm35
*
0417:  BSF    03.5
0418:  BCF    1F.0
0419:  BSF    1F.1
041A:  BSF    1F.2
041B:  BSF    1F.3
.................... setup_adc (ADC_CLOCK_INTERNAL); //***convertidor analógico digital o reloj interno
041C:  BCF    03.5
041D:  BSF    1F.6
041E:  BSF    1F.7
041F:  BSF    03.5
0420:  BSF    1F.7
0421:  BCF    03.5
0422:  BSF    1F.0
.................... setup_COUNTERS (RTCC_internal.rtcc_div_1) ; //marca división para convertidor
0423:  MOVLW  08
0424:  MOVWF  77
0425:  CLRF   01
0426:  MOVLW  81
0427:  MOVWF  04
0428:  BCF    03.7
0429:  MOVF   00,W
042A:  ANDLW  C0
042B:  IORLW  07
042C:  MOVWF  00
042D:  CLRWDT
042E:  MOVF   00,W
042F:  ANDLW  C7
0430:  BTFSC  77.3
0431:  ANDLW  C0
0432:  IORWF  77,W
0433:  MOVWF  00
.................... set_adc_channel (0);
0434:  MOVLW  00
0435:  MOVWF  78
0436:  MOVF   1F,W
0437:  ANDLW  C7
0438:  IORWF  78,W
0439:  MOVWF  1F
.................... //*********************************
.................... //****************Inicio del LCD **************
.................... Lcd_init ();//******inicio lcd
043A:  GOTO   096
.................... Lcd_gotoxy (2,1);
043B:  MOVLW  02
043C:  MOVWF  33
043D:  MOVLW  01
043E:  MOVWF  34
043F:  CALL   0C6
.................... Printf (lcd_putc,"Termometro UNAD");
0440:  MOVLW  0C
0441:  BSF    03.6
0442:  MOVWF  0D
0443:  MOVLW  00
0444:  MOVWF  0F
0445:  BCF    03.6
0446:  CALL   0FD
.................... delay_ms(400);
0447:  MOVLW  02
0448:  MOVWF  25
0449:  MOVLW  C8
044A:  MOVWF  33
044B:  CALL   034
044C:  DECFSZ 25,F
044D:  GOTO   449
.................... //******************************************
.................... 
.................... 
.................... while(true)
.................... {
.................... temperatura= (float)read_adc()/2 ;// lectura convertidor análogo digital temperatura
044E:  BSF    1F.2
044F:  BTFSC  1F.2
0450:  GOTO   44F
0451:  MOVF   1E,W
0452:  MOVWF  7A
0453:  BSF    03.5
0454:  MOVF   1E,W
0455:  BCF    03.5
0456:  MOVWF  25
0457:  MOVF   1E,W
0458:  MOVWF  26
0459:  GOTO   143
045A:  MOVF   77,W
045B:  MOVWF  25
045C:  MOVF   78,W
045D:  MOVWF  26
045E:  MOVF   79,W
045F:  MOVWF  27
0460:  MOVF   7A,W
0461:  MOVWF  28
0462:  MOVWF  2C
0463:  MOVF   79,W
0464:  MOVWF  2B
0465:  MOVF   78,W
0466:  MOVWF  2A
0467:  MOVF   77,W
0468:  MOVWF  29
0469:  CLRF   30
046A:  CLRF   2F
046B:  CLRF   2E
046C:  MOVLW  80
046D:  MOVWF  2D
046E:  GOTO   162
046F:  MOVF   7A,W
0470:  MOVWF  23
0471:  MOVF   79,W
0472:  MOVWF  22
0473:  MOVF   78,W
0474:  MOVWF  21
0475:  MOVF   77,W
0476:  MOVWF  20
.................... lcd_gotoxy (25,1);
0477:  MOVLW  19
0478:  MOVWF  33
0479:  MOVLW  01
047A:  MOVWF  34
047B:  CALL   0C6
.................... printf (lcd_putc,"%f",temperatura); //*****%f variable flotante***
047C:  MOVLW  89
047D:  MOVWF  04
047E:  MOVF   23,W
047F:  MOVWF  28
0480:  MOVF   22,W
0481:  MOVWF  27
0482:  MOVF   21,W
0483:  MOVWF  26
0484:  MOVF   20,W
0485:  MOVWF  25
0486:  MOVLW  02
0487:  MOVWF  29
0488:  GOTO   270
.................... lcd_gotoxy(33,1);
0489:  MOVLW  21
048A:  MOVWF  33
048B:  MOVLW  01
048C:  MOVWF  34
048D:  CALL   0C6
.................... printf(lcd_putc,"Grados");
048E:  MOVLW  14
048F:  BSF    03.6
0490:  MOVWF  0D
0491:  MOVLW  00
0492:  MOVWF  0F
0493:  BCF    03.6
0494:  CALL   0FD
.................... delay_ms (300);
0495:  MOVLW  02
0496:  MOVWF  25
0497:  MOVLW  96
0498:  MOVWF  33
0499:  CALL   034
049A:  DECFSZ 25,F
049B:  GOTO   497
.................... //***********************Logica para temperatura Normal
.................... if(temperatura<=39&&temperatura>=36)
049C:  MOVF   23,W
049D:  MOVWF  28
049E:  MOVF   22,W
049F:  MOVWF  27
04A0:  MOVF   21,W
04A1:  MOVWF  26
04A2:  MOVF   20,W
04A3:  MOVWF  25
04A4:  CLRF   2C
04A5:  CLRF   2B
04A6:  MOVLW  1C
04A7:  MOVWF  2A
04A8:  MOVLW  84
04A9:  MOVWF  29
04AA:  CALL   3CC
04AB:  BTFSC  03.0
04AC:  GOTO   4AF
04AD:  BTFSS  03.2
04AE:  GOTO   4E7
04AF:  CLRF   28
04B0:  CLRF   27
04B1:  MOVLW  10
04B2:  MOVWF  26
04B3:  MOVLW  84
04B4:  MOVWF  25
04B5:  MOVF   23,W
04B6:  MOVWF  2C
04B7:  MOVF   22,W
04B8:  MOVWF  2B
04B9:  MOVF   21,W
04BA:  MOVWF  2A
04BB:  MOVF   20,W
04BC:  MOVWF  29
04BD:  CALL   3CC
04BE:  BTFSC  03.0
04BF:  GOTO   4C2
04C0:  BTFSS  03.2
04C1:  GOTO   4E7
.................... {
.................... output_high(pin_c1); //Led normal ON
04C2:  BCF    24.1
04C3:  MOVF   24,W
04C4:  BSF    03.5
04C5:  MOVWF  07
04C6:  BCF    03.5
04C7:  BSF    07.1
.................... output_low(pin_c2); //Led hipotermia OFF
04C8:  BCF    24.2
04C9:  MOVF   24,W
04CA:  BSF    03.5
04CB:  MOVWF  07
04CC:  BCF    03.5
04CD:  BCF    07.2
.................... output_low(pin_c3); //Led Hipertermia ON
04CE:  BCF    24.3
04CF:  MOVF   24,W
04D0:  BSF    03.5
04D1:  MOVWF  07
04D2:  BCF    03.5
04D3:  BCF    07.3
.................... lcd_gotoxy (6,3); //
04D4:  MOVLW  06
04D5:  MOVWF  33
04D6:  MOVLW  03
04D7:  MOVWF  34
04D8:  CALL   0C6
.................... printf(lcd_putc,"Normal");
04D9:  MOVLW  18
04DA:  BSF    03.6
04DB:  MOVWF  0D
04DC:  MOVLW  00
04DD:  MOVWF  0F
04DE:  BCF    03.6
04DF:  CALL   0FD
.................... delay_ms(400);
04E0:  MOVLW  02
04E1:  MOVWF  25
04E2:  MOVLW  C8
04E3:  MOVWF  33
04E4:  CALL   034
04E5:  DECFSZ 25,F
04E6:  GOTO   4E2
.................... } 
.................... //*******************Logica para temperatura alta
.................... if(temperatura<=200&&temperatura>39)
04E7:  MOVF   23,W
04E8:  MOVWF  28
04E9:  MOVF   22,W
04EA:  MOVWF  27
04EB:  MOVF   21,W
04EC:  MOVWF  26
04ED:  MOVF   20,W
04EE:  MOVWF  25
04EF:  CLRF   2C
04F0:  CLRF   2B
04F1:  MOVLW  48
04F2:  MOVWF  2A
04F3:  MOVLW  86
04F4:  MOVWF  29
04F5:  CALL   3CC
04F6:  BTFSC  03.0
04F7:  GOTO   4FA
04F8:  BTFSS  03.2
04F9:  GOTO   549
04FA:  CLRF   28
04FB:  CLRF   27
04FC:  MOVLW  1C
04FD:  MOVWF  26
04FE:  MOVLW  84
04FF:  MOVWF  25
0500:  MOVF   23,W
0501:  MOVWF  2C
0502:  MOVF   22,W
0503:  MOVWF  2B
0504:  MOVF   21,W
0505:  MOVWF  2A
0506:  MOVF   20,W
0507:  MOVWF  29
0508:  CALL   3CC
0509:  BTFSS  03.0
050A:  GOTO   549
.................... {
.................... output_low(pin_c1); //Led normal OFF
050B:  BCF    24.1
050C:  MOVF   24,W
050D:  BSF    03.5
050E:  MOVWF  07
050F:  BCF    03.5
0510:  BCF    07.1
.................... output_low(pin_c2); //Led hipotermia OFF
0511:  BCF    24.2
0512:  MOVF   24,W
0513:  BSF    03.5
0514:  MOVWF  07
0515:  BCF    03.5
0516:  BCF    07.2
.................... output_high(pin_c3); //Led Hipertermia ON
0517:  BCF    24.3
0518:  MOVF   24,W
0519:  BSF    03.5
051A:  MOVWF  07
051B:  BCF    03.5
051C:  BSF    07.3
.................... lcd_gotoxy (6,3); //
051D:  MOVLW  06
051E:  MOVWF  33
051F:  MOVLW  03
0520:  MOVWF  34
0521:  CALL   0C6
.................... printf(lcd_putc,"Hipertermia");
0522:  MOVLW  1C
0523:  BSF    03.6
0524:  MOVWF  0D
0525:  MOVLW  00
0526:  MOVWF  0F
0527:  BCF    03.6
0528:  CALL   0FD
.................... delay_ms(400);
0529:  MOVLW  02
052A:  MOVWF  25
052B:  MOVLW  C8
052C:  MOVWF  33
052D:  CALL   034
052E:  DECFSZ 25,F
052F:  GOTO   52B
.................... lcd_gotoxy (6,3);  
0530:  MOVLW  06
0531:  MOVWF  33
0532:  MOVLW  03
0533:  MOVWF  34
0534:  CALL   0C6
.................... printf(lcd_putc,"           ");
0535:  MOVLW  22
0536:  BSF    03.6
0537:  MOVWF  0D
0538:  MOVLW  00
0539:  MOVWF  0F
053A:  BCF    03.6
053B:  CALL   0FD
.................... output_low(pin_c3); //Led Hipertermia OFF - BLINK
053C:  BCF    24.3
053D:  MOVF   24,W
053E:  BSF    03.5
053F:  MOVWF  07
0540:  BCF    03.5
0541:  BCF    07.3
.................... delay_ms(400);
0542:  MOVLW  02
0543:  MOVWF  25
0544:  MOVLW  C8
0545:  MOVWF  33
0546:  CALL   034
0547:  DECFSZ 25,F
0548:  GOTO   544
.................... }
.................... //***************************Logica para temperatura es baja
.................... if(temperatura<36&&temperatura>=2)
0549:  MOVF   23,W
054A:  MOVWF  28
054B:  MOVF   22,W
054C:  MOVWF  27
054D:  MOVF   21,W
054E:  MOVWF  26
054F:  MOVF   20,W
0550:  MOVWF  25
0551:  CLRF   2C
0552:  CLRF   2B
0553:  MOVLW  10
0554:  MOVWF  2A
0555:  MOVLW  84
0556:  MOVWF  29
0557:  CALL   3CC
0558:  BTFSS  03.0
0559:  GOTO   5AA
055A:  CLRF   28
055B:  CLRF   27
055C:  CLRF   26
055D:  MOVLW  80
055E:  MOVWF  25
055F:  MOVF   23,W
0560:  MOVWF  2C
0561:  MOVF   22,W
0562:  MOVWF  2B
0563:  MOVF   21,W
0564:  MOVWF  2A
0565:  MOVF   20,W
0566:  MOVWF  29
0567:  CALL   3CC
0568:  BTFSC  03.0
0569:  GOTO   56C
056A:  BTFSS  03.2
056B:  GOTO   5AA
.................... {
.................... output_low(pin_c1); //Led normal OFF
056C:  BCF    24.1
056D:  MOVF   24,W
056E:  BSF    03.5
056F:  MOVWF  07
0570:  BCF    03.5
0571:  BCF    07.1
.................... output_high(pin_c2); //Led hipotermia ON
0572:  BCF    24.2
0573:  MOVF   24,W
0574:  BSF    03.5
0575:  MOVWF  07
0576:  BCF    03.5
0577:  BSF    07.2
.................... output_low(pin_c3); //Led Hipertermia OFF
0578:  BCF    24.3
0579:  MOVF   24,W
057A:  BSF    03.5
057B:  MOVWF  07
057C:  BCF    03.5
057D:  BCF    07.3
.................... lcd_gotoxy (6,3); //
057E:  MOVLW  06
057F:  MOVWF  33
0580:  MOVLW  03
0581:  MOVWF  34
0582:  CALL   0C6
.................... printf(lcd_putc,"Hipotermia");
0583:  MOVLW  28
0584:  BSF    03.6
0585:  MOVWF  0D
0586:  MOVLW  00
0587:  MOVWF  0F
0588:  BCF    03.6
0589:  CALL   0FD
.................... delay_ms(400); 
058A:  MOVLW  02
058B:  MOVWF  25
058C:  MOVLW  C8
058D:  MOVWF  33
058E:  CALL   034
058F:  DECFSZ 25,F
0590:  GOTO   58C
.................... lcd_gotoxy (6,3); //
0591:  MOVLW  06
0592:  MOVWF  33
0593:  MOVLW  03
0594:  MOVWF  34
0595:  CALL   0C6
.................... printf(lcd_putc,"          ");
0596:  MOVLW  2E
0597:  BSF    03.6
0598:  MOVWF  0D
0599:  MOVLW  00
059A:  MOVWF  0F
059B:  BCF    03.6
059C:  CALL   0FD
.................... output_low(pin_c2); //Led hipotermia OFF - BLINK
059D:  BCF    24.2
059E:  MOVF   24,W
059F:  BSF    03.5
05A0:  MOVWF  07
05A1:  BCF    03.5
05A2:  BCF    07.2
.................... delay_ms(400);
05A3:  MOVLW  02
05A4:  MOVWF  25
05A5:  MOVLW  C8
05A6:  MOVWF  33
05A7:  CALL   034
05A8:  DECFSZ 25,F
05A9:  GOTO   5A5
.................... }
.................... }
05AA:  GOTO   44E
.................... }
.................... 
.................... 
05AB:  SLEEP



BIBLIOGRAFIA

·         Quintero, J. (2013).  Instrumentación Médica (1 edición), Bogotá,  Universidad Nacional Abierta Y A Distancia.
·         http://proteus.soft112.com/
·         www.monografias.com/trabajos11
·         www.renovae.org
·         www.microchip.com

No hay comentarios.:

Publicar un comentario