TRANSMISIÓN Y RECEPCIÓN SERIAL

Salvador Macías Hernández

Página hecha el Domingo 30 de Abril del 2006

 

Programa que transmite la cadena, así como se muestra en la simulación:

  • Salvador Macias Hernandez

  • Instituto Politécnico Nacional

  • En espera de comando

Este programa requiere de un cristal de 11.0592 Mhz, y la comunicación serial se hace a 9600 bd - 8 bits - 1 bit de parada y sin paridad.

 

 

 

SERIALBUFFER equ 0FF00h

org 0000h
jmp INICIO

org 0023h
JB TI, DATOENVIADO ;Verificando Mótivo de Interrupción
JB RI, DATORECIBIDO 
DATOENVIADO:
CLR TI
JB 2, MANDANDOCADENA ;Si el bit 2 está activo es por que se está
JNB 2, SALIR_0023h ;mandando una cadena de caracteres 
MANDANDOCADENA:
push Acc
clr A
inc DPTR
movc A,@A+DPTR
JZ CADENAFINALIZADA
mov SBUF,A
pop Acc
reti
CADENAFINALIZADA:
pop Acc
clr 2
reti
DATORECIBIDO:
clr RI
push DPh
push DPl
mov DPTR, #SERIALBUFFER
movx A,@DPTR
inc A
movx @DPTR,A
mov DPL,A
mov A,SBUF
movx @DPTR,A
CJNE A,#13, ESCRIBEBYTE ;Si el caracter es enter resetea el Bufer
mov A,#0Fh ;Vamos a recetear el Buffer Serial
mov DPTR, #SERIALBUFFER
movx @DPTR,A
ESCRIBEBYTE:
pop DPl
pop DPh
reti
SALIR_0023h:
reti


*******************************************************************************
* SUBRUTINAS *
*******************************************************************************

;-----------------------------------------------------------
;INICIALIZA-9600-8-1-SP -- Inicializa el Puerto Serial 9600bps 8 Bits 
; Sin paridad 1 bit stop
;
;USA: MODIFICA: Ninguno
;
;Variables de Entrada:
; NINGUNA
;Variables de Salida:
; NINGUNA 
;
;Observaciones:Inicializa el puerto serial a 9600bps 
;
;Ejemplo:
; call INICIALIZA-9600-8-1-SP
;-----------------------------------------------------------

INICIALIZA_9600_8_1_SP:
clr TI
clr RI
; Inicialización de las Interrupciones
Setb EA ; Habilitar Interrupciones
Setb ES ; Habilita Interrupción del Puerto Serial
; Inicialización del Temporizador 1
Clr PCON.7 ;(SMOD) Velocidad normal
mov TMOD,#020h ; Poner el Temporizador 1
; en modo dos 8bit Reload
mov TH1,#0FDh ; Cargar el temporizador con el valor 
mov TL1,#0FDh ; 0FDh para 9600 bps
setb TR1
; Inicialización del Puerto Serial
mov SCON,#050h ; Transmición serial modo 1 8Bit-UART
; recepción hablitada
Ret


;-----------------------------------------------------------
;TRANSMITECADENA -- Transmite una cadena de caracteres
;
;USA: Bit 2 Acc MODIFICA: DPTR
;
;Variables de Entrada:
; DPTR -- Dirección del Mensaje
;Variables de Salida:
; NINGUNA 
;
;Observaciones:Inicializa el puerto serial a 9600bps 
;
;Ejemplo:
; ESPMENSAJE: JB 2, ESPMENSAJE
; mov DPTR,#MENSAJE1
; call TRANSMITEMENSAJE
;
;MENSAJE1:
; DB 'Salvador Macias Hernandez'
; DB 00h
;-----------------------------------------------------------

TRANSMITECADENA:
push Acc
clr A
setb $2
movc A,@A+DPTR
JZ CADENAFINALIZADA
mov SBUF,A
pop Acc
ret

*******************************************************************************
* INICIO DEL PROGRAMA *
*******************************************************************************
INICIO:
clr 2
mov A,#0Fh
mov DPTR, #SERIALBUFFER
movx @DPTR,A
call INICIALIZA_9600_8_1_SP
mov DPTR,#MENSAJE1
call TRANSMITECADENA
ESPMENSAJE: JB 2, ESPMENSAJE
mov DPTR,#MENSAJE2
call TRANSMITECADENA
ESPMENSAJE1: JB 2, ESPMENSAJE1
mov DPTR,#MENSAJE3
call TRANSMITECADENA
ESPERA: sjmp ESPERA



*******************************************************************************
* DATOS *
*******************************************************************************
MENSAJE1:
DB 'Salvador Macias Hernandez'
DB 13, 00h
MENSAJE2:
DB 'Instituto Politécnico Nacional'
DB 13, 00h
MENSAJE3:
DB 'En espera de comando'
DB 13, 00h

end