UNIVERSIDAD AUTdNOMA METROPOLITANA

Anuncio
UNIVERSIDAD AUTdNOMA METROPOLITANA
UNIDAD IZTAPALAPA
REPORTE DE PROYECTO TERMINAL
"
Sistema de Desarrollo Basado en el Microcontrolador 68HC11 "
INGENIERIA ELECTRóNICA
Área de concentración :COMUNICACIONES
José Manuel Pérez Tovar
88326210
Asesor
Mtro. Victor Hugo Téllez A r - t a
Resumen
El objetivo del presente proyecto fue diseñar un sistema que funcione como base para el desarrollo de
proyectos mas grandes y complejos. El elemento principal del sistema es el microcontrolador68HC11 de
Motorola.
El sistema se diseñó con fines académicos, y se empleará en los cursos de Sistemas Digitales. Esta poderosa
herramienta, permitirá al profesor mostrar de manerapráctica y tangible la conexión y operación de un
microcontrolador. Para los alumnos será una base sólida con la cual puedan diseñar sistemas para
aplicaciones tan diversas como su creatividad e ingenio se los permita.
El proyecto se efectuó en dos etapas, en la primera se diseñó el hardware del sistema, para ello se emplearon
las herramientas de diseñó de circuitos lógicos y los conocimientos adquiridos en los cursos de Sistemas
Digitales. En la segunda etapa se programó el software decontrol para el hardware, en el desarrollo del
software se utilizaron elementos de programación estructurada, algoritmos de búsqueda secuencial, algoritmos
de conversión numérica, programación en lenguaje de alto nivel ( C++) y lenguaje de bajo nivel ( Ensamblador
del 68HC11 ).
El sistema por si solo es operativo, posee un conjunto de ocho displays siete segmentosy un teclado
alfanumérico para desplegar e introducir información. Se diseño pensando en la escalabilidad, así que puede
ser expandido de acuerdo a las necesidades del usuario, se agregó un puerto de comunicaciones seriales
RS 232 para que el sistema pueda ser controlado y programado desde una PC. La integración del puerto
serial, permitirá al alumno aprender a programar el microcontrolador, porque una vez ensamblado su programa
lo enviará desde la PC al sistema, y después le ordenaráa este que ejecute elprograma.
Una vez que el alumno comprenda la operación del microcontrolador estará en condiciones de construir un
sistema similar o expandir este sistema conforme a sus necesidades.
Concluimos que este sistema sería una herramienta de apoyo para que los profesores utilicen un método
alterno en la enseñanza de Sistemas Digitales y para que los alumnos aprendan eficazmente estas materias.
2
Tabla de contenido
Tablas
4
Figuras
4
Introducción
5
Etapas de Desarrollo del Proyecto
6
Resultados
13
Bibliografía
14
Anexo
15
3
Tablas
Tabla de Códigos de Exploración del Teclado 7
Tabla
Displays
Códigos
de
de
8
Figuras
Mapa de Memoria
6
Diagrama del Circuito
9
4
Introducción
En los cursos de sistemas digitales se estudia y analiza el funcionamiento de Unidades Centrales de
Procesamiento (CPU's ) y Unidades de Micro Control (MCU's) que forman la base para el funcionamiento de
las computadoras actuales, estos dispositivos conocidos como microprocesadores y microcontroladores
permiten crear sistemas tan diversos que van desde un sencillo control de sistemas de iluminación hasta un
complejo sistema de digitalización y procesamiento de imagen en tiempo real.
La operación de los microprocesadores y microcontroladores de tecnología ClSC es en esencia la misma
independientemente de que familia se trate ( Intel, Motorola, Zilog etc. ) . Por ello es importante que el alumno
comprenda las bases de operación de los mismos, así mas tarde comprenderá sistemas de mayor
complejidad.
El propósito de este proyecto es proporcionar una herramienta para profesores y alumnos que facilite el
aprendizaje de la operación y programación de un microcontrolador; así como el diseño y prueba de módulos
adicionales al sistema. Con ello el profesor podrá explicar al alumno de manera explícita,los conceptos básicos
del funcionamiento de los dispositivos, para que este logre un aprendizaje práctico y eficaz.
El sistema debe permitir al profesor mostrar al alumno:
1) La interconexión física al detalle de un microcontrolador,con sus periféricos básicos asociados
(RAM, EPROM, reloj, circuito de reset displays y teclado.).
2) La ejecución de programas diversos almacenados en EPROM's del sistema.
3) lnterfaz del microcontrolador con una PC vía puerto serial RS-232para intercambio de información.
4) Una herramienta ágil de desarrollo y prueba de programas.
5) Una base probada para crear proyectos más complejos, agregando nuevos elementos al sistema.
5
Etapas de Desarrollo del Proyecto
1.- Análisis y diseño del hardware
Se construyó un sistema mínimo con el 68HC11 constituido por los elementos siguientes
Microprocesador 68HC11
Memoria RAM 2764 8KB.
Memoria EPROM 6264 8KB.
Teclado alfanuméricopara ingresar información hacia el sistema.
Controlador de teclado y displays Intel 8279.
Conjunto de 8 displays 7 segmentos para despliegue de información
Una vez construido el sistema se agregó un puerto de comunicación RS-232 para conectarse vía serial con una
PC.
El elemento principal del hardware es el MCU 68HC11,el cual posee un bus de datos de 8 bits y un bus de
direcciones de 16 bits capaz de direccionar un espacio de 64KB. El espacio de 64KB se dividió en bloques de
8KB al demultiplexar las últimas tres direcciones del bus, la utilización del espacio de memoria se muestra en
el siguiente mapa.
Mapa de Memoria
REGISTROS INTERNOS
I
I
I
$FFFF
I
I
EPROMEXTERNA
I
OCTAVO BLOQUE
8K DE
6
El 8279 genera códigos de exploración cuando se oprime una tecla, éstosdebían ser interpretados mas tarde
por el software, así que se creó un una tabla de conversión para referencia, la tabla se muestra a continuación.
Tabla de Códigos de Exploración del Teclado
7
Para escribir datos reales desde el MCU en los displays se requirió convertirlos en códigos de display siete
segmentos, esta esla tabla de referencia utilizada para tal conversión :
Tabla de Códigos de Displays
S
1101
O
I
ESPACIO
n
i
I
o1 10
1O00 O000
0101 1100
O000 O000
O101 0100
O000 o 1O0
I
$6D
$80
$5C
$00
$54
$04
I
I
=l
I
u
r
~~
LOSdiagramas del circuito terminado se muestran en las siguientes paginas
8
L
S-"-
Ii
I
L
I
I
-, ,
L
~
il
I
- 1-
I?
2.- Diseño del software de control del sistema
Se desarrolló el programa MONITOR en lenguaje ensamblador propio del microcontrolador del 68HC11, y el
programa de comunicación desde la PC vía puerto serial, el código fuente de ambos programas se muestra en
el Anexo.
El programa MONITOR que le da servicio al sistema, realiza las siguientes funciones :
Cuando a el sistema es encendido, primero hace un autodiagnóstico, que consiste en lo siguiente :
a ) Ejecuta el CHECKROM de la EPROM para verificar su estado si se encuentra que el CHECKROM
no es el correcto, envía un mensaje de error en los DISPLAYS del sistema. El CHECKROM se hace
sumando byte a byte sin acarreo.
b) Revisa la SRAM haciendo un CHECKRAM, el cual se hace escribiendo un byte en una localidad
dada, para luego leer esa localidad y comparar lo que se escribió y lo que se leyó, si son iguales se
pasa a la siguiente localidad hasta completar los 8 KBytes; si no es igual se envía un mensaje de error
en los DISPLAYS del sistema.
c ) Después de hacer CHECKSUM y CHECKRAM se va un menúprincipal que consta de los siguientes
servicios o procedimientos que serán llamados presionandouna tecla especifica que posee una función
especial:
Funciones especiales implementadas en el programa monitor
1.- F1 (función 1 ) ó EJEC
AI ser llamado este procedimiento que le da servicio a esta función, se ejecuta un programa que
previamente se ha editado en la RAM externa (SRAM) o en la RAM interna (la que posee el micro) o un
programa grabado previamente en la EPROM o cargados desde el puerto serie.
2.- F2 ( función 2 ) ó EDIT
Mediante este procedimiento, es posible introducir por medio del teclado del 8279, un programa. Este
programa puede ser editado en la memoria RAM externa o en la RAM interna.
Cuando es llamada esta función, luego de ser escogida la RAM en la cual se va a editar, aparece en los
DISPLAYS la información siguiente
DISPLAYS
ID7
D6
D5
D4
D3
DlRECClON EN HEXADECIMAL (D7...D4 )
D2
DI
DO1
BYTE EN ESA DIRECCIóN (Dl, DO )
D3 & D2 PERMANECEN APAGADOS.
11
Luego de la edición, se debe presionar la tecla de ENTER, para ir a la siguiente dirección a editar, cuando
se presiona ENTER se incrementa a la siguiente dirección. Cuando sequiera salir de la edición, se presiona
una tecla con función específica que es la de SALIR
3.- F3 ( función 3 ) ó RECONFIGURACION DE REGISTROS INTERNOS
En esta función se puede cambiar cualquier registro interno del 64HC1l. En ella se puede cambiar un
registro, que previamente se ha escogido. La introducción del valor de ese registro se hace desde el teclado.
4.- F4 ( función 4 ) ó TRANSMISION POR PUERTO SERIAL
Recepción de programas atraves del puerto serial RS-232 desde una PC.
5.- F5 (función 5 ) ó REVISAR
Cuando es llamado a este procedimiento, en los DISPLAYS aparecelo siguiente:
DISPLAYS
[D7
D6
D5
D4
D3
DlRECClON EN HEXADECIMAL (D7 ...D 4 )
D3 & D2 PERMANECEN APAGADOS.
D2
DI
DO1
BYTE EN ESA DIRECCIóN (Dl, DO )
En este procedimiento se visualiza el contenido de las distintas memorias
a.- RAM externa
b.- RAM interna
C.- EEPROM
Para visualizar el contenido de cualquiera de las memorias se implementó un proceso paso a paso y otro por
auto incremento. En el paso a paso el usuario del sistema visualiza la información mediante una tecla (ENTER),
en auto incremento el mismo sistema hace el incremento dando el tiempo necesario para que el usuario vea el
contenido de esa dirección.
Este proceso permite revisar el contenido de las localidades de memoria RAM para verificar que un programa
se ha cargado correctamente, si se esta utilizando utilizando la función 2.
12
Resultados
Se diseñó y construyó el sistema en wire wrap.
Se diseñó el software de control cumpliendo con las especificaciones del sistema.
El sistema fue probadoy verificado en su funcionamiento.
Finalmente se entregó el sistema funcionando.
Recomendaciones
Se sugiere montar el sistema en un circuito impreso para proporcionar unaflexibilidad en su uso, de
esta forma se puede agregar una extensión del busde datos para interconectar todotipo de periféricos o
interconectarse con otrastarjetas.
13
Bibliografía
Manual de Borland C++
Chris H. Pappas, William H. Murray
Mc Graw Hill.
Solid State Electronic Devices
Ben G. Streetman
Electrónica de los dispositivos para C.I.
Muller y Kamins
Adisson Wesley.
The TTL Data Book
Texas Instruments,USA.
ALSIAS Databook
National Semiconductor, USA:
Electrónica, Teoría de Circuitos
Boylestad, Nashelsky
Prentice Hall
Linear and Integrated Circuits
Motorola 1990, USA.
14
*
*
*
PROYECTO TERMINAL
PROGRAMA: SISTEMA MONITORDELMC68HC11
DECLARACION DE CONSTANTES
CLEAR
READ
DISPY
WRITE
HDISP
IRQVEC
SA1
STACK
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$C1 Limpieza de buffersRAMDISPLAYS
$40 Lectura FIFO SENSORRAM
$08 Numero de displays
$90 Comando de escritura en displaysdel 8279
$A0 Habilitacion de displays
$FFF2 Vector de interrupcion IRQ
$F000 Ubicación de la subrutina de atención a interrupción
$DFFF Ubicación del tope de la PILA RAM externa.
..................................
* Parámetros y variables del SCI ( Serial Comunication Interface
..................................
).
EQU $30 Velocidad de transmisión del SCI A 9600.
EQU $00 Parámetros de transmisión 1 bit de inicio, 8 de datos,
*
un bit de stop.
RXTX
EQU $OC Habilita laSCI paratransmitir y recibir.
BAUD
EQU $102B
9600
bauds
SCCRl
EQU $102C 1 bit de inicio, 8 de datos, 1 bit de stop.
SCCR2
EQU
$102D
Habilita
transmisor
receptor.
SCSR
EQU $102E
EstatusFlags
SCDR
EQU $102F Almacenamiento de datos
ACK
EQU $55
Reconocimiento de enlace con l a PC.
IN1
EQU $7E
Inicio
de transmisión.
FIN
EQU $E7 Fin de transmisión.
BAUDRATE
SETTINGS
.........................
*
FUNCIONES
.........................
FUNCl
FUNC2
FUNC3
FUNC4
FUNC5
ESC
FLAG
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$DC F1
$D4
F2
$CC
F3
$C4
F4
$84
F5
$C4 ESCAPE
ESC
$FO Banderaqueindica
tecla de funcionpulsada
* Localidades de memoria utilizadas como VARIABLES DE AMBIENTE.
DCOMV
NDATOS
NDIRS
CODIGO
C-7seg
DIREAL
*
DATORL
*
BYTES
DIREXEC
EQU $0001 Guarda datos convertidos A HEXADECIMALES (8 bits)
EQU $0002 Guarda numero de caracteres de un dato (2)
EQU $0003 Guarda numero de caracteres de una direccion (4)
EQU $0004 Guarda Codigo producido por teclado del 8279
EQU $0005 Guarda codigo para desplegarse en 7 segmentos
EQU $0006 Localidades donde se almacena una direccion leida
de teclado y convertida a unadireccion real
EQU $0008 Localidad donde se almacena un dato leido de
teclado y convertido a un dato real
EQU $000D Se guarda el numero de bytes a recibir
EQU $0010
15
* Límites de los
espacios ocupadospor l a RAM interna y externa del microcontrolador
LimSup
LimSupL
LimInf
LimInfL
EQU
EQU
EQU
EQU
$0009 Limite superior
$0000
A
$0000 B Limite
inferior
$0000
C
*
MAPA DE MEMORIA
INRAM
FINRAM
WAKEUP
EQU $COO0 Inicio de la RAM
EXTERNA
EQU $DFFF Fin de l a RAMEXTERNA
EQU $FFFE Direccion donde despierta el 68HC11
*
modo
en
EXPANDIDO despues del RESET
INRAMI
EQU $0000Inicio de la RAMINTERNA.
FINRAMI EQU $OOFF Fin de la RAM INTERNA
INROM
EQU $E000
Inicio
ROM EXTERNA
FINROM
EQU $FFFF Fin de la ROMEXTERNA.
INRAMIED EQU $0100 Inicio de RAM INTERNA para editar
*
CTDAT
CTCOM
CTCK
CTMOD
*
*
COMANDOS PARA PROGRAMAR EL CONTROLADOR DE TECLADO 8279
EQU $2000 Transferencia de datos al 8279
EQU $2001Transferencia de comandos al 8279
EQU $34 Programaciondel reloj del 8279 (1 00 Khz)
EQU $02 Programaciondelmodo
de operaciondel8279
(8 displays con
entrada de los datos por la
izquierda).
ORGWAKEUP
FILL$E0,1Salto
alinicio de la EPROM
FILL$00,1
ORG INROM Inicio de la EPROM
LDS #FINRAM1 Cargado del SP (stack pointer) al final de la
*
RAM INTERNA
INICIA:BSR
PC8279 Inicializa 8279
BSR LIMPIA Apaga los displays
BSR CHKRAM Revisala RAMEXTERNA
LDX #HOLA
BSR MENSAJE Escribe saludo " HOLA
JSR ENTER
LDS #STACK Cargado del SP (stack pointer) al final de la
*
RAM EXTERNA
ES-INT:LDX
#MENU Mensaje Funcion
BSR MENSAJE
Habilita
interrupciones
CLI
NOP
NOP
WAI
Espera interrupcion
SEI
Deshabilita
interrupciones
JSR TECLA Revisa si l a tecla pulsada es de FUNCION
CMPA #FLAG Esta puesta l a bandera de FUNCION ?
BNEES-INT
Si no, espera otrainterrupcion
JSR FUNCION Si esta entonces es tecla de funcion, la ejecuta
JMP ES-INT Retorno a la espera de interrupciones
END
Termina programa
MONITOR
"
"
"
16
*
> CheckRam <
* Revisa si la RAM externa esta enbuenas condiciones.
CHKRAM: LDX #INRAM Inicializa un apuntador X con l a direcccion de
REVISA: LDAA #$SS
inicio de la RAMEXTERNA
LDAB #$DF Parte
alta de la direccion de la RAM
$SS enunalocalidad de memoria X
STAA0,XEscribe
CMPA 0,XComparael
valor leido con el escrito
BNE ERROR Si no sonigualeshaocurrido un error
PSHX
PULA
CBA
BNE' INCREl
LDAB #$FF Parte baja de la direccion de la RAM
PULA
CBA
BNE INCRE
RTS
INCREl : PULA
INCRE: INX
JMP
REVISA
ERROR: LDX #BAD
BSR MENSAJE
ALTO: NOP
Ciclo infinito cuando
ha detectado un error
NOP
laen RAM EXTERNA.
JMP ALTO
.............................................................................
*
> Programacion delcontrolador de teclado8279 <
PG8279: LDAA #CTCK
STAA CTCOM Programa el reloj del 8279
LDAA #HDISP Habilita salida en displays
STAACTCOM
LDAA #CTMOD
STAA CTCOM Programa el modo de operacion del 8279
*
8 a bits 8 displays entrada por la izquierda.
RTS
.............................................................................
*
> Retardo <
DELAY:
PSHX
LDX #$FFFF
DLOOP: DEX
BNE DLOOP
PULX
RTS
17
*
> Procedimiento de borrado de la FIFO/SENSORRAMDISPLAYS
LIMPIA: LDAA#CLEAR
STAA CTCOM
ESPERA: LDAA CTCOM
ANDA #$80
CMPA #$80
BEQ
ESPERA
RTS
<
Comando de limpieza
Retardo paraborrarFIFO/SENSORRAM
.............................................................................
*
*
*
> Escritura de mensajes
en
displays
<
Antes de llamar a MENSAJE se debe cargar el registro X con la direccion
del mensaje que se desea desplegar, el cual es de 8 caracteres
MENSAJE: BSR LIMPIA
LDY#DISPYNumero
de displays
LDAB #WRITE Coloca al 8279 en modo de ESCRITURA
STAB CTCOM
ESCRIBE: BEQ REGRESA Termina si desplego los 8 caracteres
LDAB 0,X
STAB CTDAT
INX
DEY
JMP
ESCRIBE
REGRESA:RTS
.............................................................................
*
> Revision de la teclapulsada <
TECLA:
LDAB CODIGOCargaelcodigoleido
del8279
LDX #TABFNES Direccion de tabla de funciones
Numero de funciones
LDY #$O5
COMPARA:BEQ
BACK
CMPB0,X
BEQ BACKl
INX
DEY
JMP COMPARA
BACKl: LDAA #FLAG Bandera que indica que el codigo pertenece a una
BACK: RTS
funcion
.............................................................................
*
> Comparaciones para ver QUE FUNCION SE EJECUTARA <
FUNCION:CMPB#FUNCl
BNE F-2
JSR
FN1
BRA HECHO
F-2:
CMPB
#FUNC2
BNE F-3
JSR FN2
BRA HECHO
18
F-3:
CMPB #FUNC3
BNE F-4
JSR FN3
BRA HECHO
F-4:
CMPB #FUNC4
BNE F-5
JSR FN4
BRA HECHO
F-5:
CMPB
#FUNC5
JSR FN5
HECHO:
RTS
* > Ejecucion de la Funcion 1 <
FNI:
LDX #DFNI
JSR MENSAJE
JSR ENTER
JSR DIREXEC
RTS
.............................................................................
*
> Ejecucionde l a Funcion 2 e
FN2:
LDX #DFN2
JSR MENSAJE de funcion F2
JSR ENTER
RTS
............................................................................
* > Mensaje de fallas graves <
BAD:
FILL $79,1Mensajede"ERROR"
FILL $50,2
FILL $5C,1
FILL $50,1
FILL $08,3 GUION
..............................................................................
* > Mensaje de opcion para F1 o F2 e
AoB
FILL $77,1 A
FILL $5C,1 o
FILL$7C,1 B
FILL $00,5
............................................................................
* > Mensaje de ejecucion en A (RAM interna) <
ESC-A:
FILL
$79,1
E
FILL $IE,l J
FILL $79,1 E
19
FILL $39,1C
FILL $08,1 FILL$77,1A
FILL $00,2
............................................................................
* > Mensaje de ejecucion en B (RAM externa) <
ESC-B:
FILL $79,1
E
FILL $1E,I J
FILL $79,1E
FILL $39,1C
FILL $08,1 FILL$7C,1 B
FILL $00,2
............................................................................
* > Mensaje de edicion en A (RAM interna) <
EDI-A:
FILL $79,1 E
FILL$5E,1 d
FILL $06,1I
FILL $78,1 t
FILL $08,1 FILL$77,1 A
FILL $00,2
...........................................................................
* > Mensaje de edicion en B (RAM Externa) <
EDI-B:
FILL $79,1
E
FILL$5E,1
FILL $06,1
FILL $78,1
FILL$08,1
FILL$7C,1
FILL $00.2
d
I
t
-
b
...........................................................................
* > Mensaje de fin de funcion
MENSFIN:
FILL
$71,1
F
FILL$06,1I
FILL $54,1 n
FILL $08.5 -
...........................................................................
* > Mensaje COSA <
COSA:
FILL $39,1
C
FILL $3F,1 O
FILL $6D,1 5
FILL $77,1 A
FILL $08,4 -
* > Ejecucion de la Funcion 3 <
* La funcion F3 permite visualizarel contenido de los registros del 68HC11
* y cambiar su contenido si asi se desea.
FN3:
LDX #DFN3
20
JSRMENSAJE
JSR ENTER
Escribe
-
_ _ F3 _ _ -
REGBAS:
LDX
#REGBASE
JSR MENSAJE
Escribe
1000 en
displays
Localidad dondese iniciara el despliege en
LDAA #$96
STAA NDATOS
los displays ( 06 )
LDAA $1000
LDAB $1000
JSR HEX-7SEG
Se despliega el contenido de la dir = $1000
JSR ENTER
*
LDX#DIRINI
Se pide la direcciondelregistro a ver o
JSR
MENSAJE
cambiar
JSR
ENTER
JSR Dir-Real
Se lee direccion
LDX DIREAL
Se valida que la direccionesteen el
CPX #$1 O00
intervalo correcto queesdesde
BLT NOREG
la localidad lOOOh ala 103Fh
CPX #$103F
BGT NOREG
Sila direccion noes valida se envia un
mensaje
informando,
se y
direccion
otra
pide
LDAA #$96
Se desplegarael contenido de DIREAL
STAA NDATOS
Localidad dondese iniciara el despliegeen
LDAA 0,X
los
displays ( 06 )
LDAB 0,X
JSR HEX-7SEG
Se despliega el contenido de DIREAL
ES-TEC:
CLI
NOP
WAI
Se espera
que
a se
oprima la tecla
que
indicara
que
se
alterara el contenido
del registro
seleccionado.
SEI
*
LDAA CODIGO
CMPA #FUNCl Si se desea
cambiar el contenidodelregistro
BEQ CAMBIO
Se oprime
F1
CMPA #ESCCon
F4 se deja el registrosincambio
BEQEXITysesaledela
funcion
JMP ES-TEC
Si se oprimeotrateclaseregresa a esperar
F1 o F 4
CAMBIO:
LDAA #$96
STAA CTCOM
LDAA #$O8
STAACTDAT
STAA CTDAT Se escriben - - en los displays 06 y 07
JSR DatoReal Se lee el nuevo valor del registro elegido
JSR ENTER Se acepta el dato
LDAA DATORL Dato a introducir al registro selecionado
LDX DIREAL
STAA 0,X Se
colocaeldato en la direccionelegida
LDAA 0,X
CMPA DATORL Se compara el contenido del registro con
BNE NOREG el dato que se deseaba introducir,sino es
*
igual se informa
con ERROR
un
JSRSALIR
Presionar F4 para salir de la funcion
RTS
EXIT:
NOREG:
LDX #BAD
JSR MENSAJE en
JSRENTER
Mensaje de error
indicando que el cambio
el registro selecionado no fue posible
21
JMPEXITSesaledela
funcion
.............................................................................
*
> Ejecucion de laFuncion4 <
* Transmision atraves del puerto serial SCI.
FN4:
LDX #DFN4
JSR MENSAJE
JSR ENTER
JSRONSCI
SEI
M1:
LDAA CODIGO Verificasisedesea
salir de la funcion
CMPA#ESCTecla
F4
BNE OUT
Salir de l a funcion
JSR INSCIEspera
IN1
LDAA SCDR Lee el dato
recibido en el COMMl
CMPA #IN1 Verifica
si es IN1 = inicio de transmision.
IF1:
BEQ STOP NoTx la PC no estalista paratransmitir.
LDAB #ACK
JSROUTSCI
Envia reconocimiento de enlace.
LDX #$O000
STXDIREXEC
M2:JSR
INSCIEn
espera delnumero de bytes de datos a recibir.
LDAA SCDRLee
el dato recibido
CMPA #FINFin
de trasnmision.
BNE OK
Si fin de transmision salir.
STAA BYTES Guarda numero de bytes a recibir.
JSR INSCI
LDAA SCDR
Lee parte alta de la direccion de inicio.
JSR INSCI
LDAB SCDR
Lee parte baja de l a direccion de inicio.
STD DIREAL
LDX DIREXEC
BNE SIGUE
STD DIREXEC
SIGUE: LDX DIREAL Se obtiene l a direccioncompleta de dosbytes.
LDAA BYTES Se obtiene el numero de bytes que faltan por recibir
DECA
DECA
DECA
Coneste decremento seevita recibir el checksum
M3:
BEQM2Sise
recibio una tramacompleta salta a esperarlasiguiente,
JSR INSCIEspera
mas datos.
LDAB SCDRLee
byte.
STAB 0,X
Lo almacena en la direccion de memoria especificada por X
INX
X apunta a lasiguiente localidad de memoria.
DECA
Decrementa el
contador de bytes.
BRA M3
STOP:
OK:
OUT:
LDX #BAD
JSR MENSAJE Se despliega el mensage de error si l a PC no esta lista
JSRENTER
BRA OUT
LDAB #ACK
Se desconectaelenlace
JSR OUTSCI
RTS
satisfactoriamente.
...............................................................................
*
> Ejecucion de 1aFuncion 5 <
22
FN5:
LDX #DFNS
JSR MENSAJE
JSR ENTER
SELMEM:
LDX $0000 Se colocan en cero ambos limites
STX LimSup
STX LimInf
LDX #MABC
Despliega A o b o C
JSR MENSAJE
CLI
NOP
WAI
SEI
LDAA CODIGO
A
CMPA #$DB
BEQ RAMI
LDAA CODIGO
b
CMPA #$D3
BEQRAME
LDAA CODIGO
C
CMPA #$CB
BEQ EPROM
BRA SMEM
"
SMEM:
"
"
"
RAMI:
LDX #INRAM1
STX LimInf
LDX #FINRAM1
STX LimSup
JMP LIMITS
RAME:
LDX #INRAM
STX LimInf
LDX #FINRAM
STX LimSup
JMP LIMITS
EPROM:
LDX #INROM
STX Limlnf
LDX #FINROM
STX LimSup
JMP LIMITS
MALINF:
*
LIMITS:
"
"
"
LDX #BAD
JSR MENSAJE
JSR ENTER
Limite inferior
LDX #DIRINI
Se establecen los limites para visulizar
JSR MENSAJE
JSR ENTER
JSR Dir-Real
JSR ENTER
LDX DIREAL
CPX LimInf
BLT MALINF
STX LimInf
JMP ESCFN
MALSUP:
"
en los displays el contenido de las memorias
LDX #BAD
JSR MENSAJE
23
JSR ENTER
superior Limite
ESCFN:
LDX
#DIRFN
JSR MENSAJE
JSR ENTER
JSRDir-Real
JSR ENTER
LDX DIREAL
CPXLimSup
BGT MALSUP
STXLimSup
*
LDX LimSup Si el
CPX LimInfinferior
BLTINVIERTE
JMP MODO
limitesuperioresmenor
se invierten.
que el limite
INVIERTE: LDY
LimInf
STY LimSup
STX LimInf
MODO:
LDX #AUTO-PAS
JSR
MENSAJE
Se seleciona el modo de ejecucion dela
visualizacion
CLI
NOP
WAI
SE1
LDAA CODIGO
CMPA #$DB
BNE PASOFl
AUTOMAT:
PASOFl:CMPA
PASS:
JSR
SALFS:
"
A
"
LDY LimInf Apuntador
a la direccion inicial, limite inferior
JSR AUT-PAS
Ejecucion
automatica
JSRDELAY
JSR DELAY
JSR DELAY
JSR DELAY
JSR DELAY
JSR DELAY
JSR DELAY
JSR DELAY
JSR DELAY
JSR DELAY
INY
Se incrementa el apuntador de direcciones
CPY LimSup Si todavia no se alcanza el limite superior
BLE AUTOMAT se continua desplegando.
BRA SALFS Si se alcanzo. se sale de la funcion.
#$DC
F1
BNE MODO
"
"
Ejecucion
paso
a paso
LDY LimInf Apuntador a l a direccion inicial, limite inferior
AUT-PAS
JSR ENTER
INY
Se incrementa el apuntador de direcciones
CPY LimSup Si todavia no se alcanza el limite superior
se continua desplegando.
BLE PASS
se alcanzo se sale de la funcion.
BRASALFSSi
JSR SALIRPresionar
RTS
F4 para salir de la funcion
24
.............................................................................
*
*
> ONSCI() - lnicializa el SCI para 9600 bauds
con un criztal de 8 MHz.
ONSCI:LDAA#BAUDRATE
STAA BAUD
9600
bauds
LDAA #SETTINGS
STAA SCCRl
1 bit de inicio, 8 de datos, 1 de stop.
LDAA #RXTX
STAA SCCR2
Habilita
trasmisor
receptor.
RTS
...............................................................................
* > INSCIO - lee desde SCI.<
* El dato se recibe en el registro
A.
INSCI:
*
*
LDAA SCSR
lee status reg
ANDA #$20
revisa RDRF
BEQ INSCI Espera si noexisten datos
lee dato en direccion $102F
SCDR
LDAA
ANDA #$7F
mascara de paridad
RTS
...............................................................................
* OUTSCIO - Salida del COMMl.
* Antes de llamar a esta funcion, se debecolocar el dato a transmitir
* el registro B.
OUTSCI:
LDAA
SCSR
ANDA #$80
BEQ OUTSCI
*
ANDA #$7F
STAB SCDR
envia
RTS
lee
status
loop hasta tdre=l
mascara de paridad
un
caracter
.............................................................................
* > Mensajes que se despliegan cuando se oprimeuna tecla de funcion <
DFN 1:
FILL $08,3 - - - - F 1 - - FILL $71,1 F
1
FILL
$06,1
FILL $08,3 -
DFN2:
FILL $08,3 - - - - F 2 - - FILL$71,1
F
FILL $5B,1 2
FILL $08,3 -
DFN3:
FILL $08,3 - - - - F 3 - - FILL $71,1 F
FILL $4F,1 3
FILL $08,3 -
DFN4:
FILL $08,3 - - - - F 4 - - FILL$71,1
F
FILL$66,1
4
FILL $08,3 -
25
FILL $08,3 _ _ _ - F 5 - _ _
FILL$71,1
F
5
FILL$6D,1
FILL $08,3 _
DFNS:
............................................................................
*
> TabladeValoresutilizados
TABFNES
para comparar funciones <
FILL $DC,l F1
FILL$D4,1F2
FILL $CC, 1 F3
FILL $C4,1F4
FILL $84,1F5
Shift + F4
.............................................................................
* > Mensaje de HOLA <
"
HOLA
"
FILL$76,1 H H O L A _ _ _ _
FILL $3F,1 O
FILL $38,1 L
FILL $77,1 A
FILL $08,4 - GUION
.............................................................................
*
> Mensaje de Funcion <
MENU:
"
FILL
$71,1
"
F
FILL
$1C,1
FILL
$54,1
FILL $58,1
c
FILL $04,1
FILL
$5C,1
FILL
$54,1
FILL$00,1
u
n
i
o
n
.............................................................................
* > ENTER : Es un ciclo del cualsolo se sale si se oprimela tecla F1 <
ENTER:
CLI
NOP
WAI
SEI
LDAB CODIGO
CMPB#FUNCl
BNE ENTER
RTS
.............................................................................
* > SALIR : Es un ciclo del cual solo se salesi se oprimeESC = tecla F4 <
SALIR:
CLI
Lee TECLA
NOP
NOP
WAI
Espera que una tecla sea oprimida
26
SE1
LDAA #ESC
CMPACODIGO
BNE SALIR Si
RTS
la tecla pulsada es F4 se sale de la rutina
.............................................................................
*>
Funcion Dato-Val, verifica si la tecla pulsada es Alfanumerica <
Dato-Val:
LDAB #$O0
Contador de codigoscomparados
STAB DCOMVLimpiaregistro
de datos convertidos
LDX #ALFANUM Tabla de codigosalfanumericosDEL TECLADO
REPITE:
CLI
direccion
Lee
NOP
NOP
WAI
Espera
oprimida
tecla
SEI
RET:
LDAA 0,X
CMPA CODIGO
Compara codigoleido con la tabla
BEQ
VALIDO
Tecla
valida
INCB
Incrementa contador
INX
Incrementa
apuntador
a
la tabla
Verificasitermino
de comparar
CMPB #$I 1
BNE RET
JMP Dato-Val
DCOMV
DCOMV = Direccion $01
STAB DCOMV
Datotecleado CONVERTIDO Ahexadecimalreal
en guarda se
DCONV
RTS
VALIDO:
ADDB
*
.............................................................................
* > Generacion de la direccion real a partir de los codigos del 8279 <
Dir-Real:
Lee-Dir:
JSR LIMPIA
Limpia
dispalys
LDY #$O4
Numero de teclasaleer (O a 4)
LDAA #$O0
STAA NDIRS
CPY #$O000
BEQ OTRO
JSR Dato-Val Valida el dato tecleado
LDAB CODIGO Si
CMPB #ESCoprime
BEQ Dir-Real
se ha cometido un error en la direccion se
F4 y se escribe nuevamente
JSR HEXACOD Convierte el dato en codigo de 7 segmentos
JSR DESPDIR Despliega el datotecleado
LDAA DCOMV
PSHA
Guarda
Carga eldato convertido en un NUMEROHEX
el dato en la pila
27
DEY
JMP Lee-Dir
OTRO:
*
PULB
Obtiene
la
direccion
real
STAB INRAMI
Se utilzaINRAMI como registroauxiliar
PULB
ASLB
ASLB
ASLB
ASLB
ADDBINRAMI
PULA
STAAINRAMI
PULA
ASLA
ASLA
ASLA
ASLA
Real
ADDA INRAMI
D <-- Direccion
STD DIREAL
DIREAL
<-- Direccion
Real
= $0006:$0007
DIREAL
RTS
MSB = A = $0006, LSB
=B
= $0007
.............................................................................
* > Generacion del
dato real a partir de los codigos del 8279<
DatoReal:LDY
#$O2
Numero de teclas a leer (O a 2)
LDAA #$O6
STAA NDATOS
Lee-Dato: CPY #$O000
BEQ ELSE
JSR
Dato-Val
LDAB CODIGO
CMPB#ESCoprime
BEQ
DatoReal
JSR HEXACOD
JSR DESPDATO
Si se ha cometido un error en los datos se
F4 y se escribenuevamente
Despliega el dato tecleado
LDAA DCOMV
Cargaeldato convertido
PSHA
Guarda el dato en la pila
DEY
JMP Lee-Dato
ELSE:
PULA
STAAINRAMI
PULB
ASLB
ASLB
ASLB
ASLB
ADDBINRAMI
STAB DATORL
B <-- DatoReal
DATORL <-- DatoReal
RTS
.............................................................................
28
* > DESPDIR: Despliega los caracteres de una DIRECCION en los displays
*
00,01,0203.
y
<
*
*
Antes de llamar esta rutina se debe inicializar el registro NDIRS
con el numero de caracteres de una direccion
DESPDIR: LDAB NDIRSNDIRS
CMPB #$O0
BNE UNO
INCB
STABNDIRS
LDAA #80
STAA CTCOM
LDAAC-7seg
STAACTDAT
JMP
LISTO
UNO:
CMPB #$O1
BNE
DOS
INCB
STABNDIRS
LDAA #$81
STAACTCOM
LDAA C-7seg
STAACTDAT
JMP
LISTO
DOS:
CMPB #$O2
BNE TRES
INCB
STABNDIRS
LDAA #$82
STAACTCOM
LDAA C-7seg
STAACTDAT
JMP LISTO
TRES
CMPB #$O3
= Numero de caracteres de una direccion
BNE LISTO
LDAA #$83
STAA CTCOM
LDAAC-7seg
STAACTDAT
LISTO:
RTS
.............................................................................
* > DESPDATO: Despliega los caracteres de un DATO en los displays
*
06 y 07. <
*
*
Antes de llamar esta rutina se debeinicializar el registro NDATOS
con el numero de caracteres de un dato
DESPDATO: LDAB NDATOS
CMPB #$O6
BNE SIETE!
INCB
STABNDATOS
LDAA #$86
29
STAA CTCOM
LDAAC-7seg
STAACTDAT
JMP READY
SIETE:
CMPB #$O7
BNE READY
LDAA #$87
STAA CTCOM
LDAA C-7seg
STAACTDAT
READY:
RTS
.............................................................................
*
*
> Tabla de caracteres
alfanumericos
<
Conversion de codigosdel teclado a hexadecimales
ALFANUM:FILL
$CO, 1 O
FILL $C8,1 1
FILL $C9,1 2
FILL $CA,l 3
FILL $D0,1 4
FILL $D1,1 5
FILL
$D2,1
6
FILL
$D8,1
7
8
FILL
$D9,1
FILL $DA,l 9
FILL $DB,l A
FILL $D3,1 B
FILL
$CB,1
C
FILL
$C3,1
D
FILL
$C2,1
E
F
FILL
$C1,1
FILL
$C4,1
F4
CODIGOS OBTENIDOS DEL TECLADO
.............................................................................
* > funcion HEXACOD: convierte un codigo producido por el teclado del 8279
*
en un codigo que representa su caracter en displays 7 segmentos <
HEXACOD: LDX #ALFANUMDireccion
de la tabla de codigosproducidos
PSHY
por el teclado
del
8279
LDY#HEX-CODDireccion
de la tabla de codigosen 7
CMV-COD:
LDAB
0,X
segmentos
para
desplegar
en
el 8279
CMPB CODIGO
BNE AUMENTA
LDAB 0,Y
STABC-7seg
Obtineel codigoen 7 segmentos
PULY
correspondiente
laa
tecla
pulsada.
lo almacena
C-7seg
en
RTS
y
AUMENTA:
INX
INY
BRA CMV-COD
Saltoa convertir a codigo de 7 segmentos
.............................................................................
*
*
> Tabla de caracteres
alfanumericos
<
Conversion de hexadecimales a codigos en 7 segmentos
30
HEX-COD:
FILL$3F,1
FILL $06,1
FILL $5B,1
FILL
$4F,1
3
FILL
$66,1
4
FILL
$6D,1
FILL
$7D,1
FILL $07,1
7
FILL $7F,1
FILL $6F,1
FILL $77,1
FILL
$7C,l
FILL
$39,1
C
FILL $5E,1
FILL
$79,1
FILL $71,1
F
O
CODIGOS DE DISPLAYS 7 SEGMENTOS
1
2
5
6
8
9
A
b
d
E
.............................................................................
MABC:
FILL
$77,1
FILL $5C,1
FILL $7C,1
FILL $5C,1
FILL
$39,1
C
FILL $00,3
A
o
b
o
.............................................................................
DIRINI:
FILL $5E,1
FILL $04,1
FILL $50,1
FILL $00,1
d
i
FILL $04,1
FILL $54,1
FILL $04,1
FILL$00,1
i
n
i
r
.............................................................................
DIRFN:
FILL $5E,1
FILL
$04,1
FILL $50,1
FILL $00,1
FILL $71,1
F
FILL
$04,1
FILL $54,1
FILL $00,1
d
i
r
i
n
.............................................................................
AUTO-PAS
FILL $77,1 A
FILL $00,2
FILL $5C,1 o
FILL $00.2
FILL $71,1 F
FILL $06,1 1
31
.............................................................................
* > Despliega el contenido de los registros del 68HC11 del 1000h a 103F <
* Antes de llamar a esta funcion se debeinicializar el registro Y
* con la direccion INICIAL. Despuesde ejecutada la subrutina
*
se debe incrementar Y.
AUT-PAS:
STY LimInf
LDAA #WRITE
STAA NDATOS
LDAALimInf
LDABLimInf
JSRHEX-7SEGDespliega
la parte alta de la direcciondel
registro selecionado
LDAA #$92
STAA NDATOS
LDAA LimInfL
LDAB LimInfL
JSRHEX-7SEGDespliega
la partebaja de la direcciondel
LDAA #$96
registro
selecionado
STAA NDATOS
LDAA 0,Y
LDAB 0,Y
JSR HEX-7SEGDespliega
el contenidodelregistro.
RTS
.............................................................................
* > HEX-7SEG : Convierte un numero de un byte en 2 codigos de displays a 7
* segmentos correspondientes a doscaracteres que representan el valor
*
*
contenido en el byte <
Antes de llamar a esta funcion se deben inicializar los acumuladores
*
*
A y B con el mismo valor, el cual corresponde
al byte que se
transformara a dos codigos de 7 segmentos.
HEX-7SEG: LSRB
LSRB
LSRB
LSRB
PSHA
LDX #HEX-COD
Carga tabla de codigos de displays 7 segmentos
LDAA #$O0
CODUNO:
CBA
Cuenta
hasta
ubicar el apuntador de la tabla
BEQ DUNO
HEX-CODenel
codigo de 7 segmentos
INX
correspondiente numero
al hexadecimal
que se
desplegara.
INCA
JMPCODUNO
DUNO:
LDAA
NDATOS
STAA CTCOM
LDAA O,X
STAACTDAT
Despliega el primercaracterdelBYTEen
PULA
cuestion.
LSLAEjemplo:
si el BYTE = 1 1 10000 = FO
LSLA
Se depliega primero F en el display
correspondiente
LSLA
LSLA
LSRA
LSRA
LSRA
LSRA
32
LDX
#HEX-COD
LDAB #$O0
CODDOS
CBA
BEQ DDOS
INX
INCB
JMP CODDOS
DDOS:
LDAB 0,X
STAB CTDAT
Despliege del segundo, que seria O en el ejemplo
RTS
.............................................................................
REGBASE:
FILL
$06,1
FILL
$3F,3
FILL $00,4
1
O
.............................................................................
* > Subrutina de Atencion de interrupcion <
ORG SA1
Subrutina de atencion de interrupciones
SUB-INT:LDAA
#READ Modo de lectura del 8279
STAACTCOM
LDAA CTDAT Lee el codigo generado por el 8279
STAA CODIGO Guarda el codigo LEIDO EN
RAM INTERNA
RTI
.............................................................................
ORG IRQVEC Vector de interrupcion IRQ
FILL $F0,1 Salto a SUB-INT (subrutina de atencion de
FILL $00,1 interrupcion) Direccion de SUB-INT = $F000
33
Programa de transmisión desde una PC.
#include
#include
#include
#include
#include
#include
#include
<string.h>
<fstream.h>
<dos.h>
<bios.h>
<stdio.h>
<stdlib.h>
<conio.h>
char NomArch[80];
char CadCodigo[80],Cad[80],aux[2];
void LeeS19(char "NomArch);
void Serialcorn();
main()
{
clrscr();
tout<<" Nombre del archivo a transmitir: ";
cin.getline(NomArch,80);
cout<<NomArch;
delay( 1000);
ifstream ENTRADA (NomArch);
if (ENTRADA != NULL)
{
LeeS19(NomArch);
Serialcorn();
else
{
clrscr();
tout<<" Archivo no encontrado "<<"\n";
delay(2000);
I
return O;
) 11 Termina Main()
34
void LeeS19(char *NomArch)
(
intNumDatos;
int cuenta,i,j;
ofstream SALIDA ("C:\\SALIDA.DAT");
ifstream ENTRADA (NomArch
clrscr();
while (ENTRADA)
(
); // Archivo a trasmitir con extension ".S19"
ENTRADA.getline(CadCodigo,SO);/ L e e una linea del archivo *.s19
cuenta = ENTRADA.gcount(); // Obtiene longitud de l a cadena
//tout<< cuenta <<"
// cout<<CadCodigo<<"\";
if ((CadCodigo[O]=='S') && (CadCodigo[ 1]=='1'))
[ // Si es una cadenade datos la escribe en el archivo salida.dat
'I;
for (i=O,j=2;i<(cuenta - 2);i++j++)
Cad[i] = CadCodigoQ];
//cout<<CadCodigo[i];
1
SALIDA<<Cad<<"\n";
I* cout<<"\n"; // para depuración
cout<<(DATO = atoi(aux))<<" \";
cout<<sizeof(DATO)<< " h";
delay(500);*/
1
} // fin del while
} // Termina Lees 190
........................................................................
void SerialCom(void)
(// SerialCom : Transmite por el COMMl
// del 68hc l1.
el archivo *.S19 hacia el sistema
const unsigned char ACK = 0x55; // Reconocimiento
const unsigned char NACK = 0x22; // Desconocimiento
const unsigned char IN1 = Ox7E; // Inicio de trasmision
const unsigned char FIN = OxE7; // Fin de trasmision
const char COM1 = O;
const int DATA-READY = 0x100;
const int TRUE= 1;
const int FALSE= O;
const char SETTINGS = ( C O M - 9 6 0 0 I -COM_CHR8 I -COM-STOP 1 I -COM-NOPARITY);
unsignedcharDATO;
I/ Caracteratransmitir
unsigned char in,data;
unsigned int status,MSB,LSB;
int cuenta, i j ;
35
char auxl[l],aux2[1];
clrscr();
COM 1, SETTINGS);
tout<<" ...TRANSMITE & RECIBE [ESC] para salir..."<<"h";
-bios-serialcorn(-COM-INIT,
ifstream SALIDA ("C:\\SALIDA.DAT");
while (SALIDA)
SALIDA.getline(CadCodigo,80);
//Lee una linea del archivo *.s19
cuenta = SALIDA.gcount(); /I Obtiene longitud de la cadena
for (i=Oj=l;i<(cuenta - l);i++j++)
{
/* auxl[O] = CadCodigo[i];
auxl[ 11 = 1x0';
aux2[0] = CadCodigolj];
aux2[1] = 1x0';
MSB = atoi(aux1);
LSB = atoi(aux2);
MSB = MSB<<4;
DATO = MSBILSB;*/
DATO = CadCodigo[i];
/I cout<<DATO<<hex;
11 cout<<sizeof(DATO)<< " h";
/I
for (;;)
11 {
status = -bios-serialcorn(-COM-STATUS,C O M l , O);
I/ cout<<"status "<<status <<hex<<"\n";
delay( 100);
if (kbhit())
if ((in = getch()) == 1xlB')
break;
-bios-serialcorn(-COM-SEND,COMl ,DATO);
cout<<"enviado "<<DATO<<hex<<"h";
cout<<sizeof(DATO)<< " \n";
if(status & DATA-READY)
{
/I status = -bios-serialcom(-COM-STATUS,COM1, O);
I/ cout<<"status "<<status <<hex<<%";
I/ delay( 1000);
if ((data = -bios-serialcorn(-COM-RECEIVE,COM1, O) & Ox7F) != O)
cout<<"recibido "<<data<<hex<<"\n";
1
} N findelfor"bios-serialcom
) /I fin for aux
) N fin del while
} N Termina SerialCom
/I
36
Descargar