HCS08, SERIAL, HIPERTERMINAL
Es lo que Necesitas |
En este tutorial creare comunicacion por puerto serial con la computadora
primero necesitaremos que tu pc tenga instalada hiperterminal, si es windows XP
ya la trae por default, si tienes alguna version mas reciente (Vista, 7) puedes descargarte
el programa que yo uso como hiperterminal:
Hiperterminal
Para otros SO, como linux, aun no he logrado hacer funcionar Code Warrior, asi que no tengo experiencia
sobre el tema de micros freescale en ellos.
INTRODUCCION
La Hiperterminal es un software que permite la comunicacion por medio de puertos, en este caso, el puerto serial de tu pc.
Lo que tu introduzcas por teclado se enviara por serial, y lo que tu veas en la hiperterminal es lo que recibes por el puerto serial.
Si no posees una pc con puerto serial, puedes comprar un adaptador USB-RS232 como le he hecho yo para usar mi notebook.
Necesitas:
* Conector DB-9; con cables y un poco de soldadura crearas extensiones de los pines 2, 3 y 5 -> Rx, Tx y Gnd respectivamente
* Un CI MAX232N o MAX233
* Capacitores de 1 Micro Faradio, la cantidad depende del CI MAX que elijas, checa sus datasheet para saber como conectarlos
Las conecciones son obvias, checando las datasheets de los MAX puedes averiguar como conectar los cables del puerto serial DB9 y de tu micro Motorola, para el MCS9SC08 que uso son las patas 20 y 19 Rx y Tx respectivamente.
Imagenes de conexion general para el puerto serie:
En esta Imagen se aprecia mi HCS08_OpenSourceBDM, el micro HCS08, el MAX233, asi como mi adaptor USB-RS232 |
Todo mas de cerca. |
Primer programa:
ENVIA LO QUE RECIBE.
Basicamente haremos que el la terminal se escriba lo que tecleamos, es decir:
Entramos nosotros a una secion de hiperterminal y escribimos algo por teclado, esto se envia al micro, y el micro regresa exactamente lo mismo:
mainLoop: LDA #$0 STA SCIBDH LDA #$1F STA SCIBDL LDA #$0 STA SCIC1 LDA #$0C STA SCIC2 CICLO: LDA SCIS1 AND #$20 ;RDRF BEQ CICLO CICLO1: LDA SCIS1 AND #$80 ;TDRE BEQ CICLO1 LDA SCID STA SCID BRA CICLO feed_watchdog BRA mainLoop
He aqui otro codigo que hace lo mismo:
;******************************************************************* ;* This stationery serves as the framework for a user application. * ;* For a more comprehensive program that demonstrates the more * ;* advanced functionality of this processor, please see the * ;* demonstration applications, located in the examples * ;* subdirectory of the "Freescale CodeWarrior for HC08" program * ;* directory. * ;******************************************************************* ; Include derivative-specific definitions INCLUDE 'derivative.inc' ; ; export symbols ; XDEF _Startup ABSENTRY _Startup ; ; variable/data section ; ORG RAMStart ; Insert your data definition here ExampleVar: DS.B 1 ; ; code section ; ORG ROMStart _Startup: LDHX #RAMEnd+1 ; initialize the stack pointer TXS CLI ; enable interrupts mainLoop: LDA #$0 STA SCIBDH LDA #$1F STA SCIBDL LDA #$0 STA SCIC1 LDA #$0C STA SCIC2 CICLO: LDA SCIS1 AND #$20 ;RDRF BEQ CICLO CICLO1: LDA SCIS1 AND #$80 ;TDRE BEQ CICLO1 LDA SCID STA SCID BRA CICLO feed_watchdog BRA mainLoop ;************************************************************** ;* spurious - Spurious Interrupt Service Routine. * ;* (unwanted interrupt) * ;************************************************************** spurious: ; placed here so that security value NOP ; does not change all the time. RTI ;************************************************************** ;* Interrupt Vectors * ;************************************************************** ORG $FFFA DC.W spurious ; DC.W spurious ; SWI DC.W _Startup ; Reset
ESCRIBE "HOLA" 4 EVER
Screenshot de la Hyperterminal |
Esquematico |
Este programa escribira en la Hiperterminal "Hola" en un bucle infinito
;inicia el main ;*********************************** BSR prog_ports ;programamos puertos main: BSR retardo BSR mandaholaS feed_watchdog BRA main ;Subrutinas mandaholaS: LDHX #$80 ;apunto a la mem $80 lleno: feed_watchdog LDA SCIS1 ;cargo el Status register AND #$80 BEQ lleno ;Si ya se envio el dato anterior TDRE=0, mando otro LDA ,X ;cargo el contenido de la memoria apuntada actual STA SCID ;la coloco para enviar INCX ;incremento el puntero CPHX #$86 ;si estoy apuntando a la 86 (palabra finalizada) BNE lleno ;si no, mando el siguiente caracter RTS retardo: ;****************************************************** LDHX #$FFF RET1 feed_watchdog AIX #$01 CPHX #$0500 BNE RET1 RTS ;****************************************************** prog_ports: ;******************************************************--- ;declaramos la comunicacion serial ;************************************* LDA #$0 STA SCIBDH LDA #$1F STA SCIBDL LDA #$0 STA SCIC1 LDA #$0C STA SCIC2 ;************************************* ;programamos el timer a 1 segundo ;************************************* MOV #$B,RTCMOD ;se recetea el contador al llegar a MOV #%1101,RTCSC ;0.1 segundo ;************************************* ;Escribimos hola en memorias consecutivas ;************** MOV #$48,$80 ;H MOV #$4F,$81 ;O MOV #$4C,$82 ;L MOV #$41,$83 ;A MOV #$A,$84 ;New Line MOV #$D,$85 ;carriage return ;*************** RTS ;******************************************************---
FIN POR AHORA
OMBE COMPA TIENE ALGUN CODIGO EN C SOBRE ESTE MISMO EJEMPLO Y CON EL MISMO MC9S08E..
ResponderEliminarERES LA MAMADA WE, CHIDA PAGINA. NI LOS INGES TIENEN UNA ASI. GRACIAS POR LOS APORTES
ResponderEliminarBueno, ¿y cómo para qué sirve?
ResponderEliminarEso no se distingue coño
ResponderEliminarEso no se distingue coño
ResponderEliminar