Intel 8051 El modo UART 0 no funciona en Proteus (los impulsos de reloj en TXD se producen constantemente, la MCU recibe los propios bytes)

0

Creo que he leído todo sobre la UART de 8051 pero no puedo entender qué es lo que va mal, incluso en este ejemplo más simple. De acuerdo con la literatura en el modo 0, la MCU transmite un byte solo cuando lo escribimos en SBUF, y solo allí se producen 8 impulsos de reloj en la línea TXD; La MCU lee el byte cuando cambia el voltaje TXD.

En este ejemplo (solo el indicador está conectado a P1) no escribo nada en SBUF, pero pediédicamente TI, luego se produce la interrpupt RI, el voltaje TXD cambia constantemente y recibo constantemente 0. La frecuencia de reloj es de 12 MHz. ¿Qué puede ser una razón?

¡Gracias a todos por cualquier esfuerzo!

;====================================================================
; MCU: 80C51
; Compiler:  ASEM-51 (Proteus)
;====================================================================

$NOMOD51
$INCLUDE (8051.MCU)

;====================================================================
; RESET AND INTERRUPT VECTORS
;====================================================================

      ; Reset vector
      org   0000h
      jmp   Init

      ; Serial port interrupt vector
      org   0023h
      call  SERIAL_PORT_HANDLER
      reti

;====================================================================
; MAIN CODE BLOCK
;====================================================================

      org   0150h
Init:   
      setb  ES
      setb  EA
      mov   SCON,       #00010000b ; UART Mode 0,
                       ; accept messages with any 9th bit,
                       ; enable recieving,
                       ; don't recieve 9th bit, 
                       ; clear interrupt flags

Loop:
      jmp   Loop

;====================================================================
; SERIAL PORT INTERRUPT HANDLER
;====================================================================      

SERIAL_PORT_HANDLER:
   jb       TI,     _SENT

_RECEIVED:
   mov      P1, SBUF ; Move to indicator
   clr      RI
   jmp      _AFTER_SERIAL_PORT_HANDLING

_SENT:
   clr      TI

_AFTER_SERIAL_PORT_HANDLING:
   ret

;====================================================================
      END
    
pregunta N. Kudryavtsev

2 respuestas

0

Los impulsos constantes en la línea TXD son probablemente un fallo de Proteus. Reensamblado este esquema en NI Multisim y hay MCU con el mismo firmware que generan los impulsos de reloj en el pin TXD correctamente, solo cuando escribo en SBUF.
¿Qué pasa con el byte de recepción? Como lo entendí, comienza cuando RE = 1 y RI = 0.

    
respondido por el N. Kudryavtsev
2

¿Dejaste el circuito abierto del pin de entrada UART? Si es así, probablemente se vea como un bit de inicio ocasional debido a la captación de ruido.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas