Problema con modulo EUSART de PIC18F4550 en ASM

Hola amigos, tengo un sistema mas grande pero que transmite por la EUSARTde este PIC, en otros post la mencionan pero esta hecha en CCS o C y yo queria saber que error tengo en mi codigo, solo envie un caracter como muestra, mi reloj es interno de 4Mhz y 1 bit de parada, sin paridad a 9600, gracias.

Código:
    CONFIG WDT = OFF ;Watchdog deshabilitado
    CONFIG     MCLRE = OFF ;MCLR como entrada
    CONFIG PBADEN = OFF ;Todos los pines como entradas analogicas
    CONFIG LVP = ON ;Programacion en bajo voltaje encendido
    ;********* Bits de proteccion ******************
    CONFIG CP0 = OFF ;los bloques del codigo de programa
    CONFIG CP1 = OFF ;no estan protegidos
    CONFIG CP2 = OFF
    CONFIG CP3 = OFF
    CONFIG CPB = OFF ;Sector Boot no esta protegido
    CONFIG CPD = OFF ;La EEPROM no esta protegida

    CBLOCK 0x000
    datatx
    ENDC


    ORG 0x0000
     
    goto Main ;Se va al inicio del codigo principal
     
    Main
    ;******************* Inicializamos perifericos ***************************
    clrf    LATD
    movlw     B'01100000' ;Ajustamos el oscilador interno a 4 MHz
    movwf     OSCCON,.0
    movlw     B'00001111'
    movwf     ADCON1,.0 ;Todos los pines como I/O digitales
    clrf    TRISD,.0

;***********************Configuracion de EUSART***************************
ciclo    movlw    b'00000100'
    movwf    TXSTA
    movlw    b'10010000'
    movwf    RCSTA
    movlw    b'00000000'
    movwf    BAUDCON
    movlw    0X19
    movwf    SPBRG
    bsf    TRISC,7
    bcf    TRISC,6

    
    movlw    0xD6
    movwf    datatx

    bsf    TXSTA,TXEN
    movff    datatx,TXREG
acaba    btfss    TXSTA,1
    goto    acaba
    bcf    TXSTA,TXEN
    goto    ciclo
end
 
Última edición por un moderador:
Hola amigos, tengo un sistema mas grande pero que transmite por la EUSARTde este PIC, en otros post la mencionan pero esta hecha en CCS o C y yo queria saber que error tengo en mi codigo, solo envie un caracter como muestra, mi reloj es interno de 4Mhz y 1 bit de parada, sin paridad a 9600, gracias.
Saludos nietzche
Le realice algunos cambios al programa que pusiste para hacer una prueba de transmisión a 9600bps.
Compara los cambios que le hice con tu programa, lo pruebas y nos comentas si te funciona.

Este es el programa modificado.
Código:
    list p=18f4550
    include <p18f4550.inc>

    CONFIG WDT = OFF ;Watchdog deshabilitado
    CONFIG MCLRE = OFF ;MCLR como entrada
    CONFIG PBADEN = OFF ;Todos los pines como entradas analogicas
    CONFIG LVP = ON ;Programacion en bajo voltaje encendido
;********* Bits de proteccion ******************
    CONFIG CP0 = OFF ;los bloques del codigo de programa
    CONFIG CP1 = OFF ;no estan protegidos
    CONFIG CP2 = OFF
    CONFIG CP3 = OFF
    CONFIG CPB = OFF ;Sector Boot no esta protegido
    CONFIG CPD = OFF ;La EEPROM no esta protegida

    CBLOCK 0x000
    PDel0,PDel1
    ENDC

    ORG 0x0000

Main
;******************* Inicializamos perifericos ***************************
    movlw    0xBF        ; RC6 como salida (Tx)
    movwf    TRISC
    clrf    LATD
    movlw    b'01100100'    ; Ajustamos el oscilador interno a 4 MHz (Estable)
    movwf    OSCCON
    movlw    B'00001111'
    movwf    ADCON1        ; Todos los pines como I/O digitales
;***********************Configuración de EUSART a 9600bps con osc a 4MHz************
    movlw    0x19
    movwf    SPBRG
    movlw    0x24
    movwf    TXSTA
    movlw    0x90
    movwf    RCSTA
;*********************** Comienza el show ******************************************
ciclo
    movlw    'T'
    call    rs232_tx
    movlw    'X'
    call    rs232_tx
    movlw    ' '
    call    rs232_tx
    movlw    'T'
    call    rs232_tx
    movlw    'E'
    call    rs232_tx
    movlw    'S'
    call    rs232_tx
    movlw    'T'
    call    rs232_tx
    movlw    ' '
    call    rs232_tx
    call    demora
    goto    ciclo

rs232_tx
    movwf    TXREG            ; Enviar el dato del acumulador w
esperar
    btfss    TXSTA,TRMT        ; Transmisión completada si es 1
    goto    esperar
    return
;*************** Rutina de demora de .5 segundos ****************
demora    movlw    .239
        movwf    PDel0
PLoop1    movlw    .232
        movwf    PDel1
PLoop2    clrwdt
PDelL1    goto    PDelL2
PDelL2    goto    PDelL3
PDelL3    clrwdt
        decfsz    PDel1,1
        goto    PLoop2
        decfsz    PDel0,1
        goto    PLoop1
PDelL4    goto    PDelL5
PDelL5    goto    PDelL6
PDelL6    goto    PDelL7
PDelL7    clrwdt
        return

        end
Le agregue también una rutina de retardo para pausar la transmisión después de enviar los datos.

Espero te sirvan los cambios.

Suerte.
 
Última edición:
Muchas gracias, mi error al parecer era hardware y software, en el soft funciono con lo que me diste y aparte no tenia habilitado un pin en el receptor, se agradece :)
 
Atrás
Arriba