Autor Tema: Simulación en Proteus no funciona - UART de PIC18F4550.  (Leído 3135 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado arhonbe

  • PIC10
  • *
  • Mensajes: 4
Simulación en Proteus no funciona - UART de PIC18F4550.
« en: 17 de Agosto de 2018, 17:26:12 »
Buenas.

Ya trabajé con comunicación serie con el PIC 16F877A. Estoy intentando ahora pasar para el 18F4550 por causa de la memoria mayor. No estoy consiguiendo simular en el Proteus la comunicación serie, por ahora solamente la parte transmisión. Aparecen unos símbolos que no corresponden en el virtual terminal.

Compilo con CCS. El cristal é de 4MHz y también puse ese valor en el Edit Component del PIC en el Proteus. El baud rate é de 9600, também no virtual terminal.

Cuando corro el debug del Proteus veo que el registro txreg está con el valor a ser enviado, pero no funciona. Alguna sugerencia??? Muchas gracias desde ya.

Sigue imagenes del Proteus y código.

Código: [Seleccionar]

#include "D:\PROJETO2\_programas\18f4550_serial3\18f4550_serial3.h"

char data_in;

#byte trisa = 0xF92
#byte trisb = 0xF93
#byte trisc = 0xF94
#byte trisd = 0xF95

#byte spbrgh = 0xFB0
#byte spbrg = 0xFAF

#byte rcreg = 0xFAE
#byte txreg = 0xFAD
#byte txsta = 0xFAC
#bit txsta_trmt = 0xFAC.1
#bit txsta_brgh = 0xFAC.2
#byte rcsta = 0xFAB
#bit rcsta_oerr = 0xFAB.1
#bit rcsta_cren = 0xFAB.4

#bit trisc_6 = 0xF94.6
#bit trisc_7 = 0xF94.7

#byte pir1 = 0xF9E
#bit pir1_txif = 0xF9E.4
#bit pir1_rcif = 0xF9E.5

#byte osccon = 0xFD3
#byte baudcon = 0xFB8
#bit baudcon_brg16 = 0xFB8.3

void usart_init(long int baud_rate){

    long int temp;
    trisc_6=0;        // Make Tx pin as output
    trisc_7=1;        // Make Rx pin as input
   
    txsta_brgh =0;
    baudcon_brg16 = 0;
         
    // Baud rate=9600, SPBRG = (F_CPU /(64*9600))-1
    temp = (( (4000000) / (64 * baud_rate )) - 1);     
    spbrg = 6;   

    txsta = 0x20;     // Enable Transmit(TX) 
    rcsta = 0x90;     // Enable Receive(RX) & Serial
   
}

void usart_tx(char out)
{       
       while(pir1_txif==0){};            //wait for transmit interrupt flag
       txreg=out;                 //transmit data via TXREG register 
         
}

void main()
{


   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

    osccon=0x62;   
   
    usart_init(9600);         //initialize USART operation with 9600 baud rate
    delay_ms(50);
   
    while(1)
    {
        usart_tx(0x47); // G     
        delay_ms(1000);
        usart_tx(0x48); // H
        delay_ms(1000);
        usart_tx(0x49); // I
        delay_ms(1000);
    }

}




« Última modificación: 17 de Agosto de 2018, 17:28:30 por arhonbe »