Figura #1
Diagrama de flujo
Cdigo
#include <REG8253.H>
#include <stdio.h >
#include "lcd.h"
#define cs_ADC P3_5
#define vref 4.096
void ISR(void);
void lectura_adc (void);
void main2(void);
void main3(void);
void peticion(void);
void manual (void);
void petr(void);
//Prototipos de Funciones
void act(void);
void autol(void);
void print_serial(const char *cadena);
void lecturaserial (void);
void peticion1();
void send_byte(unsigned char dato);
unsigned char
get_byte(void);
//Asignar 0 a volt.
float dato=0.0;
int st;
//Asignar 0 a valor1
//Asignar 40 a valor2
//Asignar 80 a valor3
//Asignar c0 a valor4
cs_ADC=1;
//Asignar 1 a cs_ADC
ISR();
//LLamar a funcion
LCD_init();
//Llamar a lcd_init
_LCD_Cursoroff();
//Llamar a lcd_cursor
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
send_byte(13);
//Pasar parametros
while(1)
{
get_byte();
if(SBUF=='R')
//Si es igual a R
{
main2();
//Llamada Funcion
}
else if(SBUF=='L')
//Si es igual a L
main3();
//Cerrar Llamada
}
}
void main2(void)
{
_LCD_Clear();
//LLamar a lcd_clear
//Pasar parametros
//Pasar parametros
while(1)
//Pasar parametros
//Pasar parametros
//Mientras
get_byte();
if(SBUF=='P')
//Llamar a funcion
//Si es igual a R
{
peticion();
//Llamada Funcion
}
else if(SBUF=='A')
//Si es igual a L
peticion1();
//LLamar a la funcion
}
}
void peticion(void)
{
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
send_byte(13);
//Pasar parametros
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
while(1)
{
get_byte();
//LLamar a funcion
if(SBUF=='V')
//Si es igual a R
{
break;
///Cerrar Llamada
}
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
send_byte(13);
//Pasar parametros
while(1)
{
get_byte();
//Llamar a funcion
if(SBUF=='1')
//Si es igual a R
{
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
send_byte(13);
//Pasar parametros
valor1=0x00;
//Asignar 0 a valor1
lecturaserial();
//Llamar a funcion
}
else if(SBUF=='2')
{
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
//Pasar parametros
//Asignar 40h a valor1
//LLamar a funcion
}
else if(SBUF=='3')
{
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
send_byte(13);
//Pasar parametros
valor1=0x80;
lecturaserial();
//LLamar a funcion
}
else if(SBUF==4)
{
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Pasar parametros
send_byte(13);
//Pasar parametros
valor1=0xc0;
//Asignar C0 a valor1
lecturaserial();
//LLamar a funcion
}
void peticion1(void)
{
send_byte(10);
//Pasar parametros
send_byte(13);
//Pasar parametros
//Asignar 0 a st
cs_ADC=0;
//Asignar 0 a CS_ADC
//Asignar 0 a SPDR
cs_ADC=1;
//Asignar 1 a cs_ADC
_LCD_Gotoxy(2,2);//Pasar parametros
//Si no sucede
st=1;
//Asignar a st=1
cs_ADC=0;
//Asignar 0 a cs_ADC
//ASignar 0 a SPDR
cs_ADC=1;
//Asignar 1 a cs_ADC
///_LCD_Gotoxy(2,2);
//LLamar a funcion
//Si no sucede
void main3(void)
{
_LCD_Clear();
//LLamar a funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
lcd_puts("Peticion o");
//Pasar parametros
_LCD_Gotoxy(4,2);
//Pasar parametros
lcd_puts("Automatico");
//Pasar parametros
while(1)
//Mientras
if(!P1_0)
{
petr();
//Llamar a funcion
}
else if(!P1_2)
autol();
//Llamar a funcion
}
}
void petr(void)
{
_LCD_Clear();
//LLamar a lcd_clear
_Delay_ms (1000);
//Pasar parametros
lcd_puts("Presiona Botones");
//Pasar parametros
while(1)
{
if(!P3_7)
//Si es cero
{
_Delay_ms (10);
//Pasar parametros
_LCD_Clear();
//Llamar a lcd_clear
_LCD_Gotoxy(0,1);
//Pasar parametros
//Asignar 0 a valor1
//LLamar a funcion
}
else if(!P3_6)
{
//Si es cero
_Delay_ms (10);
//Pasar parametros
_LCD_Clear();
//Llamar a funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
}
else if(!P3_5)
//Si es cero
_Delay_ms (10);
//Pasar parametros
_LCD_Clear();
//Llamar a funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
lectura_adc();
//LLamar a funcion
}
else if(!P3_4)
//Si es cero
_Delay_ms (10);
//Pasar parametros
_LCD_Clear();
//Llamar funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
//Asignar c0 a valor1
//LLamar a funcion
}
void autol(void)
{
//Mientras
_LCD_Clear();
_LCD_Gotoxy(0,1);
//Llamar a lcd_clear
//Pasar parametros
//Asignar valor
//LLamar a funcion
_Delay_ms(500);
//Pasar parametros
valor1=valor2;
//Asignar valor
_LCD_Clear();
//LLamar a funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
//Llamar a funcion
//Pasar parametros
valor1=valor3;
//Asignar valor
_LCD_Clear();
//LLamar a funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
//LLamar a funcion
_Delay_ms(500);
//Pasar parametros
valor1=valor4;
//Asignar valor
_LCD_Clear();
//LLamar a funcion
_LCD_Gotoxy(0,1);
//Pasar parametros
//LLamar a funcion
//Pasar parametros
main3();
//LLamar a funcion
}
void ISR(void)
{
RCAP2H = 0xff;
RCAP2L = 0xe6;
T2CON = 0x30;
SCON = 0x50;
//8,n,1
TR2 = 1;
}
void send_byte(unsigned char dato)
{
SBUF = dato;
TI = 0;
while(!TI);
}
unsigned char
get_byte(void)
{
while(!RI);
RI = 0;
return SBUF;
}
char putchar (char dato)
{
if(st==0)
{
lcd_putchar(dato);
}
else
{
TI = 0;
SBUF = dato;
while(!TI);
return dato;
}
}
void print_serial(const char *cadena)
{
while(*cadena)
send_byte(*cadena++);
Conclusin
Para finalizar la prctica se puede concluir que se pudo
desarrollar un programa que pudiera cumplir con todas las
especificaciones planteadas al inicio de esta cumpliendo
as con los objetivos de la prctica.
La interfaz de comunicacin SPI
permiti conectar al
de