Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez
1
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez
El LM35 es un sensor lineal que aumenta Se almacenan los datos en unas variables
10mV por cada grado centígrado. Se de la siguiente forma:
calcula el valor de resolución del PIC
teniendo en cuenta que el Vref = 5v, el set_adc_channel(0); //Escogemos el canal de la
número de bits = 8 conversion
value=read_adc(); //lee lo que hay en canal cero y lo
guarda en la variable
V ref
Resolucion= set_adc_channel(1); //Escogemos el canal de la
2n−1 conversion
value1=read_adc(); //lee lo que hay en canal cero y
Res = 19.6mv lo guarda en la variable
2
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez
5 PROGRAMA
4 DIAGRAMA DE FLUJO
El programa se realizó en lenguaje c.
Representación gráfica del programa.
“Sensor de Temperatura”. #include <16f877a.h>
#device adc=8
#use delay(clock=4000000)
#fuses xt,nowdt,put
#BYTE timer0=0x01 // la memoria de datos
int contador,valor,valor1;
float fre;
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
void main()
{
set_tris_b(0xff); //Puerto B Como Entrada
set_tris_c(0x00); //Puerto C Como Salida
setup_adc(ADC_CLOCK_DIV_8); // TAD=8Tocs
SETUP_ADC_PORTS(ALL_ANALOG); // entradas nalogas
setup_timer_0(RTCC_INTERNAL |
RTCC_DIV_256); //CONFIGURA TMR0 CON PREESCALA 256 Y
COMO TEMPORIZADOR
enable_interrupts(int_timer0); //HABILITA INTERRUPCION
POR DESBORDAMIENTO DEL TMR0
enable_interrupts(global); //HABILITA INTERRUPCIONES
GLOBALES
set_timer0(contador); //VALOR CARGADO EN EL TMR0
lcd_init(); //incicia la comunicacion con LCD
for(;;)
{
ini:
//GENERADOR DE FRECUENCIA CON POTENCIOMETRO
3
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez
lcd_gotoxy(2,1); }
printf(lcd_putc,"GEN. FRECUENCIA"); //PULSADOR --
if(contador>60) if(input(pin_b1)==0)
{ {
fre=(1/((256-contador)*(256)*(0.000001))); while(input(pin_b1)==0)
lcd_gotoxy(2,2); delay_ms(50);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre); if(contador>61)
} contador--;
if(valor<61) fre=(1/((256-contador)*(256)*(0.000001)));
contador=61; lcd_gotoxy(2,2);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre);
}
//GENRADOR DE FRECUENCIA PULSADOR ++ set_adc_channel(0); //Escogemos el canal de la
if(input(pin_b0)==0) conversion
{ valor1=read_adc(); // y lo guarda en la variable
while(input(pin_b0)==0) if(valor!=valor1)
delay_ms(50); //Retardo De 50ms goto ini;
if(contador<255) }
contador++; //Suma 1 A Contador }
fre=(1/((256-contador)*(256)*(0.000001))); }
lcd_gotoxy(2,2); #int_timer0 // inicio de la funcion de interrupción
printf(lcd_putc,"FRE(Hz)=%.1f ",fre); void int_tmr0() //funcion de interrupcion
} {
disable_interrupts(int_timer0);
//GENRADOR DE FRECUENCIA PULSADOR -- output_toggle(pin_c0);
if(input(pin_b1)==0) enable_interrupts(int_timer0);
{ set_timer0(contador);
while(input(pin_b1)==0) }
delay_ms(50);
if(contador>61) 6 DIAGRAMA CIRCUITAL
contador--;
fre=(1/((256-contador)*(256)*(0.000001)));
Para la correspondiente asignación de
lcd_gotoxy(2,2);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre);
periféricos se utiliza el siguiente diagrama
} que pertenece al PIC 16F877A.
4
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez
7 CONCLUSIONES