Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

25/11/2013 #1


Problemas con virtual terminal en proteus
Hola a todos, tengo un problema cuando uso la comunicación serial con el pic 16f877a. Estoy simulándolo para enviar datos desde el pic al virtual terminal del proteus mediante el teclado de 4x4, pero cuando presiono una tecla en la pantalla me salen varias veces el mismo caracter y no una sola como debería ser. ¿Como podría solucionarlo?

Y también quisiera que me den algunas ideas sobre como usar el virtual terminal para que el pic reciba datos y los muestre en un lcd. Gracias ...
25/11/2013 #2

Avatar de LaElectronicaMeOdia

primero sube lo que llevas echo (simulacion y codigo) para que no manden tu tema a moderacion.
25/11/2013 #3


Aquí está el código que hice, utilizo hi-tech
Código:
////////////////////////CODIGO//////////////////////////////////////////
#include <htc.h>
#ifndef _XTAL_FREQ
    #define _XTAL_FREQ 10000000
#endif

void MCU_init(){
    PORTD = 0X00;
    TRISD = 0X00;
    TRISC = 0b10000000;
    TRISB = 0x0F;
    OPTION_REG = 0x07;
}

void lectura_teclado(){
    PORTB = 0b11101111;
    if(RB0==0){
        TXREG = '7';
        __delay_ms(100);
    }
    else{
        if(RB1==0){
        TXREG = '4';
        __delay_ms(100);
        }
        else{
            if(RB2==0){
            TXREG = '1';
            __delay_ms(100);
            }
            else{
            if(RB3==0){
            TXREG = 'N';
            __delay_ms(100);
            }
            }
        }
    }
    
    PORTB = 0b11011111;
    if(RB0==0){
        TXREG = '8';
        __delay_ms(100); 
    }
    else{
        if(RB1==0){
        TXREG = '5';
        __delay_ms(100);
        }
        else{
            if(RB2==0){
            TXREG = '2';
            __delay_ms(100);
            }
            else{
            if(RB3==0){
            TXREG = '0';
            __delay_ms(100);
            }
            }
        }
    }
    
    PORTB = 0b10111111;
    if(RB0==0){
        TXREG = '9';
        __delay_ms(100); 
    }
    else{
        if(RB1==0){
        TXREG = '6';
        __delay_ms(100);
        }
        else{
            if(RB2==0){
            TXREG = '3';
            __delay_ms(100);
            }
            else{
            if(RB3==0){
            TXREG = '=';
            __delay_ms(100);
            }
            }
        }
    }
    
    PORTB = 0b01111111;
    if(RB0==0){
        TXREG = '/';
        __delay_ms(100); 
    }
    else{
        if(RB1==0){
        TXREG = 'x';
        __delay_ms(100);
        }
        else{
            if(RB2==0){
            TXREG = '-';
            __delay_ms(100);
            }
            else{
            if(RB3==0){
            TXREG = '+';
            __delay_ms(100);
            }
            }
        }
    }
    
}

void configuracion_serial(){
    //TRANSMISION
    SPBRG = 64; // 9600 baudios
    BRGH = 1;
    SPEN = 1;
    SYNC = 0;
    //TXIE = 1;    // enable transmision
    TX9 = 0;
    TXEN = 1;
    
    //RECEPCION
    CREN = 1;
    RCIE = 1;    //enable recepcion
    RX9 = 0;
    
}

void main(){
    MCU_init();
    configuracion_serial();
    while(1){
        lectura_teclado();
    }
}
////////////////////////////////////////////////////////////////////
25/11/2013 #4

Avatar de LaElectronicaMeOdia

ya probaste poner el delay mas largo como de unos 500

__delay_ms(500)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.