ANEXO D
SOFTWARE DE DESARROLLO “CODEWARRIOR DEVELOPMENT STUDIO”
Este Este documen documento to posibilit posibilitará ará al estudia estudiante nte comprende comprenderr y utiliz utilizar ar el ambient ambientee de desarrollo desarrollo CodeWarri CodeWarrior or IDE para la creación, creación, depuración y descarga descarga de programas de los sistemas basadas en microcontroladores Freescale, y particularmente permitirá: •
Entender las partes que qu e componen a CodeWarrior CodeWarrior..
•
tilizar el simulador para probar un programa.
•
Comprob Comprobar ar las opciones opciones que o!rece o!rece el Depura Depurador dor inclui incluido do en CodeWarrior.
•
tilizar las di!erentes opciones para programar un "rc#i$o.
Introducción. E%isten en el mercado $arias opciones para poder compilar es decir con$ertir del lengua&e C al lengua&e maquina los programas que son desarrollados por los dise'adores de !irm(are, pero sin embargo las opciones que cada uno de estos paquetes nos o!recen son limitadas y no siempre apro$ec#an las $enta&as que o!rece la arquitectura del microcontrolador o del microprocesador utilizado y siempre son de un costo ele$ado, es por esto que es altamente recomendable utilizar el paquete de desarrollo que cada empresa que crea los microcontroladores nos propone. En el caso de Freescale )emiconductor, )emiconductor, se o!rece CodeWarrior CodeWarrior De$elopment )tudio, este IDE permite a los usuarios pasar a tra$*s de todas las etapas de desarrollo desde el mane&o concepto #asta programar la memoria del microcontrolador.
Fig. +.+ "mbiente de Desarrollo CodeWarrior CodeWarrior.. Creado por Freescale.
"lgunas de las $enta&as que nos pro$ee CodeWarrior CodeWarrior son: tiliza un sistema basado en royectos que nos #ace !acil el mane&o de multiples • arc#i$os. Creación automatica de -emplates para iniciar el proyecto, arc#i$os de • encabezado tambien llamados #eader !iles para cada uno de los productos de Freescale. Dos e%celentes #erramientas para disminuir la cur$a de aprendiza&e de los • peri!ericos como son: o De$ice Initialization -ool, o rocessor E%pert. Cuenta con Editor y compilador co mpilador para lengua&e C, C, y lengua&e ensamblador. • /in0er entre el Compilador y el sistema de Descarga. • )imulador, con $arias #erramientas para ayudar a la depuracion del sistema sin • necesidad de contar con el microcontrolador !isicamente. El Editor cuenta con #erramientas que permiten la comparación entre arc#i$os, • !ácil cambio entre componentes 1llamados targets2. ermite el mane&o de Control de 3ersiones con programas como C3), o • )ub$ersion Fácil inter!ace con otros programas com 4atlab. •
• •
Creación de /ibrerias. 4ane&o de )istemas 5perati$os embebidos.
Comi!"dor. Como se menciono en el punto anterior los compiladores por lo regular son caros y es un costo que el desarrollador del producto debe absorber sin embargo el ambiente de Desarrollo CodeWarrior e%isten dos $ersiones una es gratuita CodeWarrior IDE (it# ro&ect Wizard con la cual se puede realizar lo siguiente: 6 6 6 6 6
6 6
6
4ane&o de royectos con #asta 78 arc#i$os. )e puede compilar código ensamblador en !orma ilimitada. Compilador de C con 9 opciones de optimización. Es posible compilar #asta +; y =C1)2>?@)>. Descarga rápida del programa a 4emoria Flas# con dos opciones: 6 =C>: 3ia 45A> 6 =C1)2>?@)>: 3ia BD4 )imulador completo para todo el c#ip. AI) De$ice Initialization tool para generar código de inicialización tanto para el C como para los peri!icos de las !amilias =C>, =C1)2>?@)>. AI) rocessor E%pert con componentes para las !amilias =C>, =C1)2>.
Arc#i$o PRM. Como se menciono en el capitulo 7 el lugar donde queden almacenadas las $ariables y constantes es siempre una prioridad CodeWarrior utiliza un arc#i$o que es mane&ado por el /in0er para ubicar las zonas de memoria de nuestro microcontrolador. Este arc#i$o es llamado "rc#i$o @4. El arc#i$o @4 como se muestra en la !igura siguiente cuenta con dos zonas principales en la primera llamada )E4EA-) y la segunda llamada /"CE4EA-. En la zona de )E4EA-) se de!inen las distintas zonas del mapa de memoria del componente eligiendo el tipo de memoria sea @"4 o @54 esto le permite al programa que descarga y #ace el programado de las distintas memorias donde es @"4 y donde es @54. Ejemplo. En el siguiente e&emplo se $e como se de!ine un segmento de @"4 y y de @54 para el )>>. /a memoria que se etiqueto como @54 utiliza el espacio desde %E y #asta la dirección %FF"D, y la memoria @"4 se elige de la %; #asta la %FF.
Solución
SEGMENTS ROM RAM END
= READ_ONLY 0xE000 = READ_WRITE 0x0060
to to
0xFFAD; 0x00FF;
Este arc#i$o es generado automáticamente por CodeWarrior una $ez que se utiliza el ro&ect Wizard para crear el espacio de traba&o en base a uno de los microcontroladores. ero nos !alta la segunda zona la zona de /"CE4EA- en esta parte el lin0er in!orma al compilador y al programa de descarga donde $a el código, donde $an las $ariables y donde $an las constantes dentro del mapa que se creo en la parte de )E4EA-. Ejemplo. )e desea que de manera automática las $ariables se coloquen en @"4 y el código y constantes se guarden en @54 . Solucion.
PLACEMENT DEFAULT_RAM DEFAULT_ROM
INTO INTO
RAM; ROM;
END
Fig. +.8 Imagen de un arc#i$o .@4 para el )>>
DIRECTIVAS PRA%MA
/as directi$as @"4" nos permiten in!ormar al compilador de acciones que tiene que tomar durante el proceso de compilación, en este caso, solo nos $amos en!ocar en como podemos elegir donde ubicar una $ariable o constante en di!erentes zonas de memoria de!inidas por el arc#i$o @4 que anteriormente $imos. /as directi$as @"4" que nos permiten esto son: D"-"G)E. Indica el segmento para guardar una $ariable o dato. Este segmento • debe estar declarado en el arc#i$o @4. /as constantes tambi*n pueden indicarse el lugar donde serán guardadas con esta directi$a. C5DEG)E. Indica el segmento para el siguiente código. H por lo tanto se debe • tratar como tal. C5A)-G)E. Indica que el dato siguiente es reser$ado y debe mantenerse • constante. " continuación se muestran e&emplos sobre el uso de las directi$as, Ejemplo. En el siguiente e&emplo las !unciones ! y # son de!inidas en di!erentes segmentos utilizando pragma C5DEG)E. )e puede obser$ar que tanto la de!inición de la !unciona asJ como el código de la !unción se deben de de!inir con la directi$a. -ambien debe #acerse notar que tanto C5DI5+ como C5DI58 son segmentos que estan de!inidos en el arc#i$o @4.
/* Def!"#! $e %&' F(!"o!e' */ )+&,-& CODE_SEG CODIGO. exte+! o$ fo$1; )+&,-& CODE_SEG CODIGO2 exte+! o$ 3o$1; )+&,-& CODE_SEG DEFAULT
/* Co$,o $e %&' F(!"o!e' */ )+&,-& CODE_SEG CODIGO. o$ fo$14 /* -e!t+&' 5(e f e't& e! CODIGO. 31; /* 3 e't& e! e% Se,-e!to CODIGO2*/ )+&,-& CODE_SEG MY_CODIGO2 o$ 3o$14 f1;
)+&,-& CODE_SEG DEFAULT Ejemplo. En el siguiente e&emplo las $ariables a y b son de!inidas en di!erentes segmentos utilizando pragma D"-"G)E. 5bser$e que despu*s de elegir el segmento para cada una de las $ariables se regresa al segmento DEF"/- .
/* Def!"#! $e )+&,-& DATA_SEG !t 8; )+&,-& DATA_SEG !t :; )+&,-& DATA_SEG
7&+&8%e' */ S9ORT_MEMORY CUSTOM_MEMORY DEFAULT
COMPILACION CONDICIONAL.
En muc#as ocasionas deseamos #acer un código lo su!icientemente robusto que nos permita que sea reutilizado para nue$os dise'os o simplemente una actualización del producto que estamos lanzando, y mas por los cambios tan rápidos que nuestro mundo globalizado nos demanda. na alternati$a para poder de alguna manera controlar que una parte de código sea compilada para ciertos casos y en casos distintos no, son las directi$as para compilación condicional. Estas directi$as son: )f • )f$ef • )f!$ef • )e%f • )e%'e • )e!$f • Estas directi$as se basan en el !uncionamiento tal cual de una sentencia IFKE/)E de código con la di!erencia que su uso es solo por el compilador y no por el código que se esta e&ecutando. Ejemplo. En el siguiente e&emplo se desea utilizar el mismo código generado tanto para el 4CL)>> como para el 4CL)>M aunque son de la misma !amilia e%isten algunos registros que no se encuentran en la misma dirección por tanto usando la siguiente compilación condicional se puede elegir entre la librerJa del > y la librerJa del M. El de!ine es la condicion del IFDEF por tanto en este caso se selecciona >
Solución.
)$ef!e
/*A5(> 'e e%,e %& %8+e+>& */
)f$ef
/* L8+e+& &+& e%
)e%'e )!"%($e ?MC@S0
/* L8+e+& &+& e%
MACROS. )u uso elimina la realización de tareas repetiti$as, automatizándolas. Básicamente, se trata de un grupo de comandos de una aplicación, organizados segNn un determinado &uego de instrucciones y cuya e&ecución puede ser pedida de una sola $e z para realizar la !unción que se desea. /a directi$a DEFIAE nos sir$e para poder crearlas, ba&o la siguiente sinta%is.
)$ef!e
?ETI
?ACCIONES DE LA MACRO
Ejemplo. En este e&emplo se crean las macros /EDGEACEADID5 y /EDGBIC5/5@ en la primera nos permite apagar o prender el /ED que esta conectado al bit 9 del puerto B. H #aciendo uso de la macro /EDGBIC5/5@ podemos de una manera muy simple y automazida cambiar el color del /EDGBIC5/5@ obser$a que se e&ecutan dos lineas de código y en el programa principal solo lo mandas llamar como si !uera una !unción.
)$ef!e OFF 0 )$ef!e ON . )$ef!e LED_ENCENDIDO't&t('1 )$ef!e LED_ICOLOR"o!t+o%1
o$ -&! o$1 4 PT_PTD=0xff; LED_ENCENDIDOON1; LED_ICOLOROFF1; fo+;;1;
PT_PT = 't&t('; PT_PT6 ="o!t+o%; PT_PT6="o!t+o%;
ESTRUCTURA DE ARC&IVOS.
El orden es uno de los elementos que al programar se $uel$e necesario es por esta razón entre otras que se requiere organizar el código que #acemos en di!erentes arc#i$os, CodeWarrior al utilizar su royect Wizard para empez ar un proyecto genera como se muestra en la !igura siguiente, una estructura de arc#i$os básica. Esta estructura contiene las siguientes carpetas •
•
•
)5@CE) en la cual se deben agregar todos los arc#i$os con e%tensión .C es decir todos los que contienen el código !uente de todas y cada una de las !unciones dise'adas para el programa. IAC/DE) en esta carpeta deben a'adirse los arc#i$os .= que contienen las de!iniciones de las $ariables asi como los prototipos de las !unciones de los arc#i$os .C @5OEC- )E--IA). Esta carpeta contiene las propiedades del proyecto completo. Dentro de esta carpeta se encuentra : o )-"@-GC5DE. ue nos da el código de inicialización del )-"C< y otras partes del C para e&ecutar codigo "A)I C. o /IA
Fig. 9.7 Estructura de un rograma enerado por el ro&ect Wizard para el )>>.
D'(c"r)". /a etapa intermedia una $ez que el programa #a sido compilado es descargarlo a la memoria del 4icrocontrolador para poder #acer depuración del mismo. ara esto cabe aclarar que por cone%iones se denomina en CodeWarrior a las distintas !ormas que e%isten para conectarnos con el 4C para tanto programar la memoria como para poder #acer depuración. En el caso del microcontrolador que #emos estado usando el 4CL)>> este microcontrolador pertenece a la !amila =C1)2> de Freescale el cual utiliza el modulo de BD4 para poder #acer estas !unciones, /a tar&eta que DE45> tiene entonces un BD4 desarrollado por la empresa PE. or lo cual utiliza una cone%ión , PE 4ultilin0 ? Cyclone ro, en la siguiente !igura se muestran las opciones disponibles en CodeWarrior.
Fig. 9.M Cone%iones Disponibles en CodeWarrior.
ara poder entonces descargar el programa debemos realizar una cone%ión entre nuestro -"@E- 1 tar&eta o microcontrolador2 y nuestra C, en la !ig 9.9 se muestra la $entana que aparece una $ez que se #a eligido y en la cual se elige la inter!ase de cone%ión, misma que se utilizo durante la e%plicación en el capitulo 8.
Fig. 9.9 3entana de rogramación del Dispositi$o.
D'ur"ción. na de las #erramientas que mas nos sir$en para poder corregir errores de programación 1bugs2 son las #erramientas de depuración en CodeWarrior es crear B@E"<5IA-) y W"-C=5IA-) a continuación se da una e%plicación de cada uno de ellos. En la !igura 9.; )e muestra una imagen de la #erramienta de Depuración =IW"3E que $iene dentro del "mbiente de Desarrollo de CodeWarrior.
Fig. 9.; Imagen de la =erramienta de Depuración =i(a$e. B@E"<5IA-. Es un comando que permite detener la e&ecución del programa en una lJnea de código indicada. ara !i&ar un B@E"<5IA- basta con solo dar clic derec#o sobre la lJnea de código donde se desea !i&ar el B@E"<5IA-. Como se muestra en la !igura 9.Q la !lec#a con color ro&o indica que se #a !i&ado un B@E"<5IA- de manera que al correr el programa en !orma continua al encontrar la !lec#a ro&a el programa de depuración dentiene la e&ecución en esa lJnea y se puede obser$ar el resultado que #asta ese momento se lle$a.
Fig. 9.Q 3entana de Código con un B@E"<5IA-.
W"-C=5IA-. Es un B@E"<5IA- en una localidad de memoria especJ!ica. Como se $e en la !ig. 9.> )e agrega un W"-C=5IA- al registro )CID del puerto serial, para obser$ar en que momento cambia y es modi!icado. "l igual que un B@E"<5IA#aciendo clic con botón derec#o aparece el menN donde se puede elegir agregar W"-C=5IA-.
Fig. 9.> 3entana de Datos donde se agrego un W"-C=5IA-.
Funcion'( E('ci"!'( " continuación en listamos tres !unciones e%tras con las que cuenta el ambiente de Desarrollo de CodeWarrior:
Función d' Actu"!i*"ción Cod'W"rrior Ud"t'r. Con esta #erramienta es posible mantener su ambiente de desarrollo con las Nltimas actualizaciones que Freescale o!rece, algo importante es que actualiza tanto al compilador con las nue$as librerJas disponibles tanto para los microcontroladores actuales como para los pró%imos lanzamientos que $an e%istir. /a !ig. 9.L 4uestra las pantallas del CodeWarrior pdater.
Fig. 9.L 3entanas del CodeWarrior pdater
Función d' Comr'(ión d'! Pro+'cto P"c, "nd %O . Con esta opción es posible crear un arc#i$o RI de todo el proyecto que actualmente se este desarrollando. Es muy Ntil ya que guarda por completo las rutas del proyecto. 5 se puede seleccionar que solo se guarde el código !uente, de&ando los demás arc#i$os no disponibles.
Fig. 9.+ 3entanas de la !unción "C< and 5
&'rr"mi'nt"( d' D'ur"ción.
E%isten algunas #erramientas que o!recen compa'Jas socias de Freescale para poder #acer Depuración en /Jnea o en $i$o, entre estas se encuentran el PE 4ultilin0 BD4 que es la !igura 9.++ y en la !igura 9.+8 se obser$a un PE Cyclone ro que permite programar 5FF/IAE asJ como 5A/IAE.
Fig. 9.++ 4ultilin0 BD4
Fig. 9.+8 Cyclone @5
Iniciando el uso del CodeWarrior El CodeWarrior es una #erramienta integrada de desarrollo para los microcontroladores, la cual nos permite desde editar los arc#i$os de los programas, compilar en C, programar y depurar los programas creados para el microcontrolador. En la siguiente sección se $era como empezar un nue$o proyecto en CodeWarrior y #acer el programa para el prendido y apagado de los /ED de la tar&eta DE45L)>>. Estamos considerando que pre$iamente #a sido instalado en la computadora el CodeWarrior.
¿Cómo crear un proyecto en el CodeWarrior ? o Iniciando un proyecto Aue$o o Del menu nue$o proyecto SFileKTAe( pro&ectU )elecciona la !amilia de microcontroladores =C)> )elecciona la !amilia =C)> Familia )elecciona el microcontrolador 4CL)>> )elecciona la cone%ión PE 4ultilin0? •
Como se muestra en la siguiente !igura
Establece el nombre del proyecto En el cuadro de te%to S Project Name:U y la ruta donde se guardará la in!ormación del proyecto en el cuadro de te%to “Location:” )eleccionamos el /engua&e a utilizar, para este e&emplo solo marcamos la casilla de C, y #acemos clic en el botón terminar “Finish”
Un vistazo sobre el proyecto generado
"l !inalizar el proceso de creación del proyecto aparece la $entana del proyecto como se muestra
na $ista mas detallada a la $entana del proyecto
En esta $entana se muestra el nombre del proyecto en el tJtulo: rácticaG/ED+.mcp
Botones de Herramientas del proyecto: /os botones de #erramientas que se $a a utilizar durante los e&ercicios de este libro se encuentran agrupados a un lado de la persiana de cone%ión
-
&"c'r '! ro+'cto Comi!"r + 'n!"*"r/. M",'.
Esta #erramienta realiza el proceso de compilación de nuestro programa en SCU y de enlace el cual genera el arc#i$o de salida y los mapas necesarios para despu*s programar y depurar nuestra aplicación.
0
D'ur"ción. D'1u).
Esta #erramienta integra la !unción de compilar y enlazar S4a0eU si es que no se #a compilado nuestro código y e&ecuta el programa de depuración, el cual a su $ez graba el programa en nuestro microcontrolador y permite la depuración del código.
Archivo main().c En este arc#i$o es donde escribiremos nuestro código, e incluye la !unción main12 la cual llamada despu*s de un proceso de inicialización denominado startup12, encargado de inicializar las $ariables como es requerido por el estándar "A)I de C.
void MCU_init(void); /* Device initialization function declaration */ void main(void) { /* Uncomment this function call after using Device Initialization to use the generated code */ /* MCU_init(); */ EnableInterrupt s; /* enable interrupts */ /* include your code here */
for(;;) { __RESET_WATCHDOG (); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave this function */ }
Archivos de Encabezado (archivos.h) En los programas en lengua&e SCU estos arc#i$os de encabezado se utilizan para de!inir constantes, establecer el prototipo de las !unciones, se $erá mas detalle de las !unciones en el capJtulo 7. En el caso del arc#i$o generado por el CodeWarrior se incluyen las siguientes re!erencias a los arc#i$os.# include V#ide!.#T ? !or EnableInterrupts macro ? include deri$ati$e.# ? incluye las declaraciones de los peri!*ricos ? include V4CL)>>.#T ? De!inicion de los registros y bits del microcontrolador ? En el siguiente recuadro se muestra una parte del arc#i$o 4CL)>>.# /*** PTBD - Port B Data Register; 0x00000002 ***/ typedef union { byte Byte; struct { byte PTBD0 :1; Register Bit 0 */ byte PTBD1 :1; Register Bit 1 */ byte PTBD2 :1; Register Bit 2 */ byte PTBD3 :1; Register Bit 3 */ byte PTBD4 :1; Register Bit 4 */ byte PTBD5 :1; Register Bit 5 */ byte PTBD6 :1; Register Bit 6 */ byte PTBD7 :1; Register Bit 7 */ } Bits; } PTBDSTR; extern volatile PTBDSTR _PTBD @0x00000002; #define PTBD _PTBD.Byte
/* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data
Ejercicio r!ctico Control de encendido y apagado de un "E# En esta práctica se realizará todo el proceso de cómo modi!icar el proyecto generado por el CodeWarrior para #acer uso de los puertos de entrada y salida del microcontrolador realizando con ello un control de encendido y apagado de los /EDs e%istentes en la tar&eta DE45L)>>.
/os pasos a seguir son: +.K Crear un nue$o proyecto con el CodeWarrior con el nombre: practicaGled.c y abrir el arc#i$o main.c
8.K Inicializar el puerto B bit ; y bit Q como salidas, de acuerdo con la -abla +. /os /EDs están conectados en el puerto B -B; y -BQ. esto se #ace escribiendo un uno en el registro de dirección del puerto B -BDD. 7.K En el lazo principal del programa encender y apagar los /ED Esto es realizado escribiendo en el registro de datos del uerto B. -BD. E&emplo del código void main() { /*inicialización del puerto */ EnableInterrupts; /* enable interrupts */ /*include your code here */ PTBDD_PTBDD6 = 1;/*Puerto PTB6 como salida*/ PTBDD_PTBDD7 = 1;/*Puerto PTB7 como salida*/ for(;;) { PTBD_PTBD6 = 1; /* Apaga el LED en PTB6 */ PTBD_PTBD7 = 1; /* Apaga el LED en PTB7 */ PTBD_PTBD6 = 0; /* Enciende el LED en PTB6 */ PTBD_PTBD7 = 0; /* Enciende el LED en PTB7 */ __RESET_WATCHDOG(); /* feeds the dog */ } }
M.K Compilar el programa "l terminar tu código en C #az clic en el botón S4"
9.K rogramar el microcontrolador "ntes de proceder con esto $eri!ica que la tar&eta DE45L)>> este conectada a la computadora con el cable )B. /os led de )B W@ y W@G5- deben estar encendidos, asJ como el led $erde 3DD. )ino no esta encendido el led $erde 3DD $eri!ica que los &umpers W@G)E/ este colocado en la posición 3B. /a programación se realiza mediante la #erramienta Debug y lo #ace en !orma automática cuando damos clic en el botón DEB. Durante este proceso se indican el estado de programación de la memoria del microcontrolador 1memoria Flas#2 /as operaciones que realiza el Debugger son: Borra la memoria. )e ba&a el código a la memoria F/")= 1 se programa el microcontrolador2 )e $eri!ica el programa )e e&ecuta el programa y para automáticamente en la !unción main12. "l terminar el proceso de programación del microcontrolador tenemos la siguiente pantalla:
;.K Correr paso a paso la aplicación ara correr la aplicación paso a paso o instrucción por instrucción, se utiliza el botón
;.+.K 5bser$ar como se modi!ica la memoria del microcontrolador ;.8.K 5bser$ar el encendido y apagado de los /ED
Q.K ara e&ecutar el programa se utiliza el botón Aota. )i se e&ecuta el programa los /ED aparecerán que están todo el tiempo encendidos, debido a que apagan y prenden muy rápidamente.
Puertos de Entrada – Utilizando los botones de la tarjeta 5b&eti$o: ara $eri!icar que los botones son leJdos adecuadamente, se #ará que cuando se presione el boton + 1)W+2 uno encienda el /ED+ y cuando se presione el botón 81)W82 encienda el /ED8 De acuerdo con la tabla de &umpers y con!iguración de la tar&eta DE45L)>>, los botones están conectados a los pines -"8 y -"7 del microcontrolador y cada $ez que son presionados leen un cero. /a practica consiste en base al programa anterior agregar la parte de leer los botones /os pasos a seguir son. +.K con!igurar el puerto como entrada -"8, y -"7 -"DDG-"DD8XY -"DDG-"DD7XY
8.K #abilitar las resitencias de pullKenable para -"8 y -"7 -"EG-"E8X +Y -"EG-"E7X +Y 7.K "ctuar sobre los /ED si el botón en presionado En este caso el $alor del led toma directamente el $alor del botón correspondiente -BDG-BD; X -"DG-"D8Y -BDG-BDQ X -"DG-"D7Y
E&emplo del código void main() { /*inicialización del puerto */ EnableInterrupts; /* enable interrupts */ /*include your code here */ PTBDD_PTBDD6 = 1;/*Puerto PTB6 como salida*/ PTBDD_PTBDD7 = 1;/*Puerto PTB7 como salida*/ PTADD_PTADD2=0; PTADD_PTADD3=0; PTAPE_PTAPE2=1; PTAPE_PTAPE3=1;
/*Puerto PTA2 como entrada*/ /*Puerto PTA3 como entrada*/ /*Puerto PTA2 como resistencia de Pull-up habilitada*/ /*Puerto PTA3 como resistencia de Pull-up habilitada*/
for(;;) { PTBD_PTBD6 = PTBD_PTBD7 =
PTAD_PTAD2; /*El LED1 toma el valor del SW1*/ PTAD_PTAD2; /*El LED2 toma el valor del SW2*/
__RESET_WATCHDOG(); /* feeds the dog */ } }
M.K Compila el programa
Ejecuta tu programa $ corre tu programa sin estar conectado a la Computadora. na $ez programado el microcontrolador, el programa queda en !orma permanente en la memoria F/")=. or lo que para correr la aplicación será solamente necesario conectar la !uente de alimentación. A5-" el C5. El microcontrolador se con!igura despu*s de reset para que opere el C5, por lo que si tu aplicación no esta preparada para utilizar esta !unción debes des#abilitarlo como se muestra en el siguiente código. )5-+GC5E X Y ?Des#abilita la !unción de C5? void main() { /*inicialización del puerto */
EnableInterrupts; /* enable interrupts */ /*include your code here */ PTBDD_PTBDD6 = 1;/*Puerto PTB6 como salida*/ PTBDD_PTBDD7 = 1;/*Puerto PTB7 como salida*/ for(;;) { PTBD_PTBD6 = 1; /* Apaga el LED en PTB6 */ PTBD_PTBD7 = 1; /* Apaga el LED en PTB7 */ PTBD_PTBD6 = 0; /* Enciende el LED en PTB6 */ PTBD_PTBD7 = 0; /* Enciende el LED en PTB7 */ __RESET_WATCHDOG(); /* feeds the dog */ } }
M.K Compilar el programa
"l terminar tu código en C #az clic en el botón S4"
9.K rogramar el microcontrolador ;.K E&ecutar el programa
.
/os /EDs estaran apagados #asta que sea presionado alguno de los botones.