Sie sind auf Seite 1von 16

Captulo 4.

Proyectos con el PIC16C71

Captulo 4

Proyectos con el PIC16C71

Termmetro digital con mdulo LCD Adquisicin de datos va RS-232

Curso avanzado de Microcontroladores PIC

117

Captulo 4. Proyectos con el PIC16C71

118

Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71

Proyecto N 1: Termmetro digital con mdulo LCD


Como ejemplo de la utilizacin del convertidor A/D del PIC16C71, vamos a implementar un termmetro que muestra la temperatura medida, en grados centgrados, en la pantalla de un display o mdulo LCD. Para medir la temperatura emplearemos un LM35. Este sensor tiene tres pines: Alimentacin, tierra y la salida anloga. Este dispositivo presenta en su salida una variacin de 10 mV/C, por lo tanto, el valor de la temperatura se puede obtener directamente, sin necesidad de hacer modificaciones al dato obtenido. El LM35 puede trabajar en un rango de temperatura entre -55 y 150C, la fuente de alimentacin positiva puede estar entre 4 y 30 Voltios. Adems, su precisin es de 0.5C. Este elemento viene en un encapsulado plstico TO-92 y tiene la misma apariencia de un transistor. El mdulo de cristal lquido se conecta al microcontrolador utilizando interface de 4 bits. En este ejercicio, conectamos la entrada anloga al pin RA2/AN2 del microcontrolador y el voltaje de referencia del convertidor anlogo a digital, se configura para que sea el voltaje de alimentacin del PIC (VDD). En la figura 4.1 se muestra el diagrama esquemtico del termmetro digital.
+5V 14 VDD 4 MCLR RB7 20pF 4 MHz 20pF LM35 RB6 16 OSC1 OSC2 RB5 RB4 13 12 11 10 14 13 12 11 D7 D6 +5V 2 +VCC

Mdulo LCD

D5 D4

+5V

PIC16C71

15

VO

5K

+5V RA2/AN2 VSS 5

RB1 RB0

7 6

6 4

E RS R/W GND 1 5

Ajuste de contraste

Figura 4.1. Diagrama esquemtico del termmetro digital con PIC La mxima lectura del convertidor anlogo a digital (0FFH) se obtiene cuando la entrada anloga sea superior a 5 voltios. De tal manera, que si hacemos la divisin de 5 Voltios entre 255 (FFH), obtenemos una relacin de aproximadamente 20 mV por unidad. Por ejemplo, si la entrada anloga est en 160 mV (es decir 16C), el valor
Curso avanzado de Microcontroladores PIC

119

Captulo 4. Proyectos con el PIC16C71

digital que entrega el convertidor es 8 (160/20). Dado lo anterior, el valor que entrega el convertidor se debe duplicar para compensar la diferencia (variacin de 10mV/C y resolucin de lectura de 20mV). Aunque esto hace que la lectura siempre sea un nmero par, se puede aceptar en vista de que se trata de ejercicios netamente didcticos. Para solucionar el problema de tener que duplicar el valor leido y garantizar que el resultado de la conversin corresponda a la temperatura real, se puede utilizar un amplificador operacional para amplificar la seal entregada por el sensor LM35, dicho operacional se debe configurar como amplificador no inversor de ganancia 2. De esta forma, con el valor anlogo adecuado en la entrada del convertidor y con la fuente de alimentacin como voltaje de referencia, se puede obtener una lectura precisa y directa. En la figura 4.2 se muestra el diagrama del circuito que utiliza el amplificador operacional, si se utiliza este montaje se puede obviar la parte del programa que duplica el valor ledo (la parte sombreada en el listado).
LM35 +5V 5+ +5V 8 LM358a 7 64 10F 16V + 5.1K 3 + LM358b 2 Potencimetro de 10K para ajustar la ganancia 1 Salida de voltaje equivalente al doble del valor entregado por el sensor LM35

Figura 4.2. Circuito para acople del sensor LM35 En la figura 4.3 se muestra el listado del programa, este incluye todo el programa de la interface a 4 bits con el display de cristal lquido, una seccin que se encarga de leer el convertidor anlogo a digital, y una seccin que convierte el dato hexadecimal obtenido luego de la conversin, a su equivalente en decimal, para ser mostrado en la pantalla. Pasos a seguir para hacer una conversin A/D 1. Configure los pines del puerto A, los que vayan a trabajar como entradas anlogas deben ser configurados como entradas en el registro TRISA. 2. Configure las entradas anlogas y el voltaje de referencia (interno o externo) en el registro ADCON1. 3. Seleccione el canal de entrada en el registro ADCON0. 4. Seleccione el reloj de la conversin en ADCON0. 5. Encienda el convertidor (bit ADON del registro ADCON0) para que se tome la muestra de la seal anloga. 6. Si se va a utilizar la interrupcin se debe borrar el bit ADIF del registro ADCON0 y poner en "1" el bit ADIE y el bit GIE del registro INTCON. 7. Luego de iniciar el convertidor se hace un pequeo retardo (para el muestreo). 8. Se debe iniciar la conversin mediante el bit GO/DONE del registro ADCON0.
120
Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71

9. Esperar a que se termine la conversin probando el estado del bit GO/DONE o esperar el cambio en la bandera de interrupcin, es decir probando el bit ADIF del registro ADCON0. 10. El resultado se debe leer en el registro ADRES. 11. Borrar el bit ADIF. Para el caso del termmetro digital los pasos seguidos fueron los siguientes: En el primer bloque del programa principal (INICIO), adems de configurar los puertos, se programa el pin RA2/AN2 como una entrada anloga. El bloque que inicia con la etiqueta BEGIN se encarga de ubicar en la pantalla el mensaje del medidor de temperatura, utilizando la interface a 4 bits como se vi en el captulo 2. La parte del programa que inicia con la etiqueta MIDE se encarga de configurar la velocidad del convertidor anlogo a digital, de poner el bit ADIF en "0" y de poner el bit ADON del registro ADCON0 en "1" antes de empezar la conversin, luego se hace un retardo. El trabajo del convertidor se inicia cuando el bit ADCON0,GO se pone en 1, nuevamente se hace un pequeo retardo. Para saber si el convertidor ha terminado se prueba el estado del bit llamado ADCON0,ADIF. Una vez que se est seguro de tener el dato digital que resulta de la conversin, este se puede leer del registro ADRES y se debe duplicar antes de enviarlo a la pantalla. Como este nmero se encuentra en hexadecimal, se debe utilizar una rutina que se encargue de convertirlo a su equivalente en decimal. Esto se hace con la rutina llamada DECIMAL, la cual devuelve el valor obtenido en los registros CENTENA, DECENA y UNIDAD. A estos datos se les suma el valor 30h para convertirlos en su equivalente ASCII antes de enviarlos a la pantalla. Esta prctica se puede realizar con cualquier tipo de sensor cuya salida est entre 0 y 5 voltios, de lo contrario se deber utilizar algn medio para acondicionar su seal a los rangos permitidos por el microcontrolador, por ejemplo un amplificador operacional. En el momento de grabar el microcontrolador se debe tener cuidado de seleccionar el tipo correcto, ya que se ha venido trabajando con el 16F84 y esto nos puede hacer equivocar.
; este programa toma el valor entregado por el sensor de ; temperatura y lo muestra en la pantalla del modulo lcd ; ****** pic16c71 ******** ; ****** wdt = off ******* ; ****** osc = xt ******* ; ******* definiciones ******** indf equ 0h ;para direccionamiento indirecto tmro equ 1h ;contador de tiempo real pc equ 2h ;contador de programa status equ 3h ;registro de estados y bits de control fsr equ 4h ;selecccin de bancos de memoria ptoa equ 5h ;puertos ptob equ 6h adcon0 equ 8h ;registros del convertidor a/d adcon1 equ 88h adres equ 9h trisa equ 85h ;programacin de los registros

Curso avanzado de Microcontroladores PIC

121

Captulo 4. Proyectos con el PIC16C71


trisb r0c r0d r0e unidad decena centena r14 r1b rp0 z c w r pcfg0 pcfg1 adif go e rs ; org goto org movlw movwf decfsz goto retlw movlw movwf call call decfsz goto retlw clrf clrf movlw subwf btfss goto incf goto addwf movlw subwf btfss goto incf goto addwf retlw equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ 86h 0ch 0dh 0eh 10h 11h 12h 14h 1bh 5h 2h 0h 0h 1h 0 1 1h 2h 1h 0h *********** 00 inicio 05h 0ffh r1b r1b,r decre 0 0ffh r14 retardo retardo r14,r decr2 0 decena centena d100' unidad,r status,c sum centena otra unidad d10' unidad status,c sum1 decena repite unidad 0

; ; ; ; ; ; ; ; ;seleccion de pagina ;bandera de cero ;bandera de carry ;para almacenar en w ;para almacenar en el mismo registro ;bits del registro adcon1 ;bits del registro adcon0

programa principal ************ ;vector de reset ;va a iniciar programa principal

retardo decre

retar2 decr2

decimal

;rutina que convierte binario en bcd ;borrar registros de trabajo

otra

sum repite

;restar 100 al valor inicial ;verifica el carry ;si es cero deja de restar 100 ;si es 1 incrementa centena ;volver a restar ;sumarle 100 ;restar 10 al valor ;verifica el carry ;si es 0 deja de restar ;si es 1 incrementa decena ;sumarle 10 al valor ;el valor de la conversion binario a ;decimal ;se devuelve en los registros centena, ;decena y unidad ;esta rutina genera las seales de control ;para escribir en el modulo lcd y ;entrega el dato a ser mostrado en la ;pantalla ;utiliza la interface a 4 bits

sum1

control dato dato2

bcf goto bsf bsf movwf movlw andwf movf andlw iorwf

ptob,rs dato2 ptob,rs ptob,e r0e 0fh ptob,r r0e,w 0f0h ptob,r

122

Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71


call bcf call bsf movlw andwf swapf andlw iorwf call bcf call retlw addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw bsf movlw movwf bcf bcf movlw movwf bcf movlw call movlw call movlw call movlw call movlw call movlw movwf movf retardo ptob,e retardo ptob,e 0fh ptob,r r0e,w 0f0h ptob,r retardo ptob,e retardo 0 pc,r " " "L" "A" " " "T" "E" "M" "P" "E" "R" "A" "T" "U" "R" "A" " " " " "A" "C" "T" "U" "A" "L" " " "E" "S" " " " " " " " " " " "C" " " 0 status,rp0 0ffh trisa adcon1,pcfg1 adcon1,pcfg0 0ch trisb status,rp0 02h control 28h control 0ch control 06h control 01h control 0 r0c r0c,w

tabla

;mensaje que se muestra

;mensaje de la segunda linea

inicio

begin

;seleccionar pagina 1 ;configura ptoa como entradas ; ;configura ra3 como voltaje de referencia ;y ra0-ra2 como entradas analogas ;configura ptob ; ;vuelve a pagina 0 ;inicia display a 4 bits ;display a 4 bits y 2 lineas ;activa display y desactiva cursor ;selecciona el modo de desplazamiento ;borra display y cursor a casa ;inicia contador de caracteres ;hace barrido de la tabla1

blank muestra ciclo

Curso avanzado de Microcontroladores PIC

123

Captulo 4. Proyectos con el PIC16C71


call call movlw movwf call decfsz goto incf movlw subwf btfss goto movlw xorwf btfss goto movlw call movlw xorwf btfss goto tabla dato 05fh r0d retardo r0d,r reta1 r0c,r 10h r0c,w status,c ciclo 10h r0c,w status,z line2 0c0h control 20h r0c,w status,z ciclo

;retardo entre caracteres

reta1

;sigue con la tabla ;pregunta si esta mostrando el mensaje dela ;segunda linea ; ;pregunta si es la primera vez que entra ;a la segunda linea para ir a iniciar ;el puntero de la ram del modulo lcd ; ;ubica puntero de la ram del modulo lcd ;en la segunda linea ;pregunta si termino la segunda linea ;para ir a iniciar de nuevo el mensaje o ;para continuar en la segunda lnea

linea2 line2

mide movlw movwf bsf movlw movwf decfsz goto bsf movlw movwf decfsz goto nop btfss goto bcf bcf movf movwf addwf call movlw call movf addlw call movlw call movf addlw call movlw call movf addlw call call clrf goto end b01010000' adcon0 adcon0,0 0fh r1b r1b,r dec adcon0,go 0fh r1b r1b,r de2 adcon0,adif consu adcon0,0 adcon0,adif adres,w unidad unidad,r decimal 0cbh control centena,w 30h dato 0cch control decena,w 30h dato 0cdh control unidad,w 30h dato retar2 adres mide

;se hace la conversin anlogo a digital ;configura el conver., selecciona canal, ;velocidad de conver. y lo activa ;adif=0 antes de empezar la conversin

dec

;empezar la conversion

de2 consu

; ;pregunta fin de conversion ;si no ha terminado sigue esperando ;apaga el convertidor ;si termino de convertir debe pasar ;duplicar el valor leido ;convertir el dato binario a decimal ;ubico puntero de ram donde va el numero ;primer digito = centenas

;ubica puntero de ram donde va el numero ;segundo digito = decenas

;ubico puntero de ram donde va el numero ;segundo digito = unidades

;termina

Figura 4.3. Programa completo del termmetro digital


124
Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71

Proyecto N 2: Adquisicin de datos va RS-232


Esta prctica consiste en leer una seal anloga con un microcontrolador PIC16C71 y enviar a una computadora el dato digital equivalente; esta ltima se encargar de mostrar en la pantalla (de forma grfica) la manera en que la seal vara con el tiempo. Como fuente de seal se puede usar un potencimetro de 5 kohm, el cual se conecta directamente a un pin del microcontrolador que se ha configurado como entrada anloga. La forma de enviar los datos serialmente se vi en el captulo 2, utilizando como interface un integrado MAX232. Tambin se muestra el dato ledo en una pantalla de cristal lquido, con el fin de comprobar que todo funciona correctamente, es decir que se debe mostrar el mismo dato que en la computadora. Por su parte, la computadora tiene un programa en lenguaje C que se encarga de leer el dato serial y de mostrarlo en la pantalla. En la figura 4.4 se muestra el diagrama del circuito.
+5V 14 VDD 4 MCLR RB7 20pF 4 MHz 20pF +5V 5K Seal anloga 1 8 RA2 RB2 VSS 5 RB6 16 OSC1 OSC2 RB5 RB4 13 12 11 10 14 13 12 11 D7 D6 +5V 2 +VCC

Mdulo LCD

D5 D4

+5V

PIC16C71

15

VO

5K

RB1 RB0

7 6

6 4

E RS R/W GND 1 5

Ajuste de contraste

Conector DB9 hembra Hacer estos puentes en el conector

+5V + 10F 1 C1+ 2 V+ 3 C14 C2+ 5 C26 V-

MAX232 + VCC 16 GND 15 T1OUT 14 T11N 13 R1OUT 12 T11N 11

+5V + 10F

9 8 7 6

5 4 3 2 1

10F + + 10F 10F

Conectar al computador

7 T2OUT T2IN 10 8 R21N R2OUT 9

Figura 4.4 Diagrama esquemtico del circuito de adquisicin de datos


Curso avanzado de Microcontroladores PIC

125

Captulo 4. Proyectos con el PIC16C71

La comunicacin se har con las mismas especificaciones del ejercicio anterior, es decir a 1200 bps, 8 bits, sin paridad y con un stop bit (1200, 8, N, 1). En la figura 4.5 se muestra el programa que se graba en el microcontrolador, los bloques ms importantes son: el que hace la conversin anlogo a digital, que inicia con la etiqueta MIDE y el que hace la transmisin serial que lo compone la subrutina llamada ENVIAR. Estas rutinas se han explicado en ejercicios anteriores. La computadora se debe encargar de leer el dato serial y de mostrarlo en la pantalla, para ello se debe utilizar el llamado modo grfico. En este modo se traza la ventana donde aparece la curva obtenida, al igual que se van ubicando punto a punto todos los datos que entrega el microcontrolador. En la figura 4.6 se muestra el programa en lenguaje C que realiza la tarea descrita, llamado ADQUISI1.C. Nuevamente se tienen dos versiones, una para utilizar el COM1 llamada ADQUISI1 y otra para usar el COM2 llamado ADQUISI2. El programa ejecutable que puede correr el usuario desde el DOS tiene los mismos nombres pero con extensin .EXE. En la figura 4.7 se tiene un pantallazo del programa ejecutable, mostrando una grfica obtenida.
; este programa toma el valor anlogo leido y lo envia ; a la computadora de forma serial ; ****** pic16c84 ******** ; ****** wdt = off ******* ; ****** osc = xt ******* ; ****** cp = on ****** ; indf tmro pc status fsr ptoa ptob adcon0 adcon1 adres trisa trisb r0c r0d r0e unidad decena centena r14 r1b r1c r1d trans rp0 z c w r pcfg0 pcfg1 adif go tx ******* definiciones ******** 0h ;para direccionamiento indirecto 1h ;contador de tiempo real 2h ;contador de programa 3h ;registro de estados y bits de control 4h ;selecccin de bancos de memoria 5h ;puertos 6h 8h ;registros del convertidor a/d 88h 9h 85h ;programacin de los registros 86h 0ch ; 0dh ; 0eh ; 10h ; 11h ; 12h ; 14h ; 1bh ; 1ch 1dh 1eh ;bits especiales ;bits del registro status 5h ;seleccion de pagina 2h ;bandera de cero 0h ;bandera de carry 0h 1h 0 1 1h 2h 2 ;para almacenar en w ;para almacenar en el mismo registro ;bits del registro adcon1 ;bits del registro adcon0 ; pines del puerto a

equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ

126

Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71


e rs ; equ equ 1h 0h ; ; programa principal ************

*********** org goto org

00 inicio 05h .166 r1c

;vector de reset ;va a iniciar programa principal

delay1 startup redo

movlw movwf nop nop decfsz goto retlw

;carga para 833 s aproximadamente ;llevar valor de carga al retardo ;limpiar circuito de vigilancia ;decrementar retardo, saltar si cero ;repetir hasta terminar ;retornar ;rutina para enviar dato ;llevar el contenido de w a transmisin ;cargar con nmero de bits ;el contador ;colocar lnea de transmisin en bajo ;para generar bit de arranque ;colocar lnea de transmisin en bajo ;limpiar carry ;rotar registro de transmisin ;preguntar por el carry ;si es uno, colocar l nea en alto ;llamar retardo de 1 bit ;decrementar contador, saltar si cero ;repetir hasta transmitir todo el dato ;colocar l nea de transmisin en alto ;llamar retardo 1 bit -bit de parada;retornar

r1c redo 0

enviar movwf movlw movwf bcf call bcf bcf rrf btfsc bsf call decfsz goto bsf call retlw trans 8 r1d ptob,tx delay1 ptob,tx status,c trans status,c ptob,tx delay1 r1d xnext ptob,tx delay1 0

xnext

retardo decre

movlw movwf decfsz goto retlw movlw movwf call call decfsz goto retlw clrf clrf movlw subwf btfss goto incf goto addwf movlw subwf btfss goto incf goto addwf retlw

0ffh r1b r1b,r decre 0 0ffh r14 retardo retardo r14,r decr2 0 decena centena d100' unidad,r status,c sum centena otra unidad d10' unidad status,c sum1 decena repite unidad 0

retar2 decr2

decimal

;rutina que convierte binario en bcd ;borrar registros de trabajo

otra

sum repite

;restar 100 al valor inicial ;verifica el carry ;si es cero deja de restar 100 ;si es 1 incrementa centena ;volver a restar ;sumarle 100 ;restar 10 al valor ;verifica el carry ;si es 0 deja de restar ;si es 1 incrementa decena ;sumarle 10 al valor ;el valor de conversion binario a decimal ;se devuelve en los registros centena, ;decena y unidad

sum1

Curso avanzado de Microcontroladores PIC

127

Captulo 4. Proyectos con el PIC16C71


control bcf goto bsf ptob,rs dato2 ptob,rs ptob,e r0e 0fh ptob,r r0e,w 0f0h ptob,r retardo ptob,e retardo ptob,e 0fh ptob,r r0e,w 0f0h ptob,r retardo ptob,e retardo 0 pc,r "E" "L" " " "D" "A" "T" "O" " " "A" "N" "A" "L" "O" "G" "O" " " " " "A" "C" "T" "U" "A" "L" " " "E" "S" " " " " " " " " " " " " " " 0 status,rp0 0ffh trisa adcon1,pcfg1 adcon1,pcfg0 ;seleccionar pagina 1 ;configura ptoa como entradas ; ;configura ra3 como voltaje de referencia ;y ra0-ra2 como entradas analogas ;mensaje que se muestra ;esta rutina genera las seales de control ;para escribir en el modulo lcd y ;entrega el dato a ser mostrado en la ;utiliza la interface a 4 bits

dato pantalla dato2 bsf movwf movlw andwf movf andlw iorwf call bcf call bsf movlw andwf swapf andlw iorwf call bcf call retlw tabla addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw inicio bsf movlw movwf bcf bcf

;mensaje de la segunda linea

128

Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71


movlw movwf bcf begin movlw call movlw call movlw call movlw call movlw call movlw movwf movf call call movlw movwf call decfsz goto incf movlw subwf btfss goto movlw xorwf btfss goto movlw call movlw xorwf btfss goto movlw movwf 08h trisb status,rp0 02h control 28h control 0ch control 06h control 01h control 0 r0c r0c,w tabla dato 05fh r0d retardo r0d,r reta1 r0c,r 10h r0c,w status,c ciclo 10h r0c,w status,z line2 0c0h control 20h r0c,w status,z ciclo b01010000' adcon0 ;configura ptob ; ;vuelve a pagina 0 ;inicia display a 4 bits ;display a 4 bits y 2 lineas ;activa display y desactiva cursor ;selecciona el modo de desplazamiento

blank muestra ciclo

;borra display y cursor a casa ;inicia contador de caracteres ;hace barrido de la tabla1

;retardo entre caracteres

reta1

;sigue con la tabla ;pregunta si esta mostrando el mensaje de ;la segunda linea ; ;pregunta si es la primera vez que entra ;a la segunda linea para ir a iniciar ;el puntero de la ram del modulo lcd ; ;ubica puntero de la ram del modulo lcd ;en la segunda linea ;pregunta si termino la segunda linea ;para ir a iniciar de nuevo el mensaje o ;para continuar en la segunda lnea ;aqu hace la ;configura el ;velocidad de ;adif=0 antes conversin anlogo a digital conver., selecciona canal, conver. y lo activa de empezar conversin

linea2 line2

mide

bsf movlw movwf decfsz goto bsf movlw movwf decfsz goto nop btfss goto bcf bcf movf movwf call call movlw call

adcon0,0 0fh r1b r1b,r dec adcon0,go 0fh r1b r1b,r de2 adcon0,adif consu adcon0,0 adcon0,adif adres,w unidad enviar decimal 0cbh control

dec

;empezar la conversin

de2 consu

; ;pregunta fin de conversin ;si no ha terminado sigue esperando ;apaga el convertidor ;si termino de convertir debe pasar ;transmite el dato serialmente ;convertir el dato binario a decimal ;ubico puntero de ram donde va el numero ;leido

Curso avanzado de Microcontroladores PIC

129

Captulo 4. Proyectos con el PIC16C71


movf addlw call movlw call movf addlw call movlw call movf addlw call call clrf goto end centena,w 30h dato 0cch control decena,w 30h dato 0cdh control unidad,w 30h dato retar2 adres mide ;primer digito = centenas

;ubico puntero de ram donde va el numero ;leido ;segundo digito = decenas

;ubico puntero de ram donde va el numero ;leido ;segundo digito = unidades

;termina

Figura 4.5. Programa que convierte el dato anlogo a digital y lo enva a la computadora

#include #include #include #include #include

<bios.h> <graphics.h> <stdlib.h> <stdio.h> <conio.h>

int puerto,COM1,COM2; int k,j,dato; int config; int COM1,COM2; int maxx,maxy; float x; char pattern[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; void leer (void); void leer(void) { do{ dato=bioscom(2,0x83,puerto); /*leer dato recibido*/ } while (((dato<0)|(dato>255))&(!kbhit())); } void main(void) { /* autodeteccin */ int gdriver = DETECT, gmode, errorcode; /* inicializa modo grfico */ initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi\\"); errorcode = graphresult(); /* lee resultado de inicializacin */ if (errorcode != grOk) /* un error ocurri */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } maxx=getmaxx(); maxy=getmaxy(); COM1=0; COM2=1; puerto=COM1 /* definir cual puerto se utiliza */

130

Curso avanzado de Microcontroladores PIC

Captulo 4. Proyectos con el PIC16C71


clrscr(); /*limpiar pantalla*/ config=0x83; /*configurar puerto: 1200 bps,8 bits, sin paridad,1 stop bit*/ bioscom(0,config,puerto); /*configuracin de los puertos*/ cleardevice(); gotoxy(10,2); printf("Curso de Microcontroladores PIC - CEKIT"); gotoxy(10,4); printf("La computadora recibe los datos y los grafica - ADQUISI1.C"); gotoxy(60,25); printf("Escape = Salir"); x=0; moveto(66,maxy/2-155); outtext("255"); moveto(82,maxy/2+100); outtext("0"); setfillpattern(pattern,0); bar(100,maxy/2-155,maxx-100,maxy/2+100); rectangle(100,maxy/2-156,maxx-100,maxy/2+101); moveto(100,maxy/2+100); do{ leer(); if(!kbhit()) { lineto(x+100,maxy/2+100-dato); gotoxy(10,24); printf(" "); gotoxy(10,24); printf("El dato ledo es: %d",dato); moveto(x+100,maxy/2+100-dato); x+=1; if (x>maxx-200) { setfillpattern(pattern,0); bar(100,maxy/2-155,maxx-100,maxy/2+100); rectangle(100,maxy/2-155,maxx-100,maxy/2+100); x=0; moveto(100,maxy/2+100); } } }while(!kbhit()); closegraph(); clrscr(); }

Figura 4.6. Programa en lenguaje C que lee el dato serial y lo grafica en la pantalla (adquisi1.C)

Figura 4.7. Pantallazo del programa ADQUISI1


Curso avanzado de Microcontroladores PIC

131

Captulo 4. Proyectos con el PIC16C71

132

Curso avanzado de Microcontroladores PIC

Das könnte Ihnen auch gefallen