Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <16F877A.h>
#include <stdlib.h>
#use delay(clock = 4000000) //Cristal de 4 MHz//
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //CONFIG USART //
#fuses XT, NOWDT, NOLVP, NOBROWNOUT //Programación de bits de Configuración//
#byte pa=0x05
#byte pb=0x06
#byte pc=0x07
#byte pd=0x08
char cadena[3]; //Guardará el string recibido
int i; //Número de caracteres del string
float32 c; //Dato recibido en formato float
#int_RDA
void RDA_isr(){
cadena[i]=getc(); //Recepción del string
++i; //Preparación para recibir el siguiente caracter
if (i==3) { //Todos los caracteres recibidos
i=0; //Preparación para recibir el siguiente string
c = atof(cadena); //Paso del string a su valor float
}
//char c;
disable_interrupts(GLOBAL);
//c= getc();
if (c=="BD"){
printf("%s","escoja tipo de control\r");
}
else if(c=="ACF"){
printf("%s","Orden desconocida\r");
}
else if(c=="AD"){
printf("%s","Control automatico activado\r");
if (pa==0x01)
{
pb=0xff;
}
else
{
pa==0x00;
}}
else if(c=="BCF"){
printf("%s","Cotrol horario activado\r");
delay_ms(200);
printf("%s","luminarias apagadas\r");
}
else if(c=="BCE"){
printf("%s","Cotrol horario activado\r");
delay_ms(200);
printf("%s","luminarias encendidas\r");
pb=0xff;
}
void main()
{
set_tris_a (0xff);
set_tris_b (0x00);
set_tris_c (0xB8);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
while(1);
enable_interrupts(GLOBAL);
}
#include <16F877A.h>
#fuses NOBROWNOUT
#use delay(crystal = 8MHz)
#use fast_io(b)
#use rs232(uart1)
char cadena[4];
void main (void){
set_tris_b (0b11111100);
output_b(0x00);
putc(0x00);
delay_ms(100);
while(true)
{
gets(cadena); // Se recibe la cadena y sale hasta recibir un CR (13)
switch (cadena) // Se inicia la comparación.
{
case "ABC": // ¿Cadena = ABC?
output_high(pin_b0); // Si, RB0 en 1
puts("Activando RB0\r"); // Se notifica.
break; // Sale de la rutina de comparación.
case "DEF": // Se repite.
output_high(pin_b1);
puts("Activando RB1\r");
break;
case "GHI":
output_low(pin_b0);
puts("Desactivando RB0\r");
break;
case "JKL":
output_low(pin_b1);
puts("Desactivando RB1\r");
break;
default:
puts("Comando desconocido\r");
break;
}
}
}
#include <16F877A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES PUT //Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NOPROTECT //Code not protected from reading
#use delay(crystal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,bits=8)
char buffer_rx[4];
unsigned int8 banderas;
#bit buffer_rx_listo=banderas.0
#INT_RDA
void RDA_isr(void)
{
static unsigned int8 n_bytes;
buffer_rx[n_bytes++]=getc();
if(n_bytes==4)
{
n_bytes=0;
buffer_rx_listo=1;
}
}
void main()
{
output_b(0);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(TRUE)
{
while(!buffer_rx_listo);
buffer_rx_listo=0;
if(buffer_rx=="ABC")
{
output_a(255);
}
switch(buffer_rx)
{
case "ABC":
{
output_toggle(pin_b0);
printf("abc");
break;
}
case "DEF":
{
output_toggle(pin_b1);
printf("def");
break;
}
case "GHI":
{
output_toggle(pin_b2);
printf("ghi");
}
}
}
}
Nop, no pusiste atención sobre lo que te mencioné anteriormente sobre deshabilitar las interrupciones.Hola de nuevo.
Seguí sus consejos y mejoré el programa en labview y el del pic, pero aún me da errores.
Ya no sé que hacer. Si alguien puede revisarlos y aconsejarme, lo agradecería.
#include <16F877A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES PUT //Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NOPROTECT //Code not protected from reading
#use delay(crystal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,bits=8)
char buffer_rx[2];
unsigned int8 banderas;
#bit buffer_rx_listo=banderas.0
#INT_RDA
void RDA_isr(void)
{
static unsigned int8 n_bytes;
buffer_rx[n_bytes++]=getc();
if(n_bytes==2)
{
n_bytes=0;
buffer_rx_listo=1;
}
}
void main()
{
output_b(0);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(TRUE)
{
while(!buffer_rx_listo);
buffer_rx_listo=0;
if(buffer_rx=="A")
{
output_a(255);
}
switch(buffer_rx)
{
case "A":
{
printf("control automatico ");
if (input(pin_b0)){
output_high(pin_b1);
printf("luminaria encendida");}
else{
output_low(pin_b1);
printf("luminaria apagada ");}
break;
}
case "B":
{
printf("control horario");
output_high(pin_b1);
printf("luminaria encendida");
break;
}
case "C":
{
printf("control horario");
output_low(pin_b1);
printf("luminaria apagada");
}
}
}
}
Mira bien lo que está pasando...Probe labview con hiperterminal y funciona.
También lo probé con el pic y no me responde.
Como ya mencioné, al probarlo con hiperterminal no recibe nada, al probarlo con labview le llegan los comandos pero no responde.
[B]if(n_bytes==[COLOR=Green]2[/COLOR])
{
n_bytes=[COLOR=Green]0[/COLOR];
buffer_rx_listo=[COLOR=Green]1[/COLOR];
}[/B]
#include <16f877a.h>
#fuses nobrownout
#use delay(crystal = 4MHz)
#use rs232(uart1)
char buffer_rx[2];
unsigned int8 banderas;
#bit buffer_rx_listo=banderas.0
#INT_RDA
void RDA_isr(void)
{
static unsigned int8 n_bytes;
buffer_rx[n_bytes++]=getc();
if(n_bytes==1)
{
n_bytes=0;
buffer_rx_listo=1;
}
}
void main()
{
output_b(0);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(TRUE)
{
while(!buffer_rx_listo);
buffer_rx_listo=0;
switch(buffer_rx)
{
case "A":
{
output_a(255);
puts("control automatico\r");
if (input(pin_b0)){
output_high(pin_b1);
puts("luminaria encendida\r");}
else{
output_low(pin_b1);
puts("luminaria apagada\r");}
break;
}
case "B":
{
puts("control horario\r");
output_high(pin_b1);
puts("luminaria encendida\r");
break;
}
case "C":
{
puts("control horario\r");
output_low(pin_b1);
puts("luminaria apagada\r");
break;
}
default:
{
puts("Comando inválido\r");
}
}
}
}
'DEFINE OSC 4
@ DEVICE PIC16F877A
@ DEVICE PROTECT_OFF,CPD_OFF,WDT_OFF,PWRT_ON,BOD_OFF,LVP_OFF
INCLUDE "modedefs.bas" ;incluyen los modos de comunicación
TRISA = $FF
TRISB = $F1
TRISC = $BF
TRISD = $F3
serial VAR BYTE ;variable de almacenamiento de 255
releF VAR portd.2 ;nombres para los pines
led var portd.4
x var byte
entra var portb.0
salida var portb.1
SYMBOL TxD = PORTC.6
SYMBOL RxD = PORTC.7
inicio:
; Inicializar los puertos
PORTB=$00
PORTC=TRISC
PORTD=TRISD
;3 parpadeos del led que indica funciona
FOR x =1 TO 3
HIGH led
PAUSE 200
LOW led
PAUSE 200
NEXT
PAUSE 500
recibir:
SERIN RxD,T9600,serial ; comparar con pruebaredes
SELECT CASE serial
CASE "A" ; A
GOTO automatico
CASE "B" ; B
GOTO horarioapa
CASE "C" ; C
GOTO horarioenc
CASE ELSE
SEROUT TxD,T9600,["comando invalido.",13,10]
END SELECT
PAUSE 500 ; Retardo para estabilizar el puerto
goto recibir
automatico:
SEROUT TxD,T9600,["control automatico.",13,10]
if entra=1 then
high salida
SEROUT TxD,T9600,["luminaria encendida",13,10]
PAUSE 500
goto recibir
else
low salida
SEROUT TxD,T9600,["luminaria apagada.",13,10]
PAUSE 500
goto recibir
endif
horarioapa:
SEROUT TxD,T9600,["control horario.",13,10]
low salida
PAUSE 500
SEROUT TxD,T9600,["luminaria apagada.",13,10]
PAUSE 500
goto recibir
horarioenc:
SEROUT TxD,T9600,["control horario.",13,10]
PAUSE 500
high salida
PAUSE 500
SEROUT TxD,T9600,["luminaria encendida",13,10]
Define OSC 4
@ Device PIC16F877A
@ Device WDT_OFF, PWRT_ON, BOD_OFF, LVP_OFF
inicio:
Symbol Entrada = PORTB.0
Symbol Salida = PORTB.1
Symbol TxD = PORTC.6
Symbol RxD = PORTC.7
Symbol LED = PORTD.4
Serial Var Byte ; Variable de almacenamiento.
x Var Byte
; Inicializar los puertos
TRISB = $F1
TRISC = $BF
TRISD = $F3
PORTB = 0
PORTC = TRISC
PORTD = TRISD
; Configuración USART: (9600bps @ 4MHz. 9615bps reales, 0.16% de error.)
SPBRG = 25 ; 00011001
TXSTA = 36 ; 00100100
RCSTA = 144 ; 10010000
; 3 parpadeos del led para indicar que funciona.
For x = 1 To 3
Toggle LED
Pause 200
Next x
HSerOut [0] ; Inicializar el bus RS-232
Pause 100
Recibir:
HSerIn 100,Salir,[Serial] ; Recibir los datos.
Select Case Serial
Case "A" ; A
GoSub Automatico
Case "B" ; B
GoSub Horario_Apagado
Case "C" ; C
GoSub Horario_Encendido
Case Else
HSerOut ["Comando inválido.",13,10]
End Select
Salir:
GoTo Recibir
Automatico:
HSerOut ["Control automático.",13,10]
If Entrada = 1 Then
Salida = 1
HSerOut ["Luminaria encendida.",13,10]
Return
Else
Salida = 0
HSerOut ["Luminaria apagada.",13,10]
Return
EndIf
Horario_Apagado:
Salida = 0
HSerOut ["Control horario.",13,10]
HSerOut ["Luminaria apagada.",13,10]
Return
Horario_Encendido:
Salida = 1
HSerOut ["Control horario.",13,10]
HSerOut ["Luminaria encendida",13,10]
Return
End