#FUSES WDT
#FUSES INTRC
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES PROTECT //Code protected from reads
int8 cont=0;
#use delay(int=4000000)
#use rs232(baud=4800,parity=N,xmit=PIN_A1,rcv=PIN_A0,bits=8,stream=PORT1)
#INT_RA //interrupcion por cambio de estado en pines
Transmision(){ //Interrupcion por cambio de estado en pines
if(!input(PIN_A3)){ // RA3 es 0 ?? esto solo por confirmar pregunto por 0 por eso el sigo " ! "
//Se envía cuatro veces la "A" con un intervalo de 100 ms.
for(cont=0; cont<4; cont++)
{
printf("A");//envia llamada cama 1
delay_ms(100);
restart_wdt();
} // if
if(!input(PIN_A4)){ // RA4 es 0 ?? esto solo por confirmar pregunto por 0 por eso el sigo " ! "
//Se envía cuatro veces la "B" con un intervalo de 100 ms.
for(cont=0; cont<4; cont++)
{
printf("B");//cancela llamada cama 1
delay_ms(100);
restart_wdt();
} // if
}
}
}
void main()
{ setup_wdt(WDT_1152MS);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 ); //Para poder generar 200ms
setup_comparator(NC_NC); // Todo digital
set_tris_a(0xFF); //
enable_interrupts(GLOBAL); //Interrupciones Habilitadas
enable_interrupts(INT_RA3);
enable_interrupts(INT_RA4);
//Bucle infinito.
while(TRUE)
{
SLEEP();
}
}
Hola estoy queriendo hacer una cominicacion por rf entre un pic 12f675 y un pic 16f628a, el 12f es el emisor que al cambiar el estado de RA4 tendria que mandar la letra B por serial pero lo que pasa es que la interrupcion por cambio de estado en el pic 12f cuando presiono el boton RA4 no me la detecta, este es el programa emisor, agradeceria una mano con esto#include <12F675.h>Código: [Seleccionar]#FUSES WDT
#FUSES INTRC
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES PROTECT //Code protected from reads
int8 cont=0;
#use delay(int=4000000)
#use rs232(baud=4800,parity=N,xmit=PIN_A1,rcv=PIN_A0,bits=8,stream=PORT1)
#INT_RA //interrupcion por cambio de estado en pines
Transmision(){ //Interrupcion por cambio de estado en pines
if(!input(PIN_A3)){ // RA3 es 0 ?? esto solo por confirmar pregunto por 0 por eso el sigo " ! "
//Se envía cuatro veces la "A" con un intervalo de 100 ms.
for(cont=0; cont<4; cont++)
{
printf("A");//envia llamada cama 1
delay_ms(100);
restart_wdt();
} // if
if(!input(PIN_A4)){ // RA4 es 0 ?? esto solo por confirmar pregunto por 0 por eso el sigo " ! "
//Se envía cuatro veces la "B" con un intervalo de 100 ms.
for(cont=0; cont<4; cont++)
{
printf("B");//cancela llamada cama 1
delay_ms(100);
restart_wdt();
} // if
}
}
}
void main()
{ setup_wdt(WDT_1152MS);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 ); //Para poder generar 200ms
setup_comparator(NC_NC); // Todo digital
set_tris_a(0xFF); //
enable_interrupts(GLOBAL); //Interrupciones Habilitadas
enable_interrupts(INT_RA3);
enable_interrupts(INT_RA4);
//Bucle infinito.
while(TRUE)
{
SLEEP();
}
}
Hola, el 12F675, no posee módulo UART, me parece raro que el compilador reconozca la directiva #use rs232.
Transmision(){ //Interrupcion por cambio de estado en pinesvoid funcion() {
if(PINA3) {
}
if(PINA4){
}
}void funcion() {
if(PINA3) {
if(PINA4){
}
}
}#include <12F675.h>
#FUSES WDT
#FUSES INTRC
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES PROTECT //Code protected from reads
int8 cont=0;
#use delay(int=4000000)
#use rs232(baud=4800,parity=N,xmit=PIN_A1,rcv=PIN_A0,bits=8,stream=PORT1)
#INT_RA
void Transmision(void)
{
if(!input(PIN_A3))
{
for(cont=0; cont<4; cont++)
{
printf("A");//envia llamada cama 1
delay_ms(100);
restart_wdt();
}
if(!input(PIN_A4))
{
for(cont=0; cont<4; cont++)
{
printf("B");//cancela llamada cama 1
delay_ms(100);
restart_wdt();
}
}
}
}
void main()
{ setup_wdt(WDT_1152MS);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 ); //Para poder generar 200ms
setup_comparator(NC_NC); // Todo digital
set_tris_a(0xFF); //
enable_interrupts(INT_RA3);
enable_interrupts(INT_RA4);
enable_interrupts(GLOBAL); //Interrupciones Habilitadas
//Bucle infinito.
while(TRUE)
{
SLEEP();
}
}
Gracias a todos ya lo solucione
#include <12F675.h>
#FUSES WDT
#FUSES INTRC
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES PROTECT //Code protected from reads
int8 cont=0;
#use delay(int=4000000)
#use rs232(baud=4800,parity=N,xmit=PIN_A1,rcv=PIN_A0,bits=8,stream=PORT1)
#INT_RA
void Transmision(void)
{
if(!input(PIN_A3))
{
output_high(PIN_A2);
for(cont=0; cont<8; cont++)
{
printf("A");//envia llamada cama 1
delay_ms(50);
output_Low(PIN_A2);
restart_wdt();
}
}
if(!input(PIN_A4))
{
output_high(PIN_A2);
for(cont=0; cont<20; cont++)
{
printf("B");//cancela llamada cama 1
delay_ms(200);///estabilizo mas la senial
output_Low(PIN_A2);
restart_wdt();
}
}
}
void main()
{ setup_wdt(WDT_1152MS);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 ); //Para poder generar 200ms
setup_comparator(NC_NC); // Todo digital
set_tris_a(0xFC); // ra2 como salida
enable_interrupts(INT_RA3);
enable_interrupts(INT_RA4);
enable_interrupts(GLOBAL); //Interrupciones Habilitadas
//Bucle infinito.
while(TRUE)
{
SLEEP();
}
}