Mira creo que aqui ya esta tambien funcionando junto con el EUSART...
basicamente el problema estaba en que la frecuencia de oscilacion no estaba bien, solo que queda la duda del gatilleo, si con un solo pulso se queda gatillado el triac o hay que mantenerlo hasta el siguiente cruce.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <stdbool.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC = INTRCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
unsigned char BUFFER=127;
void interrupt isr(void){
if(INTCONbits.T0IF==true){
INTCONbits.T0IF=false;
PORTCbits.RC0=1;
__delay_us(6);
PORTCbits.RC0=0;
INTCONbits.T0IE=false;}
else if (PIR1bits.RCIF==true){
PIR1bits.RCIF=false;
BUFFER=RCREG;}
else if (INTCONbits.INTF==true){
INTCONbits.INTF=false;
TMR0=BUFFER;
INTCONbits.T0IE=true;
OPTION_REGbits.INTEDG=!OPTION_REGbits.INTEDG;}
}
void PIC_Init(void){
//Config
OPTION_REGbits.INTEDG=true;
OPTION_REGbits.T0CS=false;
OPTION_REGbits.PS0=false;
OPTION_REGbits.PS1=false;
OPTION_REGbits.PS2=true;
OPTION_REGbits.PSA=false;
OSCCON=0x61;
//Interrupt Config
PIE1bits.RCIE=true;
INTCONbits.INTE=true;
INTCONbits.PEIE=true;
INTCONbits.GIE=true;
//Ports Config
ANSEL=0;
ANSELH=0;
TRISA=0b100;
TRISB=0b100000;
TRISC=0b0;
PORTA=0;
PORTB=0;
PORTC=0;
//TX_RX Config
TXSTAbits.TXEN=true;
TXSTAbits.TRMT=true;
TXSTAbits.TX9=false;
TXREG=0;
RCSTAbits.CREN=true;
RCSTAbits.RX9=false;
//Baud Rate Config
RCSTAbits.SPEN=true;
TXSTAbits.SYNC=false;
TXSTAbits.BRGH=true;
BAUDCTLbits.SCKP=false;
BAUDCTLbits.BRG16=false;
SPBRG=25;
SPBRGH=0;
}
void main(void)
{
PIC_Init();
while(true);
}
basicamente el problema estaba en que la frecuencia de oscilacion no estaba bien, solo que queda la duda del gatilleo, si con un solo pulso se queda gatillado el triac o hay que mantenerlo hasta el siguiente cruce.
Última edición: