TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Pedro en 09 de Diciembre de 2020, 16:29:01
-
Saludos, estoy probando a recibir datos por el puerto serie2 del pic18f25k22 activando interrupcion de dato recibido :? y estos reenviarlos por el puerto serie1. Cuando recibe unos 15 caracteres salta error. He leído datasheet y no veo como solucionarlo. El código esta escrito en mikroc.
////////////////////////////////////
sbit abrir_v1 at PORTB.b0 ; // botones para abrir/cerrar
sbit cerrar_v1 at PORTB.b1 ;
sbit abrir_v2 at PORTB.b2 ;
sbit cerrar_v2 at PORTB.b3 ;
sbit pabrir_v1 at TRISB.b0 ;
sbit pcerrar_v1 at TRISB.b1 ;
sbit pabrir_v2 at TRISB.b2 ;
sbit pcerrar_v2 at TRISB.b3 ;
//7/
volatile char cadena[20];
unsigned short xx = 0 ;
unsigned flip = 0 ;
void UART2_interrup_HIGH(){
if(PIR3.RC2IF == 1){
PIR3.RC2IF = 0 ;
cadena[xx] = UART2_Read() ;
if(xx < 98){xx++ ;}
else{xx = 0 ; }
flip = 1 ;
} }
void main() {
ANSELA = 0 ;
ANSELB = 0 ;
ANSELC = 0 ;
pabrir_v1 = 1 ;
pcerrar_v1 = 1 ;
pabrir_v2 = 1 ;
pcerrar_v2 = 1 ;
TRISB.b7 = 1 ;
TRISB.b6 = 0 ;
TRISC.b7 = 1 ;
TRISC.b6 = 0 ;
UART1_Init(9600);
UART2_Init(9600);
//I2C1_Init(100000);
INTCON = 0b11000000 ;
PIR3.RC2IF = 0 ;
PIE3.RC2IE =1 ;
INTCON2=0b10000000;
INTCON3 = 0 ;
IPR3.RC2IP = 1;
PMD0.UART2MD=0;
while(1){
asm clrwdt ;
if(flip == 1){
flip = 0 ;
UART1_Write_Text(cadena) ;
}
}} :?
-
Puede ser porque el largo de cadena no es suficiente! lo defines de 20 y el contador llega hasta 98.
-
No solo eso, sino que jamás termina la cadena con un '\0' que es lo que se espera de un string.
-
Lo que no entiendo es por que le salta error por Stack overflow. Estará en overflow el arreglo cadena[] por que está intentando acceder a “n”’elementos no asignados.
Eso CCS te da error en tiempo de compilación. MikroC no se como lo hará. Pero lo que es la Stack no tiene por qué colapsar con ese error.
-
.