Archivo
PROGRAMA DE COMUNICACION SERIAL EN ASSEMBLER PARA EL MICRONTROLADOR HC908GP32
El siguiente es un código empleado para establecer una comunicación serial entre un computador y un microcontrolador de la marca Motorola de referencia HC908GP32.
El condigo consiste en enviar caracteres desde teclado de un computador conectado por el puerto serial hasta el microcontrolador, este a su vez tiene conectado por su puerto PTB un display de 7 segmentos de la siguiente manera:
Display de 7 segmentos —————— Microcontrolador ———————PC
El microcontrolador recibe los caracteres desde el PC si son numero desde 0 hasta 9 entonces los muestra en el display de la contrario muestra la letra E indicando error.
El siguiente es el código que se debe quemar en el microcontrolador explicado paso a paso.
FLS EQU $8000 ; se iniciará en la posición 8000 de la memoria
RST EQU $FFFE
CONFIG1 EQU $1F
PTB EQU $01 ;se inicia el Puerto B
DDRB EQU $05 ;se configura el DRRB
SCDR EQU $0018
TC EQU $06
SCISR EQU $0016
SCRF EQU $05
CONT EQU $60 ;se crea apuntador en la posición 60 de nombre CONT
DATO EQU $61 ;se crea apuntador en la posición 61 de nombre DATO
VAR EQU $62 ;se crea apuntador en la posición 62 de nombre VAR
SCC1 EQU $0013
SCC2 EQU $0014
SCBR EQU $0019
ORG FLS ;se configura como punto de partida del programa FLS
MAIN: BSET 0,CONFIG1 ; de deshabilita el COP
;Se configura todo el sistema para establecer la comunicación
MOV #$03,SCBR
BSET 6,SCC1
BSET 2,SCC2
BSET 3,SCC2
MOV #$FF,DDRB ; configure todo el Puerto B como salida
INICIO: MOV #$00,PTB ; apaga todo el puerto
LDHX #MSG ;carga el mensaje “INGRESE UN NUMERO”
TX: LDA ,X
CMP #$FF
BEQ PRINT
BRCLR TC,SCISR,* ; Espera que se envié un dato al micro
STA SCDR
AIX #$01
BRA TX
PRINT: BSR DELAY
BRCLR SCRF,SCISR,*
LDA SCDR
CMP #$39
BGT ERROR
CMP #$30
BLO ERROR
SUB #$30
STA DATO
LDHX #TABLA ;carga el número correspondiente en la tabla
TXA
ADD DATO
TAX
LDA ,X
EOR #$80
STA PTB ; envía el número correspondiente al display
BSR DELAY
BRA INICIO
ERROR:
MOV #$F9,PTB ; envía la letra E al display
BSR DELAY ; va a la subrutina para esperar un tiempo
BRA INICIO ; vuelve al inicio del programa
; genera una rutina temporizadora con la variable VAR
DELAY: MOV #$00,CONT
SIGA: CLR VAR
LAZO: NOP
NOP
NOP
NOP
NOP
DEC VAR
BNE LAZO
DEC CONT
BNE SIGA
RTS
; envía un mensaje al computador “INGRESE UN NUMERO”
MSG: DB “INGRESE UN NUMERO”,$FF
TABLA: DB 3F ;tabla de los número del 0 al 9
DB 06
DB 5B
DB 4F
DB 66
DB 6D
DB 7D
DB 07
DB 7F
DB 67
ORG RST
DW MAIN ; regresa al comienzo del programa
END ;termina el programa
Agradeciemientos a Monica Ovadia Cardona
Alguna duda o sugerencia por favor pongan el comentario.
Gracias.