Menú
Foros
Nuevos mensajes
Buscar en foros
Novedades
Nuevos mensajes
Nuevos recursos
Última actividad
Recursos
Últimas revisiones
Buscar recursos
Acceder
Registrarse
Novedades
Buscar
Buscar
Buscar sólo en títulos
De:
Nuevos mensajes
Buscar en foros
Menú
Acceder
Registrarse
Install the app
Instalar
Foros
Diseño digital
Microcontroladores y sistemas embebidos
Problema con CCS (Interrupción RDA)
JavaScript está desactivado. Para una mejor experiencia, por favor, activa JavaScript en el navegador antes de continuar.
Estás usando un navegador obsoleto. No se pueden mostrar este u otros sitios web correctamente.
Se debe actualizar o usar un
navegador alternativo
.
Responder al tema
Mensaje
[QUOTE="unifim, post: 1059473, member: 137394"] hola, una consulta yo tengo implementado el siguiente codigo, pero al simular en proteus, el do while de la interrupcion RDA solo me esta capturando el valor del caracter que llega, la variable data se esta actualizando pero no se adiciona a la variable cadena, es decir no se esta juntando los caracteres en el array cadena. podrian ayuarme con esta duda por favor, lo probe en proteus simulando paso a paso y se ve el array cadena nunca se llena de algun valor. adjunto el codigo y el diagrama en proteus. por fa ayuda. [code]#include <16f877a.h> #include <string.h> #include <stdlib.h> #fuses NOWDT,HS,NOLVP #use delay(clock=10M) #use RS232(baud=9600,XMIT=PIN_C6,RCV=PIN_C7,stream=receptor) #bit RB0=0x06.0 #bit RB1=0x06.1 #bit RC3=0x07.3 #bit RC4=0x07.4 #bit RC7=0x07.7 int i; int const length=10; char data; char cadena[length]; short flagcomand=0; signed int16 p=0; #int_RDA void RDA_isr(void) { do { data=fgetc(receptor); if(data=='\0') { break; } else { cadena[i]=data; i++; } }while(kbhit(receptor)); flagcomand=1; } void limpiar_buffer() { int j; for(j=0;j<length;j++) { cadena[j]=0x00; } } #INT_EXT // directiva de interrupcion por cambio de estado en RB0 void interrupcion_RB0() { if(RB0==1) { ext_int_edge(H_TO_L); if(RB1==1) { p=p+1; } } else { ext_int_edge(L_TO_H); if(RB1==1) { p=p-1; } } //putc(p); //puts(p); printf("\r%Ld",p); } void main() { //char valorRec[4]; //variable donde se recibira desde la cadena char c; int d; set_tris_b(0xFF); //configuro portb=in set_tris_c(0x80); //solo el Rx esta como entrada RC3=0; RC4=0; //configuracion pwm setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_16,255,1); //Tpwm=1.63ms--->el ciclo de trabajo sera de 0-255 set_timer2(0); set_pwm1_duty(0); enable_interrupts(INT_RDA); enable_interrupts(INT_EXT); //habilito interrupcion RB0 ext_int_edge(L_TO_H); //configuro interrupcion por flanco de subida enable_interrupts(GLOBAL); // habilito interrupcion global while(TRUE) { //gets(valorRec); c=cadena[0]; if(flagcomand==1) { flagcomand=0; switch(c) { case 's': { //printf("%3Lu",p); //putc(p); //printf("%3u",pv); //delay_ms(500); break; } case 'i': { RC3=0; RC4=1; break; } case 'd': { RC3=1; RC4=0; break; } default: { d=atoi(cadena); set_pwm1_duty(d); //putc(p); //printf("%3Lu",p); break; } } limpiar_buffer(); } } }[/code] [/QUOTE]
Verificación
Responder
Foros
Diseño digital
Microcontroladores y sistemas embebidos
Problema con CCS (Interrupción RDA)
Arriba