Codigo:
#include <16f874A.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#device ADC=10
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#byte port_b = 6
#include<lcd.c>
char datohigh, datolow, temp, terminar;
long periodo,freqmot;
long dato, muestras;
int i,j;
long retardo,conteo;
void adquirir()
{
dato = read_adc();
datolow=dato;
datohigh=make8(dato,1);
//temp=(dato>>8);
//datohigh=temp&3;
putc(datohigh);
putc(datolow);
}
#INT_RTCC
void pulso()
{
if(--conteo==0)
{
output_bit(PIN_B0,!bit_test(port_b,0));
conteo=retardo;
}
set_rtcc(61);
}
#INT_TIMER1
void adquisicion()
{
set_adc_channel( 0 );
adquirir();
set_adc_channel( 3 );
adquirir();
}
#INT_RDA
void detener()
{
terminar=getc();
if (terminar=="s")
{
disable_interrupts(GLOBAL);
disable_interrupts(INT_RTCC);
disable_interrupts(INT_TIMER1);
disable_interrupts(INT_RDA);
output_b(0);
lcd_putc("f");
reset_cpu();
}
}
main()
{
char valor, giro, paso;
int periodohigh, periodolow, muestrashigh, muestraslow, datoalto, datobajo;
//set_tris_b(0x00);
setup_adc_ports( ALL_ANALOG );
setup_adc( ADC_CLOCK_DIV_32 );
lcd_init();
while(!kbhit()); //Espera la recepcion de un caracter
valor=getc();
if (valor=="j")
{
putc("8");
//Para el programa de adquisición
while(!kbhit()); //Espera la recepcion de un caracter
muestrashigh=getc();
while(!kbhit()); //Espera la recepcion de un caracter
muestraslow=getc();
while(!kbhit()); //Espera la recepcion de un caracter
periodohigh=getc();
while(!kbhit()); //Espera la recepcion de un caracter
periodolow=getc();
//Para el control del motor
while(!kbhit()); //Espera la recepcion de un caracter
datoalto=getc();
while(!kbhit()); //Espera la recepcion de un caracter
datobajo=getc();
while(!kbhit()); //Espera la recepcion de un caracter
giro=getc();
while(!kbhit()); //Espera la recepcion de un caracter
paso=getc();
muestras=(muestrashigh*256) + muestraslow;
periodo=(periodohigh*256) + periodolow;
freqmot=(datoalto*256)+datobajo;
if (giro=="i")
{
output_high(PIN_C0);
}
if (giro=="d")
{
output_low(PIN_C0);
}
if (paso=="m")
{
output_high(PIN_C1);
}
if (paso=="c")
{
output_low(PIN_C1);
}
retardo=freqmot;
conteo=retardo;
lcd_putc("f");
lcd_gotoxy(1,1);
printf(lcd_putc,"muestras=%4lu",muestras);
lcd_gotoxy(1,2);
printf(lcd_putc,"freq=%4lu",freqmot);
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
set_rtcc(61);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(60536);
enable_interrupts(INT_RDA);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while(TRUE);
}
}