Protocolo decomunicación RS-232 en C18

Holaaaa...
Estoy realizando un programa en C18 con el pic 18f2550, trata de realizar una comunicación serial RS-232 a travez de interrupciones; el programa consta en el control de dos leds por medio del puerto B.

El problema es que cuando simulo en proteus con el MAX 232 y la hyper terminal, relativamente se imprimen los comentarios.
Pero al mandar un dígito desde la hyper terminal para realizar una sentencia de control no se digita nada,
y no entiendo.:cry:

Pido de favor que alguien pueda ayudarme en mi programa llevo varias semanas con este dolor de cabeza.
Les dejo el programa para que puedan analizar y colaborar para esta causa.

AQUI LES DEJO UNA IMAGEN DE LA SIMULACION EN PROTEUS.


Código:
#include <p18f2550.h>
#include <usart.h>
#include <stdio.h>
#include <stdlib.h>
#include <portb.h>
#include <delays.h>

#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config PBADEN = OFF
#pragma config MCLRE = ON

#define BAUD = 9600
#define OSCCON = 4000000

volatile char Dato = 0, recibe = 0;
void ISRRecepcion(void);
#pragma code Interrupcion = 0x008

void VectorInterrupcion(void){
_asm goto
        ISRRecepcion
        _endasm
}

#pragma code //se cierra la seccion

#pragma interrupt ISRRecepcion
void ISRRecepcion(void){

    if(PIR1bits.RCIF==1){
        Dato=getcUSART();
        recibe = 1;
        PIR1bits.RCIF=0;
        PORTB = ~PORTB;
        
    }

    }

void main (void)
{
TRISA=255; //puerto a entradas
OpenRB0INT(PORTB_CHANGE_INT_ON & FALLING_EDGE_INT & PORTB_PULLUPS_OFF);

//USART configuration:no interrupt, 8 N 1 async. mode,baud-rate=9600
OpenUSART(USART_TX_INT_OFF    &        //Disable Interrupts
                USART_RX_INT_ON    &        //----------------
                USART_ASYNCH_MODE    &        //Modo asincronico
                USART_EIGHT_BIT      &    //8 bit
                USART_CONT_RX        &        //resepcion continua
                USART_BRGH_HIGH,
               26);     //FOSC / (16 * (spbrg + 1));



     baudUSART(  BAUD_IDLE_CLK_HIGH &
     BAUD_8_BIT_RATE &
     BAUD_WAKEUP_OFF &
     BAUD_AUTO_OFF);

     RCONbits.IPEN = 0; //Deshabilitacion de los niveles de prioridad de las interrupciones
     INTCONbits.GIE = 1; //Habilitamos global de las interrupciones
     recibe = 0;
     TRISB=0b10000000;



/* SECUENCIA DE COMANDOS QUE SE VISUALIZAN EN LA PANTALLA DE LA HYPERTERMINAL */
    printf("COMUNICACION LISTA SERIAL RS-232 \r");
       Delay10KTCYx(250);
    printf("SELECCIONAR DIRECCION DEL MOTOR:\r");
     while(BusyUSART());
 while(!DataRdyUSART());
       while (1){
  switch (Dato){
   case'a':
   PORTB=0b10011000;
   Delay10KTCYx(100);
   putrsUSART("DIRECCION DEL MOTOR HACIA ADELANTE\r\n");
       break;
 case'b':
       PORTB=0b10010000;
       Delay10KTCYx(100);
putrsUSART("DIRECCION DEL MOTOR A LA IZQUIERDA\r\n");
        break;
 case'c':
       PORTB=0b10001000;
       Delay10KTCYx(100);
putrsUSART("DIRECCION DEL MOTOR A LA DERECHA\r\n");
        break;
 case'd':
      PORTB=0b10000000;
putrsUSART("STOP\r\n");
     Delay10KTCYx(100);
       break;
    }
  }
       }
 

Adjuntos

  • proteus.jpg
    proteus.jpg
    243.5 KB · Visitas: 5
Última edición:
Atrás
Arriba