Segue parte do código.
- Código: Selecionar todos
//------------------------------------------------------------------
#include <16F877.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#use delay(clock=4000000)
#fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP
#use rs232(BAUD=9600, parity=N, BITS=8, XMIT=pin_c6, RCV=pin_c7)
#define MAX_BUFFER 15
char BufferRX[MAX_BUFFER+1];
boolean CHEGOU_COMANDO = false;
//--------------------------------------------------------------------------
//Interrupção de recebimento de caracter pela UART.
//---------------------------------------------------------------------------
#int_rda
void Serial_Recebe_Car()
{
static unsigned char ch;
static int IndexBuf=0;
ch = getc(); //Pega o caracter no registrador da UART.
BufferRX[IndexBuf] = ch; //Guarda o caracter no buffer.
if( BufferRX[IndexBuf] == '*' ) //Se é o fim da string de comando.
{
BufferRX[IndexBuf+1] = '\0'; //Finaliza sting.
IndexBuf = 0;
CHEGOU_COMANDO = true; //Avisa que chegou uma string de comando.
}else{
IndexBuf++;
}
if( (BufferRX[0] != '>' ) || (IndexBuf >= MAX_BUFFER) )
{
IndexBuf = 0;
}
}
//--------------------------------------------------------------
//Para fazer o LED piscar.
#int_timer0
void MeuTimer()
{
static boolean led;
static int conta;
set_timer0(131-get_timer0());
conta++;
if(conta == 125)
{
conta=0;
led = !led;
output_bit(pin_c0, led); //pisca o LED1
}
}
//--------------------------------------------------------------
//Programa Principal.
void main(void)
{
char COMANDO[15];
set_timer0(131);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64);
enable_interrupts(int_rda); //Habilita interrupção de recebimento.
enable_interrupts(int_timer0);
enable_interrupts(GLOBAL); //Habilita registrador de interrupção.
set_tris_d(0b00000000); //Todos os pinos da porta D como saídas.
set_tris_c(0b00000000); //Todos os pinos da porta C como saídas.
set_tris_b(0b00000000); //Todos os pinos da porta B como saídas.
//output_b(0b00000000); //Desliga todos os pinos da porta B.
while( true ) //Loop infinito.
{
if(CHEGOU_COMANDO == true)
{
CHEGOU_COMANDO = false;
//--------------------------------------------------------------
strcpy(COMANDO,">CMD#01#ON*");
if( strcmp(BufferRX,COMANDO) == 0)
{
output_high(pin_b0); //Liga Relé 1.
printf("Relê #1 LIGADO\r\n");
continue; //volta para o início do loop while().
}
strcpy(COMANDO,">CMD#01#OFF*");
if(strcmp(BufferRX,COMANDO) == 0)
{
output_low(pin_b0); //Desliga Relé 1.
printf("Relê #1 DESLIGADO\r\n");
continue;
}
//---------------------------------------------------------