Documente Academic
Documente Profesional
Documente Cultură
I. INTRODUCCIN
Para iniciar la programacin de un nuevo
microcontrolador es importante familiarizarse con
las variables e instrucciones propias del mismo,
para lo cual siempre resulta til la ayuda de un IDE,
el cual puede proporcionar herramientas como la
generacin automtica de los archivos necesarios y
un entorno de debugging, desde el cual es posible
verificar paso a pas qu operaciones deber
cumplir el microcontrolador.
Adems de esto, el programador debe ser capaz de
leer la documentacin propia del dispositivo, en la
cual podr encontrar descripciones ms precisas de
cmo funciona el mismo para as poder aplicar este
conocimiento en sus proyectos.
En ste documento se describe el anlisis y
simulacin de tres programas bsicos que pueden
ser una ayuda para el entendimiento de la
programacin de microcontroladores.
II. PROCEDIMIENTO
A. Creacin de un proyecto por defecto
Inicialmente se genera un proyecto por defecto
desde el IDE Codewarrior desde el men:
File->new->Bareboard Project.
Una vez seleccionado el nombre del proyecto, se
selecciona como device el MC9S08QG8 y se marca
la opcin de tipo de proyecto como aplicacin.
La conexin a usar ser la P&E Full Chip
simulation y el lenguaje Relocatable Assembly.
Una vez seleccionadas stas especificaciones se
finaliza el ayudante para creacin de proyecto.
B. Identificacin de archivos del proyecto
En la Tabla 1 se encuentran organizados y descritos
los archivos generados en un proyecto por defecto.
Nombre de archivo
derivative.inc
MC9S08QG8.inc
Descripcin
Librera que incluye la definicin de macros como
feed_watchdog y realiza la inclusin del archivo
MC9S08QG8.inc. ()
Librera que incluye los registros propios del
microcontrolador MC9S08QG8
Project_Settings
Project_Settings/Debugger
MC9S08QG8.mem
burner.bbl
Project_Settings/Startup_Code
Sources
Project.prm
main.asm
MC9S08QG8.tcl
Project_Settings/Linker_Files
INCLUDE 'derivative.inc'
La instruccin INCLUDE puede interpretarse como
XREF __SEG_END_SSTACK
La directiva XREF o External symbol
Reference especifica smbolos referenciados en el
mdulo actual, pero estn definidos en otro mdulo.
En este caso se hace referencia al smbolo
__SEG_END_SSTACK.
MyCode:
SECTION
main:
_Startup:
LDHX #__SEG_END_SSTACK
TXS
La directiva TXS o Transfer Index Register to
Stack Pointer carga el stack pointer (SP) con los
contenidos del registro de ndices (index register)
menos 1.
CLI
mainLoop:
NOP
Instruccin de No operation, la cual consume un
ciclo del reloj del procesador y no realiza cambios
en registros o memoria.
feed_watchdog
STA SRS
La directiva STA o Store Accumulator in
Memory, almacena los contenidos del registro A
en memoria.
El registro SRS o System Reset Status Register es
un registro que incluye siete banderas de estado de
solo lectura para indicar la fuente del ms reciente
reinicio. Escribir cualquier valor en la direccin del
registro limpia el temporizador del COP
watchdog (COP= computer operating properly).
BRA
mainLoop
2) Ejemplo 2
Es importante destacar en ste ejemplo que, durante
la creacin del proyecto es necesaria la seleccin
del lenguaje de programacin C++ en lugar de
Assembler.
La ejecucin del programa inicia desde el mtodo
main, en el cual la primera instruccin se encarga
de asignar un valor de 0x52 al registro SOPT1,
desactivando as el COP watchdog tal como se
indic en el anterior ejemplo.
SOPT1
=
0x52;
La instruccin ICSC1 = 0b10000000 se refiere a
configuraciones del Internal Clock Source, de
modo al asignar un estado alto nicamente al bit 7,
indica que se usar una referencia externa de reloj.
Por otro lado, la instruccin ICSC2 =
0b00110110; se puede interpretar por los
bits en estado alto y la funcin de cada uno:
Bit1 = Habilita la referencia externa de reloj
Bit2 = Selecciona la fuente de referencia externa,
para este caso un 1 significa que la referencia es un
oscilador.
Bit4 = Configura el oscilador externo para modo de
operacin de alta ganancia
Bit5 = Se selecciona un rango de frecuencia alta del
oscilador.
(Informacin
obtenida
microcontrolador)
del
datasheet
del
b)
c)
d)
e)
f)
Tambin
se
pueden
voltajes
y
visualizaciones del circuito completo
durante una simulacin e incluso seguir la
operacin paso a paso con la ayuda del
depurador de C de TINA.
Es importante anotar que existen dos
maneras de alimentar el programa para
microcontroladores en TINA. Puede utilizar
el cdigo binario y el archivo de depuracin
creados por cualquier compilador estndar
(por ejemplo, MPLAB para los PIC) o puede
simplemente cargar su cdigo ensamblador
para ejecutarlo y depurarlo directamente en
TINA utilizando su depurador- ensamblador
incorporado. [11][12]
IV. CONCLUSIONES
[12]
Disponible
Online:
http://es.tina.com/microcontroller_circuits
[13]
Disponible
Online:
https://sites.google.com/site/microcontroladorkwikstik/tutorial
es/codewarrior/crear-un-proyecto-en-codewarrior
[14]
Disponible
Online:
http://blogs.freescale.com/mcus/2011/10/its-all-about-tracingfreescale-codewarrior/
Autores:
Diana G. Cuervo E.
Estudiante Ingeniera Mecatrnica
Universidad Nacional de Colombia - Sede Bogot
2015
Csar A. Villamizar C.
Estudiante Ingeniera Mecatrnica
Universidad Nacional de Colombia - Sede Bogot
2015
10
VI. ANEXOS
Anexo 1. Cdigo generado automticamente en el archivo main.asm para un proyecto en cdigo Assembler
;*******************************************************************
;* 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, main
; we export both '_Startup' and 'main' as symbols. Either can
; be referenced in the linker .prm file or from C/C++ later on
XREF __SEG_END_SSTACK
stack
; variable/data section
MY_ZEROPAGE: SECTION SHORT
; code section
MyCode:
SECTION
main:
_Startup:
LDHX
#__SEG_END_SSTACK ; initialize the stack pointer
TXS
CLI
; enable interrupts
mainLoop:
; Insert your code here
NOP
feed_watchdog
BRA
mainLoop
SECTION
main:
_Startup:
LDHX
#__SEG_END_SSTACK ; initialize the stack pointer
TXS
CLI
; enable interrupts
mainLoop:
LDA
#$52
STA
SOPT1
MOV
#$08,PTBDD
loop: LDA
#$0F
MOV #$08,PTBD
NOP
DBNZA *
MOV
#$00,PTBD
LDA
#$0F
DBNZA
*
feed_watchdog
BRA
loop
BRA
mainLoop
11
Delay(unsigned
unsigned
long
for
(i=0; i<=
long delay){
i;
delay;i++){}
COP
watchdog
PTB0-5
as
output
set
high
PTB0-5
12