Autor Tema: comunicacion serial en ccs  (Leído 2234 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristhian roca camarena

  • PIC10
  • *
  • Mensajes: 3
comunicacion serial en ccs
« en: 05 de Marzo de 2019, 14:30:14 »
buenas que tal como están compañeros.
Tengo un pequeño problema, lo que pasa es que tengo 5 sensores que necesito enviarlos con serial rs232, estoy utilizando el ccs y estoy utilizando la funcion de interrupcion #int_tbe para enviar la data de los sensores. El problema consiste que a la hora enviar la data me sale todo cero y yo creo que el problema es porque también estoy utilizando el timer1 y parece como si las interrupcion se ocurrieran al mismo tiempo y nose como solucionar este problema. NECESITO DE SU AYUDA POR FAVOR, ADJUNTO CÓDIGO DE LO QUE ESTABA HACIENDO. GRACIAS


#include <16f877a.h>
#include <stdio.h>
#use delay(clock=10M)
#fuses hs,nowdt
#include <MCP3204_modificado.C>
#include <lcd.c>
#include "dht22_mejorado.h"
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=8,parity=N)
#PRIORITY TBE, TIMER1,RB

int32 valor1,valor2,peso,tot_pulsos=0;
int32 pulsos=0;
float voltaje2,pt100,humedad,temperatura;
int cont_t=0;
short envia_p=0;


#INT_EXT                    // directiva de interrupcion por cambio de estado en RB0
void interrupcion_RB0()
{
 pulsos++;
}

#INT_TIMER1                   //ocurre interrupcion cada 100ms
void interrupcion_timer1()
{
  cont_t++;
  if(cont_t==10){
      envia_p=1;
      tot_pulsos=pulsos;
      pulsos=0;     
      cont_t=0;
   }
  set_timer1(34286);
 
}

#INT_TBE
void TBE_isr(void) {
lcd_gotoxy(1,1);
lcd_putc("\f");
printf(lcd_putc,"pulsos= %Lu\r\r",tot_pulsos);
printf("pulsos= %Lu\r ",tot_pulsos);
printf("peso= %Lu\r\r",peso);
printf("pt100= %3.1f\r\r",pt100);
printf("humedad= %f\r",humedad);
printf("temperatura= %f\r\r",temperatura);
delay_ms(100);     

}

void config_interrupcion()
{
  enable_interrupts(INT_EXT);    //habilito interrupcion RB0
  ext_int_edge(H_TO_L);   //configuro interrupcion por flanco de bajada
  disable_interrupts(int_rb);
  enable_interrupts(INT_TIMER1);  //habilito interrupcion por desborde de timer1
  setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  set_timer1(34286);
  disable_interrupts(int_timer1); 
 
     
  enable_interrupts(INT_TBE);
  enable_interrupts(GLOBAL);      // habilito interrupcion global
}

void inicializacion(){
adc_init();
lcd_init();
dht_init ();
}

void main(){
set_tris_c(1);
inicializacion(); 
config_interrupcion();
   while(TRUE){

valor1=read_analog(0);
peso=valor1*(10000.0/4095.0);

valor2=read_analog(1);
voltaje2=5.0*(valor2/4095.0);
pt100=21.598*voltaje2+11.728;

leer_dht22 (humedad,temperatura);
delay_ms(50);

if(envia_p==1){               //muestra en lcd cada 500ms
         printf("pulsos= %Lu\r",tot_pulsos);
         envia_p=0;
      }

   }
}


 

anything