Que funcionen por si solos separados indican que el codigo hace bien su trabajo.
El problema es cuando se programa pensando en unicamente un solo programa. Esto podria ser valido para un micro mas grande y pensando en algun RTOS que lo controle, pero cuando es baremetal ( sin ningun OS ) al programar tenes que tener en cuenta que tu programa va a tener que compartir tiempo entre varios programas.
De esa forma, pensando en que luego lo vas a tener que juntar, vas a tener que centrarte en hacer un codigo que:
- No demore tiempo en ejecutarse. Asi dar paso al siguiente.
- Loops esperando por un boton que se suelte quedan prohibidos, ya que de quedar encerrados ahi se detiene el programa.
- Si es necesario alguna demora, sea por los botones o lo que sea, deberia haber solo una unica demora (pequeña = 10ms como maximo) en tu loop infinito del programa completo.
- Con lo anterior si o si ya evita que hagas algun while/for que ocupe demasiado tiempo.
De todas formas sin ver como es que intentaste juntar el programa es dificil que podamos decirte que hiciste mal, tal ves los juntaste de forma correcta, pero los programas en si son el problema.
Gracias por responder, y mira, estos son los programas:
//lectura del teclado
#include <18F4550.h>
#fuses HSPLL,PLL5,USBDIV,VREGEN,CPUDIV1,NOPBADEN,NOLVP,NOPROTECT,PUT,MCLR,WRTB
#use delay(clock=48000000)
#include <flex_lcd.c>
//#include <keypad.h>
#include <KBD1.C>
#byte porta= 0x0F80
long y;
float mvoltaje;
long kdato;
long cdato[3];
long i, dato;
void inicio()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fTemp: ");
}
void temp()
{
kdato = ((cdato[0]*100) + (cdato[1]*10) + (cdato[2]*1));
lcd_gotoxy(1,1);
printf(lcd_putc,"Temp: %3Lu%cC\n", kdato,0xDF);
}
void operaciones()
{
y=kdato;
if (y == 0){mvoltaje=0;} //000-000
if (y >=1 && y <=006) {mvoltaje =(y-0.058823529)/19.6078431;} //001-006
if (y >=7 && y <=015) {mvoltaje =(y-0.058823529)/19.6078431;} //007-015
if (y >=016 && y <=025) {mvoltaje =(y-0.17710583)/19.43844;} //016-025
if (y >=026 && y <=036) {mvoltaje =(y-0.44230769)/19.23077;} //026-036
if (y >=037 && y <=49) {mvoltaje =(y-0.77142857)/19.04762;} //037-049
if (y >=050 && y <=59) {mvoltaje =(y-1.22641509)/18.86792;} //050-059
if (y >=060 && y <=81) {mvoltaje =(y-1.78291815)/18.68327;} //060-081
if (y >=82 && y <=90) {mvoltaje =(y-2.48148148)/18.51852;} //082-090
if (y >=91 && y <=124) {mvoltaje =(y-3.25083426)/18.35373;} //091-124
if (y >=125 && y <=147) {mvoltaje =(y-4.3818182)/18.18182;} //125-147
if (y >=148 && y <=491) {mvoltaje =(y-5.3015957)/18.06309;} //148-491
if (y >=492 && y <=510) {mvoltaje =(y-10.8392857)/17.85714;} //492-510
if (y >=511 && y <=544) {mvoltaje =(y-15.114807)/17.70386;} //511-544
if (y >=545 && y <=554) {mvoltaje =(y-19.8947368)/17.54386;} //545-554
if (y >=555 && y <=578) {mvoltaje =(y-23.9280848)/17.41105;} //555-578
if (y >=579 && y <=591) {mvoltaje =(y-29.3275862)/17.24128;} //579-591
if (y >=592 && y <=608) {mvoltaje =(y-33.5229947)/17.1123;} //592-608
if (y >=609 && y <=622) {mvoltaje =(y-39)/16.94915;} //609-622
if (y >=623 && y <=636) {mvoltaje =(y-43.5161708)/16.81759;} //623-636
if (y >=637 && y <=649) {mvoltaje =(y-48.8333333)/16.66667;} //637-649
if (y >=650 && y <=664) {mvoltaje =(y-53.7885124)/16.52893;} //650-664
if (y >=665 && y <=674) {mvoltaje =(y-58.7868852)/16.393443;} //665-674
if (y >=675 && y <=689) {mvoltaje =(y-63.0697674)/16.27907;} //675-689
if (y >=690 && y <=703) {mvoltaje =(y-68.8387097)/16.12903;} //690-703
if (y >=704 && y <=723) {mvoltaje =(y-74.6989066)/15.97981;} //704-723
if (y >=724 && y <=727) {mvoltaje =(y-79.031746)/15.87302;} //724-727
if (y >=728 && y <=755) {mvoltaje =(y-79.031746)/15.87302;} //728-755
if (y >=756 && y <=770) {mvoltaje =(y-89.390625)/15.625;} //756-770
if (y >=771 && y <=843) {mvoltaje =(y-94.5132457)/15.507215;} //771-843
if (y >=844 && y <=854) {mvoltaje =(y-88.828125)/15.625;} //844-854
if (y >=855 && y <=870) {mvoltaje =(y-84.8324607)/15.70681;} //855-870
printf(lcd_putc,"mVolt: %3f", mvoltaje);
}
void main(void)
{
set_tris_a(0xFE);
port_b_pullups(TRUE);
kbd_init();
lcd_init();
inicio();
while(TRUE)
{
dato = kbd_getc();
if(dato)
{
cdato
= dato -48;
i++;
if(i>2)
{
i= 0;
if(dato!='C')
{
temp();
operaciones();
}
}
}
}
}
//lectura termopar
#include <18F4550.h>
#device adc= 10
#fuses HSPLL,PLL5,USBDIV,VREGEN,CPUDIV1,NOPBADEN,NOLVP,PROTECT,PUT,MCLR,WRTB
#use delay(clock=48000000)
#include <LCD.C>
#byte porta = 0x0F80
#byte portc = 0x0F82
int16 adato;
float temperatura,voltaje,x;
void presentacion()
{
lcd_gotoxy(4,1);
printf(lcd_putc,"LECTURA DE");
lcd_gotoxy(2,2);
printf(lcd_putc,"TERMOPAR TIPO J");
delay_ms(500);
printf(lcd_putc,"\f");
lcd_gotoxy(8,1);
printf(lcd_putc,"LS");
lcd_gotoxy(4,2);
printf(lcd_putc,"AUTOMATION");
delay_ms(250);
}
void main(void)
{
set_tris_a(0xFF);
setup_adc(ADC_CLOCK_DIV_64);
setup_adc_ports(AN0);
set_adc_channel(0);
enable_interrupts(GLOBAL);
port_b_pullups(TRUE);
lcd_init();
presentacion();
while(TRUE)
{
delay_us(100);
adato = read_adc();
voltaje = (5.0*adato)/1024;
x = ((voltaje/1000)*10000)+0.001172;
if (x >=0.000 && x <=0.049) {temperatura =0;} //000-000
if (x >=0.050 && x <=0.303) {temperatura =0.01185771 +(19.7628458*x);} //001-006
if (x >=0.354 && x <=0.762) {temperatura =0.058823529+(19.6078431*x);} //007-015
if (x >=0.814 && x <=1.277) {temperatura =0.177105830+(19.4384400*x);} //016-025
if (x >=1.329 && x <=1.849) {temperatura =0.442307690+(19.2307700*x);} //026-036
if (x >=1.902 && x <=2.532) {temperatura =0.771428570+(19.0476200*x);} //037-049
if (x >=2.585 && x <=3.062) {temperatura =1.226415090+(18.8679200*x);} //050-059
if (x >=3.116 && x <=4.240) {temperatura =1.782918150+(18.6832700*x);} //060-081
if (x >=4.294 && x <=4.726) {temperatura =2.481481480+(18.5185200*x);} //082-090
if (x >=4.781 && x <=6.579) {temperatura =3.250834260+(18.3537300*x);} //091-124
if (x >=6.634 && x <=7.844) {temperatura =4.381818200+(18.1818200*x);} //125-147
if (x >=7.900 && x <=26.889){temperatura =5.301595700+(18.0630900*x);} //148-491
if (x >=26.945 && x <=27.953){temperatura =10.83928570+(17.8571400*x);} //492-510
if (x >=28.010 && x <=29.874){temperatura =15.11480700+(17.7038600*x);} //511-544
if (x >=29.931 && x <=30.444){temperatura =19.89473680+(17.5438600*x);} //545-554
if (x >=30.502 && x <=31.823){temperatura =23.92808480+(17.4110500*x);} //555-578
if (x >=31.881 && x <=32.577){temperatura =29.32758620+(17.2412800*x);} //579-591
if (x >=32.636 && x <=33.571){temperatura =33.52299470+(17.1123000*x);} //592-608
if (x >=33.630 && x <=34.397){temperatura =39.00000000+(16.9491500*x);} //609-622
if (x >=34.457 && x <=35.230){temperatura =43.51617080+(16.8175900*x);} //623-636
if (x >=35.290 && x <=36.010){temperatura =48.83333330+(16.6666700*x);} //637-649
if (x >=36.071 && x <=36.918){temperatura =53.78851240+(16.5289300*x);} //650-664
if (x >=36.979 && x <=37.528){temperatura =58.78688520+(16.3934430*x);} //665-674
if (x >=37.590 && x <=38.450){temperatura =63.06976740+(16.2790700*x);} //675-689
if (x >=38.512 && x <=39.318){temperatura =68.83870970+(16.1290300*x);} //690-703
if (x >=39.381 && x <=40.570){temperatura =74.69890660+(15.9798100*x);} //704-723
if (x >=40.633 && x <=40.822){temperatura =79.03174600+(15.8730200*x);} //724-727
if (x >=40.886 && x <=42.599){temperatura =83.56217160+(15.7618200*x);} //728-755
if (x >=42.663 && x <=43.559){temperatura =89.39062500+(15.6250000*x);} //756-770
if (x >=43.624 && x <=48.267){temperatura =94.51324570+(15.5072150*x);} //771-843
if (x >=48.331 && x <=48.971){temperatura =88.82812500+(15.6250000*x);} //844-854
if (x >=49.034 && x <=49.989){temperatura =84.83246070+(15.7068100*x);} //855-870
lcd_gotoxy(1,1);
printf(lcd_putc,"Temp = %f",temperatura);
lcd_gotoxy(1,2);
printf(lcd_putc,"Volt = %02f", x);
}
}
esos son los codigos pero no tengo alguna idea de juntar ambos para que sea solo uno