AUTORES García Morales Erika Janneth Mendoza García Elfego

Tamaño: px
Comenzar la demostración a partir de la página:

Download "AUTORES García Morales Erika Janneth Mendoza García Elfego"

Transcripción

1 AUTORES García Morales Erika Janneth Mendoza García Elfego ASESOR Dr Miguel Ángel Gutiérrez de Anda UAM-I TRIMESTRE 06O

2 Copyright TUTORIAL DEL CC1010, 2006 Universidad Autónoma Metropolitana unidad Iztapalapa, autores: García Morales Erika Janneth, Mendoza García Elfego Copyright , Texas Instruments Incorporated, en las secciones que éste aplique Copyrigth 2003, 2004, Chipcon AS, en las secciones que éste aplique Copyrigth 1989, Intel Corporation, en las secciones que éste aplique Queda prohibida la reproducción y/o transmisión total o parcial del contenido de la presente obra en cualesquiera formas, sean electrónicas y/o mecánicas sin el consentimiento previo y por escrito del depositario de los derechos de autor

3 PRÓLOGO Este Tutorial del CC1010, tiene por objetivo dar una visión general de la programación del CC1010 en ensamblador (lenguaje de bajo nivel) El Tutorial está pensado para estudiantes de Ingeniería Electrónica o ramas afines con un conocimiento básico en arquitectura de microprocesadores que desean introducirse al mundo de los microcontroladores A lo largo de este Tutorial se mencionan algunas de las diferencias sobresalientes entre el CC1010 y el 8051, debido a que el núcleo del CC1010 está basado en un 8051 y tiene prácticamente el mismo conjunto de instrucciones de este microcontrolador Se dan algunos ejemplos para reafirmar el modo de operación de las instrucciones del CC1010 Al final de cada capítulo aparecen preguntas y ejercicios que ayudarán a reforzar el conocimiento adquirido a través de su estudio 2

4 ARQUITECTURA DEL CC1010 PAGINA 11 DESCRIPCIÓN 6 12 MAPA DE MEMORIA DEL CC REGISTROS DEL CPU 8 ACCESO A MEMORIA 21 ACCESO A MEMORIA ACCESO A LA RAM INTERNA DEL CC ACCESO A LA MEMORIA EXTERNA DEL CC ACCESO A LA MEMORIA DE PROGRAMA DEL CC EJERCICIOS PROPUESTOS 14 SFRs 31 PARA QUÉ SE UTILIZAN LOS SFRs? DESCRIPCIÓN DE ALGUNOS SFRs EJERCICIOS PROPUESTOS 20 INSTRUCCIONES DE SALTO 41 DESCRIPCIÓN SALTOS CONDICIONALES PROGRAMA DE EJEMPLO EJERCICIOS PROPUESTOS 28 INSTRUCCIONES LÓGICAS Y ARITMÉTICAS 51 INSTRUCCIONES LÓGICAS INSTRUCCIONES ARITMÉTICAS INSTRUCCIONES INC Y DEC INSTRUCCIONES SOBRE BITS INDIVIDUALES SALTOS VERIFICANDO BITS INSTRUCCIÓN NOP PROGRAMA DE EJEMPLO EJERCICIO PROPUESTO 41 SUBRUTINAS 61 QUÉ SON LAS SUBRUTINAS? LLAMADAS A SUBRUTINAS PARÁMETROS PARA SUBRUTINAS BANCO DE REGISTROS PROGRAMA DE EJEMPLO EJERCICIO PROPUESTO 47 3

5 PUERTO PARALELO DEL CC QUÉ ES UN PUERTO? PUERTO PARALELO ACCESO AL PUERTO PROGRAMA DE EJEMPLO EJERCICIO PROPUESTO 54 INTERRUPCIONES 81 QUÉ ES UNA INTERRUPCIÓN? POR QUÉ SE DEBE O SE PUEDE ENMASCARAR UNA INTERRUPCIÓN? REGISTROS CONTROLADORES DE INTERRUPCIÓN PRIORIDAD DE INTERRUPCIÓN PASOS PARA LA ATENCIÓN A INTERRUPCIONES PROGRAMA DE EJEMPLO EJERCICIO PROPUESTO 62 HERRAMIENTAS DE DESARROLLO 91 TARJETA DE EVALUACIÓN CC1010EB USO DEL COMPILADOR ASEM51 PARA PROGRAMAS EN ENSAMBLADOR DEL CC COMPILACIÓN DEL CÓDIGO 65 APÉNDICE 68 REFERENCIAS 76 4

6 5

7 11 DESCRIPCIÓN La arquitectura del CC1010 permite tener las memorias de datos y de programas localizadas en espacios diferentes de memoria (arquitectura Harvard) El CC1010 es un microcontrolador (MCU) de 8 bits que está basado en un MCU 8051 con un transceiver de Radio Frecuencia (RF) integrado A diferencia del 8051 estándar, el CC1010 integra un convertidor analógico digital (ADC), un Watchdog timer, un reloj de tiempo real, 2 KB de memoria RAM direccionable, 32 KB de memoria Flash para código, dos transmisores receptores asíncronos universales seriales (UART s) programables, un modulo de encriptación/desencriptación de datos (DES Module) y 26 pines de entrada /salida de propósito general configurables El CC1010 es 25 veces más rápido que un 8051 estándar trabajando a la misma frecuencia de reloj del CC1010, a diferencia del ciclo de máquina de un 8051 que emplea 12 ciclos de reloj Fig 11-Diagrama a bloques del CC Diagrama a bloques tomado del datasheet del CC1010 de Chipcon (wwwchipconcom), propiedad de Texas Instrument Copyright Texas Instruments Incorporated 6

8 12 MAPA DE MEMORIA DEL CC1010 El CC1010 tiene dos bloques de memoria de acceso aleatorio (Random Access Memory - RAM), éstos incluyen 128 bytes de RAM interna, 128 bytes para los registros de funciones especiales (SFRs), los cuales están mapeados a partir de la dirección 80 a la FF hexadecimal, y 2048 bytes de RAM externa En resumen, se tiene un total de 2304 ( ) bytes de memoria RAM La memoria de datos se divide en RAM interna y RAM externa La diferencia estriba en que la RAM interna está dentro del núcleo del MCU y la RAM externa es ajena a éste y no está conectada con registros del MCU Asimismo, los dos tipos de memoria se acceden a través de un conjunto de instrucciones diferentes El CC1010 tiene 32 KB de memoria de programa la cual está dividida en 256 bloques de 128 bytes cada uno La memoria de programa puede ser programada o borrada en su totalidad a través del puerto serial, o también bloque por bloque El CC1010 soporta hasta 20,000 ciclos de borrado/escritura de la memoria de programa, ésta puede ser bloqueada para lectura/escritura mediante la activación del bit de bloqueo a través de la interfase serial En la Fig 12 podemos observar el mapa de memoria del CC1010 Fig12-Mapa de memoria 7

9 13 REGISTROS DEL CPU El CC1010 contiene 4 bancos de registros de propósito general, los cuales contienen 8 registros de ocho bits cada uno Los registros de cada uno de los bancos están identificados como los registros R0, R1, R2,, R7 Cada uno de los bancos están mapeados en la memoria de datos interna (en las direcciones 0x00 0x07, 0x08 0x0F, 0x10 0x17 y 0x18-0x1F) Los registros son usados para almacenar datos temporalmente Los diferentes bancos de registros pueden seleccionarse a través de la palabra de estado del programa PSW (Program Status Word) Esta palabra contiene las banderas de acarreo, de sobreflujo y de paridad que reflejan el estado actual del CPU, es decir, almacena la información que describe los resultados de las operaciones aritméticas, lógicas y de decisión El CPU además maneja registros de propósito especial tales como: El acumulador (A) Este registro almacena temporalmente el resultado de las operaciones aritméticas y lógicas El registro A está mapeado en el espacio de memoria de los registros de funciones especiales (SFRs) El registro B Este registro es usado, en conjunto con el registro A, cuando se efectúa una multiplicación y/o división Puede usarse también como un registro auxiliar El registro apuntador a la pila (SP) Este registro es un apuntador a la siguiente posición de memoria vacía en la pila, la cual se encuentra en la RAM interna 8

10 9

11 21 ACCESO A MEMORIA El CC1010 permite el acceso a espacios de memoria interna, externa y de programa, a través de instrucciones específicas usando diferentes modos de direccionamiento Un modo de direccionamiento puede definirse como una forma particular de acceder a un dato localizado en algún espacio de memoria 22 ACCESO A LA RAM INTERNA DEL CC1010 El acceso a la RAM interna se lleva a cabo a través de la instrucción MOV La instrucción MOV, permite transferir datos a la RAM interna, y a los SFRs La sintaxis de esta instrucción es: MOV destino, fuente donde la fuente y el destino pueden ser el acumulador (A), cualquier registro de los bancos de registros (R0-R7), o una dirección de memoria interna Asimismo la fuente puede ser un dato numérico almacenado en código que desea almacenarse en un registro Si el dato a almacenar sigue a la instrucción MOV en el espacio de memoria del código el dato se conoce como dato directo En el caso de que la fuente sea un dato directo, este puede estar expresado en diferentes formatos (decimal, hexadecimal o binario) Un dato directo siempre comienza con el símbolo # dentro del código del programa Al final del dato se coloca el identificador para definir si es hexadecimal (identificador H), binario (identificador B), y en el caso de los decimales no se pone identificador Ejemplo: MOV A, #10H MOV R1, #25 MOV A, R1 ; guarda en el acumulador ; un 16 ; guarda en R1 el 25 en ; decimal ; mueve el valor de R1 ; al acumulador MOV 40H, # B ; guarda en la ; dirección 40H el ; 3 en notación binario En el ejemplo se muestran algunas maneras de acceder a información y alterar el contenido de registros ó direcciones La RAM interna y el espacio de memoria de los SFRs se pueden acceder a través del direccionamiento directo, el cual permite usar como fuente y/o destino una dirección de 8 bits que contiene el dato a usar Los mnemónicos para el acceso, a través del direccionamiento directo, a la RAM interna y al espacio de memoria de los SFRs usados son: MOV A, directo MOV Rn, directo MOV directo, A MOV directo, Rn MOV directo,directo La RAM interna puede ser también direccionada indirectamente usando como fuente o destino el registro que contiene la dirección del dato a usar El acceso indirecto a la RAM interna utiliza los registros R 0 o R 1 Con estos registros sólo se pueden direccionar 8 bits y los SFRs no pueden ser direccionados indirectamente El se utiliza con todas las formas de direccionamiento (i=0 ó i=1) es usado para el direccionamiento indirecto en la RAM interna como el dato que se encuentra en la dirección apuntada por R1 Los mnemónicos usados para el direccionamiento en la RAM interna son: MOV MOV A directo #dato 10

12 donde el direccionamiento indirecto puede ser usado como fuente o como destino La RAM interna también se accede a través del direccionamiento por registro, este direccionamiento usa como fuente o destino cualquiera de los ocho registros de cualquiera de los 4 bancos Los mnemónicos para acceder la RAM interna con el direccionamiento por registro son: MOV A, Rn MOV directo, Rn MOV Rn, A MOV Rn, directo MOV Rn, #dato donde el registro Rn es cualquiera de los 8 registros de cualquiera de los 4 bancos que contiene la memoria interna Estos bancos de registros son seleccionados a través del registro de propósito especial PSW (ver detalles de este registro en el capítulo 3) Cuando se desea acceder a la RAM interna por medio del direccionamiento inmediato, se hace usando el mnemónico: MOV A, #dato MOV DPTR, #dato estos mnemónicos tienen como fuente el dato directo a usar se requiera obtener algún dato de la pila (LIFO: last in- first out)la pila crece, cada vez que se almacenan datos, de manera finita de acuerdo a la capacidad de la RAM interna En el CC1010 la pila puede ocupar cualquier espacio de la RAM interna a partir de la dirección 07H y crecer hasta la dirección 7FH El puntero a la pila es inicializado en la dirección 07H de la RAM interna Las instrucciones PUSH y POP son usadas para acceder el espacio de memoria interna denominado pila PUSH Esta instrucción permite almacenar un dato en la pila de acuerdo a la dirección que apunte el registro de propósito especial que controla la pila (el Stack pointer o SP, ver detalles en el capitulo 3) SP Es una instrucción que usa un operador direccionado de modo directo como parámetro La instrucción PUSH incrementa el registro SP, es decir: SP= SP+1 El contenido del byte de la dirección directa se escribe en el tope de la pila Su sintaxis es: PILA PUSH directo Una parte de la RAM interna puede usarse como espacio de almacenamiento temporal, que es administrada de forma dinámica por el microcontrolador A la región de la memoria interna RAM administrada de esta forma se le conoce como pila La pila es una estructura de datos que permite almacenar datos de tal manera que el último dato almacenado será el primero en salir cuando POP Esta instrucción permite obtener un dato de la pila Es una instrucción de dirección directa donde el contenido del byte del tope de la pila se escribe en la dirección directa indicada El SP se decrementa, es decir: SP= SP-1 11

13 Su sintaxis es: POP directo Un ejemplo del uso de las instrucciones PUSH y POP para el manejo de la pila se muestra en la Fig 21 XCH destino, fuente donde la fuente puede ser un registro una dirección directa o un dato de memoria y como destino sólo es válido el acumulador La función de la instrucción XCH es intercambiar el dato de la fuente por el dato del destino XCHD El formato para esta instrucción es: XCHD destino, fuente donde como fuente sólo es válido un dato de memoria y como destino sólo es válido el acumulador Fig21 Muestra el funcionamiento de las instrucciones PUSH y POP en la pila En la Fig21 se ve como la instrucción PUSH almacena en la pila el dato que se encuentra en la dirección 34H de memoria interna Cuando se ejecuta la instrucción PUSH el apuntador a la pila es aumentado en 1, es decir, cambia de la dirección 12H a la 13H Al ejecutar después una instrucción POP el dato al que apunta el SP es guardado en la dirección 34H de la memoria interna Después del POP el SP es decrementado de 13H a 12H INSTRUCCIONES XCH Y XCHD Las instrucciones XCH y XCHD permiten transferir datos de un lugar a otro dentro de la memoria interna XCH El formato para esta instrucción es La función de la instrucción XCHD es intercambiar los nibbles de los datos, es decir el nibble bajo del dato de la fuente se intercambia por el nibble bajo del dato del destino 23 ACCESO A LA MEMORIA EXTERNA DEL CC1010 El acceso a la RAM externa se hace utilizando el direccionamiento indirecto En el direccionamiento indirecto a la RAM externa sólo son usados los registros DPTR1, DPTR0, R 0 o R 1 Los mnemónicos para el acceso a la RAM externa son: MOVX A A donde se puede usar el registro A como fuente o destino Si se desea direccionar 8 bits se hace a través de los registros Ri (i=0 ó i=1), también se pueden direccionar 16 bits mediante los registros DPTR1 y DPTR0 12

14 24 ACCESO A LA MEMORIA DE PROGRAMA DEL CC1010 La memoria de programa permite almacenar el código del programa a ejecutar El CC1010 contiene 32KB de memoria para código de programa El espacio de memoria de programa sólo es accedido para lectura a través del direccionamiento indexado usando como fuente la dirección formada por A+PC ó el A+DPTR, que son direcciones de 16 bits Los mnemónicos de acceso a la memoria de programa son: MOVC MOVC donde cada una de ellos mueve un byte de las direcciones de memoria de programa dadas respectivamente Esto es útil para cuando se desean manejar tablas o constantes que pueden ser leídas directamente del código 13

15 25 EJERCICIOS PROPUESTOS: Conteste las siguientes preguntas: 1- Cuál es la utilidad de la instrucción MOV? 2- Qué instrucción sirve para acceder a la RAM interna y cuál es la que se utiliza para acceder a la RAM externa? 3- Qué tipo de direccionamiento se utiliza para acceder a la RAM interna, y cuál para la RAM externa? 4- Cuántos bancos de registros contiene el CC1010? 5- Cuál es la diferencia entre el direccionamiento directo y el direccionamiento indirecto? 6- Qué hace la siguiente instrucción: MOV 14

16 15

17 31 PARA QUÉ SE UTILIZAN LOS SFRs? Los Registros de Funciones Especiales están localizados en el espacio de la memoria RAM interna El acceso a la mayoría de los SFRs está permitido a través de las instrucciones de direccionamiento directo Existe un total de 119 SFRs de los cuales la mayoría de ellos son utilizados para configurar el hardware del microcontrolador o el modo de operación de éste El nombre y la dirección de los SFRs se muestran en la siguiente tabla (Tabla 21) 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F 0xF8 EIP TEST0 TEST1 TEST2 TEST3 TEST4 TEST5 TEST6 0xF0 FSHAPE B 7 FSHAPE6 FSHAPE5 FSHAPE4 FSHAPE3 FSHAPE2 FSHAPE1 0xE8 FSDELA EIE Y FSEP0 FSEP1 FSCTRL RTCON FREND TESTMUX 0xE0 CURREN RESERVE ACC PA_POW PLL LOCK CAL PRESCALER T D 0xD8 EICON MODEM2 MODEM1 MODEM0 MATCH FLTIM - - 0xD0 PSW X32CON WDT PDET BSYNC OxC8 RFMAIN RFBUF FREQ_0A FREQ_1A FREQ_2A FREQ_0B FREQ_1B FREQ_2B 0xC0 SCON1 SBUF1 RFCON CRPCON CRPKEY CRPDAT CRPCNT RANCON OxB8 IP RDATA RADRL RADRH CRPINI4 CRPINI5 CRPINI6 CRPINI7 0xB0 P CRPINI0 CRPINI1 CRPINI2 CRPINI3 0xA8 IE TCON2 T2PRE T3PRE T2 T3 FLADR FLCON 0xA0 P2 SPCR SPDR SPSR P0DIR P1DIR P2DIR P3DIR 0x98 SCON2 SBUF CHVER 0x90 P1 EXIF MPAGE ADCON ADDATL ADDATH ADCON ADTRH 0x88 TCON TMOD TL0 TL1 TH0 TH1 CKCON - 0x80 P0 SP DPL0 DPH0 DPL1 DPH1 DPS PCON Tabla 21- -Registros de Funciones Especiales (SFRs) 2 2 Tabla 21, tomada del datasheet del CC1010 de Chipcon (wwwchipconcom), propiedad de Texas Instrument Copyright Texas Instruments Incorporated Las letras en rojo y con el símbolo, son los registros de funciones especiales que tiene un 8051 estándar 16

18 En la Tabla 21 se indica en letras rojas y con el símbolo los SFRs de un microcontrolador 8051 estándar Aquí debemos resaltar que el CC1010 está basado en un 8051 estándar pero con ventajas debido, entre otras cosas, a la cantidad de periféricos que maneja, lo cual se ve reflejado en la cantidad de SFRs usados para configurarlos 32 DESCRIPCIÓN DE ALGUNOS SFRs Explicaremos brevemente algunos de los SFRs del CC1010 PSW (Program Status Word Palabra del estado del programa) Este registro de función especial contiene banderas de acarreo, sobreflujo y paridad que reflejan el estado en que se encuentra el CPU El formato del PSW aparece abajo: C Y A C F 0 R S 1 R S 0 O V CY Bandera de acarreo Se pone a 1 cuando el resultado de la última operación aritmética tiene acarreo (durante la suma) o cuando hay un préstamo (durante la resta) AC Bandera de acarreo auxiliar Se pone a 1 cuando el resultado de la última operación aritmética, ya sea suma o resta, produce un acarreo en los bits del nibble alto F0 Bandera 0 Esta disponible para propósitos generales La F 1 P bandera F0 es manipulada por el programador a través de software de acuerdo a sus necesidades Registros selectores de bancos RS1 RS0 Banco y dirección 0 0 Banco 0 0x00 0x Banco 1 0x08 0x0F 1 0 Banco 2 0x10 0x Banco 3 0x18 0x1F OV Bandera de sobreflujo Esta bandera se pone a 1 cuando el dato excede los 128 (decimal) F1 Bandera 1 Bandera para propósitos generales P Bandera de Paridad Se pone a 1 cuando el acumulador contiene un número impar de 1 s (paridad impar) y a 0 cuando el acumulador contiene un número par de 1 s (paridad par) DPTR (Data Pointer - Apuntador a datos) A diferencia del 8051, el CC1010 tiene dos registros DPTR de 16 bits los cuales están mapeados de las direcciones 82H a la 85H El DPTR tiene como misión principal el apuntar a cualquier dirección dentro de los 64KB de espacio de memoria tanto de código como de datos Los DPTR s del CC1010 son DPTR0 y DPTR1, cada uno de ellos se divide a su vez en una parte alta y una parte baja (DPH0 y DPL0 para DPTR0; DPH1 y DPL1 para DPTR1) Estos registros se pueden incrementar a través de la instrucción INC (ver sección 63), pero no hay alguna instrucción específica para decrementarlos directamente, se necesitaría hacerlo a través de algunas instrucciones Los 17

19 registros DPTR0 y DPTR1 son utilizados para el direccionamiento indirecto e indexado, mencionado en el capítulo anterior SP (Stack Pointer Apuntador a pila) Tiene como misión apuntar a cualquier dirección de la pila, éste puede ser incrementado cuando se realiza un push a la pila y decrementado cuando se ejecuta un pop a la pila Tiene la dirección 81H en el espacio de memoria de los SFRs (ver Tabla 21) El SP también se modifica cuando existe una llamada a subrutina o cuando se da servicio a una interrupción, debido a que la dirección de retorno de PC se almacena en SP SFRs QUE CONTROLAN PERIFÉRICOS DE PROPÓSITO GENERAL DE E/S Los SFRs P0, P1, P2, P3 dan acceso a los puertos de entrada /salida del CC1010, es decir, de lectura o escritura Los puertos P0,,P3 están asociados con los SFRs P0DIR, P1DIR, P2DIR y P3DIR, los cuales permiten configurar cada uno de los pines del puerto como de entrada o salida SFRs QUE CONTROLAN TIMERS Y CONTADORES El CC1010 contiene 2 timers/contadores de 16 bits cada uno, los cuales son activados a través del los registros TL0 y TH0 para el timer/contador 0, y TL1 y TH1 para el timer/contador 1, donde THx (x=0,1) contiene los bits más significativos del contador respectivo mientras que TLx contiene los bits menos significativos Se puede utilizar cada uno de los timers/contadores individualmente, programándolos a través de los registros TCON y TMOD TCON (Timer Control Controlador del timer 0 y timer 1) El registro TCON (dirección 88H) controla los timers 0 y 1, permitiendo conocer si están activos o inactivos El TCON también controla las interrupciones externas 0 y 1 TMOD (Timer Mode Modo timer 0 y timer 1) Los timers/contadores 0 y 1 se pueden configurar en cuatro modos Estos modos son programados a través del registro TMOD MODO 0 Permite tener un timer/contador de 13 bits MODO 1 Permite tener un timer/contador de 16 bits MODO 2 Se tiene un timer/contador de 8 bits con recarga automática Este modo permite una vez que se haya terminado la cuenta de 8 bits volver a comenzar automáticamente MODO 3 Permite tener 2 contadores de 8 bits independientes El modo 3 sólo puede usarse con el timer/contador 0 El registro TMOD depende también del registro CKCON CKCON( Timer Clock rate Control - Control de tiempo del reloj del timer) CKCON controla el tiempo del reloj de los timers haciendo uso del reloj del MCU CKCON permite dividir el reloj del MCU entre 12 para ser compatible con el MCU 80C32 o entre 4 para el 8051 estándar 18

20 TIMER 2 y 3 El CC1010 contiene 2 timers los cuales pueden ser usados como timers o como salidas de modulación por ancho de pulso (PWM) El registro que controla estos periféricos es TCON2 TCON2 (Timer Control Register 2 Controlador del timer 2 y timer 3) El registro TCON2 permite activar el timer 2 y 3, cada uno de forma independiente OTROS SFRs PCON (Power Control Control de potencia) Este registro (dirección 87H) permite seleccionar entre tres modos de operación relacionados con el consumo de potencia del CC1010, los cuales son: 1 Modo activo- En este modo el microcontrolador funciona de modo normal y el consumo depende de la frecuencia del cristal usado Asimismo entre más grande sea la frecuencia del cristal, más grande será el consumo de potencia 2 Modo desocupado- En este modo el microcontrolador detiene el proceso actual, manteniendo los datos actuales en los registros, pero sin que los periféricos dejen de funcionar Existen tres formas de salir de este modo: a) Activando alguna instrucción de interrupción b) Activando alguna instrucción de reset c) A través del reset externo ON/OFF 3 Modo de baja potencia- En este modo tanto el microcontrolador como los periféricos son detenidos y sus relojes deshabilitados, quedando solamente habilitado el reloj del ADC, que permite generar un reset Existen dos formas de salir de este modo: a) Activando alguna instrucción de reset b) A través del reset externo ON/OFF SCON (Serial Control Controlador del puerto serial) Este registro se divide en dos diferentes registros que manejan al puerto serial 0 (SCON0 0x98) y al puerto serial 1 (SCON1 0xC0)El puerto serial 0 puede ser usado para propósitos generales de comunicación, mientras que el puerto serial 1 se utiliza para cargar los programas vía el puerto al CC1010, o simplemente para propósitos generales de comunicación Este registro es configurado de manera que se puede usar en modo de operación half-duplex o full-duplex, tanto para recepción como para transmisión WDT (watchdog timer) El WDT es un registro que controla al Watchdog Timer, este último es un contador de tiempo que permite reiniciar el microcontrolador después de haber existido una falla en software o después de la interrupción (en el watchdog) programada a través del registro WDT 19

21 33 EJERCICIOS PROPUESTOS: Conteste las siguientes preguntas: 1- En qué parte de la memoria se localizan los SFRs? 2- Cómo se puede acceder a los SFRs? 3- Porqué son importantes los SFRs? 4- Para qué se utiliza el registro de función especial PCON? 5- En cuántos registros se divide el registro de función especial SCON, y para qué se utilizan? 20

22 21

23 41 DESCRIPCIÓN Cuando nos referimos a un salto (incondicional o condicional) en un programa, lo que realmente se debe entender es que el control del programa es cedido a otra instrucción que no está precedida por la instrucción que se ejecuta actualmente Un salto puede ser hacia adelante o hacia atrás, modificando el contador de programa (PC) En un programa casi siempre se requiere cambiar la secuencia del programa de un lugar a otro, para ello se utilizan las instrucciones de salto La Fig 3 muestra como sería un salto hacia atrás y hacia adelante Ejemplo: BUENO: MOV R1, #10H MOV P1, R1 SJMP BUENO En este ejemplo BUENO es una etiqueta a la que salta el controlador de programa cuando llega a la instrucción SJMP En este caso se trata de un salto no mayor a 128 bytes LJMP (Long Jump) El salto largo es una instrucción de 3 bytes el cual es ejecutado a la misma velocidad que uno de 2 bytes La dirección de 16 bits es cargada dentro del PC permitiendo acceder a algún lugar de los 64KB de espacio de memoria Ejemplo: a) b) Fig3- Saltos incondicionales, (a) hacia atrás y (b) hacia adelante respectivamente Existen varias instrucciones de salto incondicional (JMP), como lo es: SJMP, LJMP, AJMP SJMP (Short Jump) El SJMP es una instrucción de salto corto de 2 bytes Está instrucción permite hacer saltos en un rango hacia atrás de hasta 128 localidades de memoria y hacia adelante en un rango de hasta 127 bytes con respecto a la instrucción actual El offset (el último byte de la instrucción) es sumado al valor actual del PC, la suma del offset con el PC se realiza usando el método de complemento a 2 La sintaxis para esta instrucción es: SJMP Etiqueta CICLO: MOV A, # B LJMP CICLO En el ejemplo anterior, aparentemente es el mismo ejemplo al utilizar SJMP, la diferencia radica en que ahora el salto está fuera del bloque de instrucciones que puede ser alcanzado por la instrucción anterior AJMP (Absolute Jump) La longitud de esta instrucción es de 2 bytes, igual que SJMP, pero permite acceder instrucciones dentro de un bloque de 2KB El AJMP sólo afecta los primeros 11 bits más bajos del PC, que serían 8 bits de offset más los tres bits de código, por lo que quedarán 2KB fijos y los 5 bits altos sin cambio del PC Ejemplo: AJMP COMIENZA COMIENZA: MOV A, #2FH MOV R4, A 22

24 En este ejemplo debe tenerse en cuenta que la etiqueta BUENO no se encuentre en una dirección fuera del bloque de 2KB después de AJMP EL JMP El JMP general, que es una instrucción de 1 byte, ejecuta un salto de forma indirecta sumando al acumulador la dirección de DPTR y es cargada en el PC, teniendo este último la dirección a la que se desea saltar Ejemplo: 0x01 MOV DPTR, 40H 0x02 MOV A, 01H 0x03 0x04 0x05 0x40 0x41 MOV R1, #12H 0x42 MOV P1, R1 0x43 Se observa en el ejemplo anterior el uso de la instrucción nótese que primero se carga el DPTR con la dirección 40H y el acumulador con la dirección 01H, cuando se da la instrucción de salto se suma el DPTR=40H y A=01 dando una suma total de 41H, y salta a esta dirección, es decir, PC=41 42 SALTOS CONDICIONALES Los saltos condicionales son instrucciones que ejecutan un salto si la condición utilizada para ello es verdadera, de lo contrario la siguiente instrucción es ejecutada Todos los saltos condicionales son cortos JZ y JNZ (Saltos condicionales simples) JZ salta al destino si el acumulador A es cero y JNZ salta al destino si el acumulador A es diferente de cero Las dos instrucciones anteriores son de 2 bytes cada una Ejemplo: MOV R3, #05H ;carga dato a R3 DESP: MOV P2, R3 ;despliega dato en P2 MOV A, R3 ;carga R3 en A JNZ DESP ;brinca si A no es 0 En este ejemplo el valor de R3 deberá ser disminuido en cada iteración (el valor de R3 también es guardado en el acumulador A para poder utilizar la instrucción JNZ), cuando el acumulador es cero y el programa lee la instrucción JNZ, éste termina y ejecuta la instrucción siguiente, es decir ya no regresa a la etiqueta DESP DJNZ (Decrementa y salta si no es cero) La instrucción DJNZ, de 2 bytes, decrementa la dirección directa o registro especificados, da un salto corto a la etiqueta indicada en caso de que la dirección o registro sea diferente de cero, de lo contrario se ejecuta la siguiente instrucción Ejemplo: MOV R6, #02H ET: MOV A, R6 DJNZ R6, ET En este caso ya no se utiliza la instrucción DEC, ya que R1 es decrementado en la misma instrucción El DJNZ también es usado para generar retardos sencillos, para esto es necesario saber el valor que se le cargará al registro o los registros necesarios para el retardo MOV R1, #Cuenta1 MOV R2, #Cuenta2 MOV R3, #Cuenta3 T: DJNZ R3, T DJNZ R2, T DJNZ R1, T 23

25 Para estimar la duración del retardo el procedimiento es el siguiente: Como primer paso se necesita calcular el valor de un ciclo de instrucción en segundos, dado por: t ciclo de instr = f 1 ciclo de reloj * 4 donde fciclo de reloj es la frecuencia del cristal utilizado, dado que un ciclo de instrucción requiere 4 ciclos de reloj el resultado se multiplica por 4 En seguida se calcula el número de ciclos de instrucción que se requieren para el tiempo deseado en segundos: Ciclos = Tiempo t ciclo de instr Ahora de la estructura anterior, la instrucción MOV requiere de 2 ciclos de instrucción mientras que la instrucción DJNZ requiere de 3 (ver Apéndice I) Para esta estructura tenemos que el LOOP externo es controlado por Cuenta1, es decir cada que Cuenta1 se decrementa una vez el LOOP que corresponde a Cuenta2 se decrementa 256 veces, y cada vez que Cuenta2 se decrementa una vez Cuenta3 se decrementa 256 veces Es decir Cuenta3 se decrementa 256 veces por cada vez que se decrementa Cuenta2, entonces tenemos: Cuenta 3 +1 Cuenta2 también se de decrementa 256 veces por cada vez que se decrementa Cuenta1, por el número de veces que se decremento Cuenta3 más el ciclo que corresponde a la instrucción DJNZ de Cuenta2: ( Cuenta 2 1) * Entonces Cuenta1 se decrementa el número que se la cargue hasta que R3 sea cero, por las veces que se decrementan Cuenta2 y Cuenta3 (256*257=65792), más el ciclo que corresponde a la instrucción DJNZ de Cuenta1: ( Cuenta 1 1) *( ) Todas estas sumatorias parciales se suman y se multiplican por 3 porque cada DJNZ tarda tres ciclos, y después se le suman los 6 ciclos correspondientes a las tres instrucciones MOV quedando de la siguiente forma: [( C 3 + 1) + ( C2 1) * ( C1 1) *65793] 6 3 * + Formula 1 Entonces si queremos un retardo de un segundo, primero obtenemos el valor del ciclo de instrucción: t ciclo de instr 1 = * 4 = e MHz esto es porque aunque el CC1010 puede trabajar con diferentes frecuencias de reloj, normalmente trabaja con un cristal de MHz Después calculamos el número de ciclos de instrucción para 1 segundo: Ciclos = 1seg e - 7 = al valor anterior le quitamos los 6 ciclos correspondientes a las instrucciones MOV y lo dividimos entre 3 para obtener los valores que se cargaran en las variables CuentaX (X=1,2,3, etc): = Con este valor obtenemos el valor de Cuenta1 de la siguiente manera: =

26 Entonces tomamos el valor entero del resultado y le sumamos uno, el valor de Cuenta1=19, y tomamos el residuo de esta división para obtener el valor de Cuenta2: y hacemos: * = = nuevamente tomamos el valor entero más uno, entonces Cuenta2=174 y volvemos a utilizar el residuo para obtener Cuenta3: * 257 = 63 el valor de Cuenta3 será el valor obtenido menos uno, Cuenta3 =62 Verificando los valores de Cuenta1, Cuenta2 y Cuenta3 en la formula (Formula 1) tenemos: [( ) + ( 174 1) * ( 19 1) * 65793] * = que es el valor de los ciclos de instrucción necesarios para un segundo CJNE (Compara y salta sino es igual) CJNE es una instrucción de 3 bytes, ésta compara el contenido del primero y el segundo operando, y salta al destino (tercer operando) si éstos no son iguales Cuando los operandos a comparar resultan ser iguales, la instrucción es culminada y se sigue ejecutando la secuencia de programa Cuando el primer operando es menor que el segundo se activa la bandera de acarreo, en el caso contrario la bandera de acarreo se pone a cero Cuando los operandos son diferentes se ejecuta el salto al tercer operando Hay diferentes variantes de la instrucción dependiendo del primer operando usado A, como primer operando: La instrucción puede tener datos inmediatos o direcciones directas como segundo operando CJNE A, directo, rel CJNE A, #d, rel Rn, como primer operando: En este caso solamente datos inmediatos son permitidos como segundo operando CJNE Rn, #d, como primer operando: Como en el caso previo solamente datos inmediatos son permitidos como segundo operando CJNE #d, rel MOV R5, #05H ETIQUETA: MOV P2, R5 INC R5 CJNE R5, #10H, ETIQUETA En este ejemplo, el registro R5 es cargado con el valor 5, y desplegado en el puerto 2 Este registro es incrementado con cada iteración, cuando R5=10H y el programa está en la instrucción CJNE se compara R5 y el valor 10H, como son iguales se sale del ciclo y continua con la secuencia del programa JC (Brinca si el acarreo es igual a 1) Si la bandera de acarreo es igual a 1 se realiza un salto a la dirección indicada, de lo contrario sigue con la secuencia del programa JC Ejemplo: rel JC CARGA CARGA: MOV R1, #05H 25

27 Se debe entender que la bandera de acarreo (C) está en 1 y se puede aplicar la instrucción JC JNC (Brinca si el acarreo es igual a 0) Si la bandera de acarreo es igual a 0 se efectuará un salto a la dirección indicada, de lo contrario sigue con la secuencia de instrucciones JNC rel Ejemplo: JNC GUARDA GUARDA: MOV R4, A En este caso la bandera de acarreo es cero y se puede aplicar la instrucción JNC GUARDA 26

28 43 PROGRAMA DE EJEMPLO El siguiente programa ordena un arreglo de datos utilizando el algoritmo del bubble sort Este programa comienza inicializando un arreglo de números ordenados de mayor a menor, los cuales serán ordenados de menor a mayor mediante el algoritmo de la burbuja Una vez que se inicializó el arreglo, se posiciona el en la posición del primer número del arreglo, y el en la posición del número siguiente, estos números son comparados y si el primero es mayor que el segundo entonces son cambiados de posición en el arreglo y los punteros se recorren a la siguiente posición repitiendo la comparación hasta que se llega al final del arreglo Estas comparaciones se repiten hasta que se haya hecho 7-1 veces, porque el arreglo es de 7 números El pseudocódigo es el siguiente: paso := 1; MIENTRAS (paso <= n-1) HACER Inicio PARA i DESDE 1 HASTA n-paso HACER Inicio SI v(i) > v(i+1) ENTONCES Intercambiar(v(i),v(i+1)); Fin paso := paso + 1; Fin ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;:::::::::::::::::::::: BURBUJA :::::::::::::::::::::::::: ORG 00H INICIO: MOV 20H,#10 MOV 21H,#09 MOV 22H,#08 MOV 23H,#07 MOV 24H,#06 MOV 25H,#05 MOV 26H,#04 ;se inicializa el arreglo ;que será utlizado ;para ordenar los ;números MOV R3, #06H ;se inicializa el contador MOV 28H, #28H ;y el final del arreglo VUELTA: ;vuelve a realizar otro ciclo de ;comparaciones DEC 28H ;Se decrementa el valor del final del arreglo MOV R0, #20H MOV R1, #21H OTRO: ;compara el número de la MOV ;siguiente posición MOV CJNE A, B, CAMBIA REGRESA: INC R0 INC R1 MOV A, R1 CJNE A,28H,OTRO DJNZ R3,VUELTA JMP FIN ;incrementa la posición ;y verifica el final del ;arreglo CAMBIA: ;cambia el número de posición en JC REGRESA ;caso de que sea más grande XCH A, B A B JMP REGRESA FIN: END El código es el siguiente: 27

29 44 EJERCICIOS PROPUESTOS: Conteste las siguientes preguntas: 1- De la lista de instrucciones de salto siguiente, diga cuáles son condicionales y cuáles son incondicionales a) JNZ d) SJMP b) JMP e) JC c) JNB f) CJNE 2- Implemente el algoritmo de ordenamiento Shellsort utilizando saltos condicionales e incondicionales Este programa ordenará 8 números, los cuales se pueden manipular con los registros R0 y R1 utilizando el direccionamiento indirecto 28

30 29

31 51 INSTRUCCIONES LÓGICAS El CC1010 maneja varias funciones lógicas estándar Cuando se usan las operaciones binarias AND, OR, ó XOR se hace realizando la operación lógica indicada entre dos bytes, bit por bit (ver Fig 61, Fig 62 y Fig 63, para conocer las tablas de verdad de estas operaciones) Para cualquiera de estas instrucciones puede ser usado como operador destino el acumulador o una dirección directa Como operador fuente es válido cualquiera de los 8 registros de cualquiera de los 4 bancos disponibles, un dato inmediato, un dato de memoria o una dirección directa Cuando el acumulador se usa como destino entonces las instrucciones pueden utilizar cualquier tipo de direccionamiento para la fuente, pero cuando se tiene como destino una dirección directa sólo se permite como fuente al acumulador A o al dato inmediato El resultado de estas operaciones, siempre es guardado en el destino Fig 63 Símbolo y tabla de verdad del operador lógico XOR ANL Se usa para ejecutar la operación AND entre dos datos de 8 bits Esta instrucción afecta la bandera de paridad (P) del PSW Ejemplo: ANL A, R1 ANL Destino, Fuente Si A y R1 tienen los valores A R El resultado de la operación AND será Y estará almacenado en el registro A el valor 01H Fig 61 Símbolo y tabla de verdad del operador lógico AND Esta instrucción puede ser usada por ejemplo, para seleccionar los bits que deben ser puestos en ceros en el destino Los bits que serán modificados de esta forma corresponden a los ceros en la fuente ORL Fig 62 Símbolo y tabla de verdad del operador lógico OR Esta instrucción se utiliza para ejecutar la operación lógica OR usando dos registros de 8 bits Asimismo esta instrucción puede ser usada para seleccionar los bits que se han de activar (o poner en 1) en el destino, que corresponden a aquellos que están en 1 en la fuente ORL Destino, Fuente 30

32 Ejemplo: XRL ORL P1, A Si A tiene el valor 2FH y P1 F0H la instrucción ORC da como resultado: P A Resultado El resultado se almacena en P1 Esta instrucción se utiliza para ejecutar la operación lógica XOR con un par de registros de 8 bits Esta instrucción puede ser usada asimismo para complementar de forma selectiva los bits del operador de destino Los bits a complementar son aquellos que están en 1 s en el operador fuente eficiente CLP (Complement- complemento) Esta instrucción también tiene como operando al acumulador CPL obtiene el complemento de los bits del acumulador Ejemplo: CLP A MOV A, # B CPL A En este caso lo que se obtiene es lo siguiente: A CPL A Resultado El resultado es guardado en A Ejemplo: XRL Destino, Fuente XRL A, # B Destino A Fuente #dato Destino A En el ejemplo se complementa el nibble (grupo de 4 bits) más bajo del acumulador y deja el nibble más alto sin cambiar CLR (Clear - limpiar) Esta función solamente tiene un operando, el acumulador CLR pone en cero los bits correspondientes a éste CLR A Esta instrucción hace lo mismo que la instrucción MOV A, # B con la diferencia que la instrucción CLR es más SWAP (Intercambio de Nibbles) Esta instrucción intercambia el nibble alto con el bajo en el acumulador Ejemplo: SWAP A MOV A, # B SWAP A En este ejemplo se cambia el valor de A= por A = RL y RR (Rotation Left rotación a la izquierda Rotation Rigth- rotación a la derecha) Estas instrucciones desplazan al acumulador un bit a la izquierda o a la derecha respectivamente 31

33 RL A RLC A Ejemplo: MOV A, # B RL A ; Rotación a la izquierda A Antes de rotarlo RL A A Después de rotarlo Ejemplo: CLR C ; pone a cero la bandera de acarreo MOV A, # B RLC A ; Rotación a la izquierda RR A A Antes de rotarlo C = 0 Antes de la rotación RLC A A Después de rotarlo C = 1 después de la rotación Esta operación puede usarse para multiplicar un operando por dos Ejemplo: MOV A, # B RR A ; Rotación a la derecha RRC A A Antes de rotarlo RR A A Después de rotarlo RLC y RRC (Rotation Left with Carry rotación a la izquierda con acarreo y Rotation Rigth with Carry - rotación a la derecha con acarreo) Estas instrucciones desplazan al acumulador un bit a la izquierda o a la derecha respectivamente A diferencia de las instrucciones anteriores, también se ve involucrada en la operación de rotación la bandera de acarreo Ejemplo: CLR C ; pone a cero la bandera de acarreo MOV A, # B RRC A ; Rotación a la derecha A Antes de rotarlo C = 0 Antes de la rotación 32

34 RRC A A Después de rotarlo C = 1 después de la rotación Esta operación puede usarse para dividir entre dos un operando ADDC Existe la posibilidad de sumar con acarreo a través de la instrucción ADDC que mantiene las mismas reglas que ADD, sólo que en este caso la bandera de acarreo es considerada para realizar la suma, CY puede ser 1 ó 0 ADDC A, Fuente 52 INSTRUCCIONES ARITMÉTICAS Las instrucciones aritméticas permiten realizar las operaciones aritméticas básicas: suma, resta, división y multiplicación ADD Es una instrucción que ejecuta la suma de dos operandos, almacenando el resultado en el primer operando Esta instrucción sólo permite como destino al acumulador, y permite tener como segundo operando un registro, una dirección directa, una dirección indirecta (@Ri) ó un dato directo La instrucción de suma afecta las banderas del PSW (CY, AC, OV, P) Ejemplo: ADD A, Fuente MOV A, #E2H ;Carga un 226 decimal ;al acumulador MOV R1, #5FH ;Carga un 95 decimal a R1 ADD A, R1 ;Suma lo que hay en R1 a A El resultado de la operación con los datos de A y R1 es: A = R1= suma Al termino de la operación ADD el acumulador tendrá almacenado el valor 41H (sólo se cuentan los 8 bits de la derecha) y el estado del programa será: AC= 0 CY= 1 OV= 1 P= 0 Ejemplo: En este ejemplo se realizará una suma con operandos de 16 bits, que permitirá ejemplificar el uso de la instrucción ADDC MOV R1, #88H ;carga los 8 bits más significativos ;del primer operando MOV R2,#CAH ;carga los 8 bits menos ; significativos del primer ;operando MOV R3, #79H ;carga los 8 bits más significativos ;del segundo operando MOV R4,#ABH ;carga los 8 bits menos ; significativos del segundo ;operando MOV A, R2 ;carga la parte baja del primer ;operando al acumulador ADD A, R4 MOV R5, A ;Suma lo que hay en R4 a A ;es la suma de los 8 bits menos ;significativos ; y el resultado se coloca en R5 ;la bandera de acarreo tiene un 1 MOV A, R1 ;carga la parte alta del primer ;operando al acumulador ADDC A, R3 MOV R6, A ;Suma lo que hay en R3 a A ;es la suma de los 8 bits más ;significativos con CY=1 ; y el resultado se coloca en R6 Lo que se hace en ensamblador es lo siguiente: A=R2 = R4= suma

35 R5= , CY=1 CY= 1 A=R1 = R3= suma R6= , CY=1 La suma total sería el número binario: En formato hexadecimal sería : CAH +79ABH= 10275H SUBB (subtract with A from borrow- resta con préstamo) Esta instrucción permite restarle al acumulador el bit de acarreo y el operando considerado, guardando el resultado en el acumulador A<= A-C-<operando> SUBB establece la bandera de acarreo cuando en la resta se requiere un préstamo Debemos asegurar para una resta de 8 bits que la bandera de acarreo no esté en 1, ya que restará también ese contenido al acumulador junto con el operando En caso de que la resta sea con operandos de 16 bits el estado de la bandera de acarreo para la resta de los 8 bits más significativos dependerá de la resta de los 8 bits menos significativos Se aceptan como operandos fuente para esta instrucción un registro, una dirección directa, una dirección indirecta (@Ri) ó un dato directo mientras que sólo el acumulador puede ser usado como destino SUBB A, Fuente Esta instrucción afecta las banderas del PSW (CY, AC, OV, P) Ejemplo: En este ejemplo se realizará una resta con operandos de 16 bits, que permitirá ejemplificar el uso de la instrucción SUBB MOV PSW, #00H ;Se inicializa el carry (CY=0) MOV R1, #32H ;carga los 8 bits más significativos ;del primer operando MOV R2,#40H ;carga los 8 bits menos ; significativos del primer ;operando MOV R3, #53H ;carga los 8 bits más significativos ;del segundo operando MOV R4,#21H ;carga los 8 bits menos ; significativos del segundo ;operando MOV A, R2 ;carga la parte baja del primer ;operando al acumulador SUBB A, R4 MOV R5, A ;resta lo que hay en R4 a A ;es la resta de los 8 bits menos ;significativos con CY=0 ; y el resultado se coloca en R5 ;la bandera de acarreo tiene un 1 MOV A, R1 ;carga la parte alta del primer ;operando al acumulador SUBB A, R3 MOV R6, A ;resta lo que hay en R3 a A ;es la resta de los 8 bits más ;significativos con CY=0 ; y el resultado se coloca en R6 Lo que se hace en ensamblador es lo siguiente: A=R2 = R4= resta R5= , CY=0 A=R1 = R3= CY= 0 resta R6= , CY=1 La resta total sería el número binario: En formato hexadecimal sería : con CY=1 3240H -5321H= DF1FH con CY=1 34

36 MUL AB (Multiply A by B- Multiplica A por B) Esta instrucción es de 1 byte Su función es multiplicar el primer operando por el segundo, sólo son usados como operadores el registro B y el registro A El resultado es un número de 16 bits que es el doble de lo que acepta un registro, por lo que los 8 bits más significativos se guardan en B y los menos significativos se guardan en A Durante la operación se ven afectadas tres banderas del PSW : CY, OV y P Ejemplo: MOV A, #0AH MOV B, #0CH MUL AB END El resultado de este ejemplo es 78H, por lo que B se limpiaría y A mantendría el resultado (78H) DIV AB (Divide A by B- Divide A entre B) Esta instrucción es de 1 byte Su función es dividir el contenido del registro A entre el contenido del registro B Al finalizar esta instrucción el cociente es almacenado en A y el residuo en B Durante la operación se ven afectadas tres banderas del PSW : CY, OV y P DA A La instrucción DA es de 1 byte, esta instrucción sólo es usado con el acumulador Su función es ajustar el resultado binario, arrojado por las instrucciones ADD y ADDC, a un formato decimal (BCD) La instrucción DA no cambia el valor del resultado almacenado en A simplemente lo ajusta Cuando se tiene un valor mayor a 9 (tomando 4 bits, los 4 menos significativos y los 4 más significativos) se le suma un 6 dado que en formato BCD sólo son válidos los valores del 0 al 9 53 INSTRUCCIONES INC Y DEC Las instrucciones INC y DEC utilizan un operando, dichas instrucciones incrementan (INC) o decrementan (DEC) el operando en uno Ellas pueden actuar sobre algún byte de RAM interna o uno de SFR, y usan alguno de los modos de direccionamiento vistos hasta ahora: direccionamiento indirecto, al acumulador, al registro y directo Veamos algunos ejemplos: INC A Aumenta en uno el dato que se encuentre almacenado en el acumulador; es una instrucción de 1 bytes Ejemplo: MOV A, #12H MOV B, #0EH DIV AB END INC 40 Aumenta en uno el dato contenido en la dirección 40 de la RAM interna; es una instrucción de 2 bytes INC R0 Aumenta en uno el contenido de R0; es una instrucción de 1 byte Aumenta en uno el dato direccionado por el contenido de R0; también es una instrucción de un byte El resultado de este ejemplo es 01H, entonces B tendría un 04H y A mantendría el resultado (01H) 35

37 54 INSTRUCCIONES SOBRE BITS INDIVIDUALES El CC1010 maneja algunas instrucciones que permiten manipular bits individualmente Estos bits pueden ser manipulados con operaciones lógicas (OR, AND), operaciones de movimiento de datos (MOV) y algunas otras como activarlos (ponerlos a 1) o desactivarlos (ponerlos a 0) Para mover los valores de bits de uno a otro se utiliza, igual que para los registros, la instrucción MOV Esta instrucción permite mover bits específicos desde y hacia el bit de acarreo: Ejemplo: MOV P26, C En este caso el valor de la bandera de acarreo se mueve al bit 6 del puerto 2 Ejemplos: CPL SETB C SETB bit ; pone a 1 la bandera de acarreo SETB P35 ; pone a 1 el bit 5 del puerto 3 Esta instrucción obtiene el complemento del bit indicado Ese bit puede ser la bandera de acarreo o cualquier otro bit permitido por el CC1010 Ejemplos: CPL C CPL bit CPL C ; Si la bandera de acarreo es 1, cambia a 0 CPL P21 ; Si P21 0, cambia a 1 CLR Esta instrucción pone en cero el contenido del bit usado como operando Ese bit puede ser la bandera de acarreo o cualquier otro bit permitido por el CC1010 Ejemplos: SETB CLR C CLR bit CLR C ; pone a cero la bandera de acarreo CLR P12 ; pone a cero el bit 2 del puerto 1 Esta instrucción activa el bit indicado, es decir lo pone a 1 Ese bit puede ser la bandera de acarreo o cualquier otro bit permitido por el CC1010 SETB C ANL La instrucción ANL es usada también para realizar la operación AND sobre bits Sólo es posible ejecutar la operación AND sobre bits cuando se usa como destino el bit de acarreo Ejemplo: ANL C, bit SETB C ; Pone a 1 la bandera de acarreo CLR P12 ; Limpia el bit P12 ANL C, P12 En este caso la bandera de acarreo cambiará de 1 a 0, porque se realiza la operación AND con el bit P12 que es 0 Asimismo en el CC1010 es posible complementar al bit fuente para ejecutar la operación AND 36

38 Ejemplo: ANL C, /bit SETB C ; Pone a 1 la bandera de acarreo CLR P12 ; Limpia el bit P12 ANL C, /P12 Ahora se realiza la operación AND con el complemento del valor de P12, es decir en este caso se realiza la operación con C = 1 y P12 = 1, ya que el bit P12 = 0 originalmente, pero con la instrucción /P12 es el equivalente a P12 = 1 ORL Esta instrucción realiza la operación OR entre los bits indicados, sólo es posible ejecutar esta operación cuando el bit destino es el bit de acarreo Ejemplo: ORL C, bit SETB C ; Pone a 1 la bandera de acarreo CLR P12 ; Limpia el bit P12 ORL C, P12 En este caso la bandera de acarreo no cambiará 55 SALTOS VERIFICANDO BITS JB (Salta si el bit está a 1) JB es una instrucción de 3 bytes Ésta efectúa un salto relativo si el bit que se indica es igual a 1, de otra manera el programa continúa con la secuencia de instrucciones JB Ejemplo: bit, rel COM: SETB P13 JB P13, DES DES: CLR P13 AJMP COM En este caso el bit 3 del puerto 1 se pone a uno con la instrucción SETB, entonces con la instrucción JB se verifica si está a uno y se realiza un salto a la etiqueta DES, después el bit se pone a cero y se realiza un salto incondicional a la etiqueta COM JNB (Salta si el bit no es 1) JNB es una instrucción de 3 bytes Ésta efectúa un salto cuando el bit usado como operando es igual a 0, de otra manera el programa continúa con la secuencia de instrucciones Asimismo en el CC1010 es posible complementar al bit fuente para ejecutar la operación OR Ejemplo: ORL C, /bit SETB C ; Pone a 1 la bandera de acarreo CLR P12 ; Limpia el bit P12 ORL C, /P12 En este caso la bandera de acarreo no cambiará Ejemplo: JNB bit, rel OTRO: CLR P13 JNB P13, AP AP: SETB P13 AJMP OTRO 37

39 JBC JBC es una instrucción de 3 bytes Esta instrucción efectúa un salto cuando el bit inmediato es igual a 1 y lo pone a 0, de lo contrario si el bit inmediato es 0 el programa continúa con la secuencia de instrucciones Ejemplo: JBC bit, rel SE: SETB P13 JBC P13, SE Entonces observemos que a diferencia del ejemplo anterior (con la instrucción JNB) ya no hay necesidad de usar dos instrucciones (poner a 1 y poner a 0) por que la instrucción JBC se encarga de eso 56 INSTRUCCIÓN NOP La instrucción NOP es de 1 byte Su función es solamente mantener un pequeño retardo cuando se ejecuta un programa La instrucción NOP sólo necesita un ciclo de máquina para ejecutarse Se puede utilizar en el código cuantas veces se desee 38

40 57 PROGRAMA DE EJEMPLO Como programa de ejemplo generaremos un Código de Redundancia Cíclica (CRC) El CRC es usado en las comunicaciones para verificar si ha existido o no algún error en el tratamiento de la información El CRC utiliza un polinomio de grado r (r es el número de bits menos uno <n-1>) llamado generador Los coeficientes del polinomio representan los bits de datos, estos bits serán utilizados para calcular otro conjunto de r bits llamado CRC que se le anexa a los bits del mensaje que será enviado Cuando el receptor recibe los bits de datos, con todo y CRC, verifica el mensaje utilizando el mismo polinomio generador Si el mensaje recibido no es divisible entre el polinomio generador entonces ha ocurrido un error de lo contrario se ha recibido satisfactoriamente El CRC se calcula de la siguiente manera: Por ejemplo para el siguiente mensaje M = y el polinomio P = (6 bits), utilizando una redundancia de 5 bits R = de 5 bits El mensaje M se multiplica por 2 5, resultando , el resultado anterior se divide en base 2 por el polinomio P: mensaje listo para ser enviado El pseudocódigo es el siguiente: Inicio M=Mensaje*2 R ; P=Polinomio*2 5 ; PARA i DESDE 1 HASTA P=Polinomio HACER Inicio M=XOR(M, P) ; Fin Recorre_Derecha(P); M_Final=Mensaje+M; Fin El código es el siguiente: ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;:::::: CALCULO DE UN CRC ::::::::::::::::::::: ORG 00H ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;:::::::::::: INICIALIZA REGISTROS ::::::::::::: MOV R1, # B;El generador sera el polinomio ;x2+x+1 MOV R2, # B ;Mensaje original a ser ;transmitido MOV R3, # B ; 2 a la r con r=3 bits de ;redundancia ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;::::::::::::::::: CALCULA EL CRC :::::::::::::::::: Cuando se realiza una división en base 2, el polinomio se va recorriendo hacia la derecha y en cada recorrido se realiza la operación XOR con el mensaje y su redundancia de tal forma que cuando se haya recorrido por completo el polinomio, el resultado de la ultima operación (el residuo de la división) será el CRC, que se le agrega al mensaje sumándolo para obtener el MOV A, R2 ;Multiplica el mensaje original por 2 a la 3 MOV B, R3 ;que equivale a en binario y el MUL AB ;resultado lo guarda en R4, este resultado es MOV R4, A ;el mensaje original y la redundancia ;juntos MOV A, # B ;Se invierten los bits del ;polinomio MOV B, R1 ; para hacer la operacion MUL AB ;or-exclusiva con el mensaje MOV R5, A MOV A, R4 39

41 CICLO: XRL A, R5 MOV B, A MOV A, R5 RR A MOV R5,A MOV A, B ;Se realiza la operacion or-exclusiva ;El polinomio se recorre a la derecha CJNE R5, # B, CICLO MOV B, A MOV A, R4 ;Devuelve al acumulador el valor del mensaje ;original con los bits de redundancia ADDC A, B ;El CRC esta en B, y se le suma a este ;mensaje quedando el mensaje listo para ser ;transmitido , el CRC es 101 END ;fin del programa 40

42 58 EJERCICIO PROPUESTO: 1- El código de paridad es usado en las comunicaciones para identificar errores, de acuerdo a la paridad, cuando se envía una secuencia de bits (mensaje) Desarrollar un programa de paridad par, que permita identificar si un grupo de 7 bits es par o impar Asimismo el programa debe añadir el bit de paridad par de acuerdo a la paridad de los 7 bits Los 7 bits deben estar almacenados en memoria 41

43 42

44 61 QUÉ SON LAS SUBRUTINAS? Las subrutinas permiten al programa tener una estructura más simple al permitir que piezas de código que ejecutan la misma función no sean repetidas Cada subrutina (o módulo) pertenece a un código o programa principal, este último tiene control sobre las subrutinas y las puede invocar en cualquier parte del mismo Una vez que se ejecutó la subrutina, regresa el control a la parte del código desde donde se invocó Así, la llamada a una subrutina es semejante a un salto a la dirección de inicio de la misma con la dirección de retorno almacenada de alguna forma Las subrutinas son usadas básicamente para el ahorro de código, ya que una vez formada la subrutina no es necesario volverla a escribir a lo largo del código, simplemente se invoca las veces que sean necesarias Asimismo, la modularidad introducida por el uso de subrutinas permite desarrollar un programa menos complejo La pila juega un papel muy importante en la ejecución de subrutinas ya que las direcciones de retorno son automáticamente almacenadas en ella 62 LLAMADAS A SUBRUTINAS CALL (Llamada a subrutina) Cuando un programa ejecuta la instrucción CALL es almacenada en la pila la dirección de la siguiente instrucción y el PC es cargado con la dirección de inicio de la subrutina A partir de esa dirección se sigue ejecutando el programa hasta que la subrutina termina y regresa el control al programa principal En ese caso el PC es cargado con la dirección previamente almacenada en la pila y la siguiente instrucción a la instrucción CALL es ejecutada Existen para la llamada a subrutina dos mnemónicos que son LCALL, ACALL, LCALL (Llamada larga a subrutina) LCALL es una instrucción de 3 bytes, donde el destino puede ser cualquier lugar en la memoria de programa Es parecido a un LJMP, con la diferencia que LCALL regresa a la dirección guardada en la pila Cuando se usa esta instrucción la pila es incrementada en 3 bytes, cargando la dirección actual en el PC LCALL addr _16 ACALL (Llamada absoluta a subrutina) ACALL es una instrucción de 2 bytes, esta instrucción permite llamadas a subrutinas sólo dentro de un bloque de 2KB Esta instrucción es parecida a un AJMP con la gran diferencia que ACALL regresa a la dirección guardada en la pila ACALL addr_11 RET (Retorno de subrutina) Cuando se usa la instrucción RET, se decrementa en 2 bytes la pila para recuperar la dirección en la que se invocó la subrutina, la cual será cargada en el PC, para continuar la secuencia del programa En general el ensamblador se encargará de usar la instrucción correcta dependiendo de la localización relativa de la subrutina con respecto al punto de invocación 63 PARÁMETROS PARA SUBRUTINAS Las rutinas son más poderosas cuando es posible hacer que éstas trabajen con diferentes conjuntos de datos o parámetros 43

45 Un parámetro es cualquier dato enviado del programa principal a una subrutina para ser manipulado Este dato puede ser un valor El paso de parámetros se hace guardando el parámetro en alguna localidad de la RAM interna o de la RAM externa, siendo esta última poco recomendable ya que el acceso a ella es lento, por supuesto que la subrutina puede acceder a dichas localidades para recuperar el parámetro y usarlo para los fines que se le hayan sido encomendados Cuando se ejecuta una subrutina, los datos necesarios para seguir ejecutando el programa deben ser guardados en la pila Por ejemplo si el registro R1 es usado en el programa principal y hay llamadas a subrutinas, y estas últimas necesitan almacenar datos en R1, sería más conveniente guardar los contenidos de los registros a usar dentro de la subrutina a hacerlo afuera, lo que permitiría optimizar el tamaño del código 64 BANCO DE REGISTROS Las rutinas pueden usar eficientemente los bancos de registros para pasar datos, seleccionando entre los cuatro bancos de registros que tiene el CC1010 numérico o una dirección que contiene la información deseada Los bancos de registros permiten a una subrutina guardar o extraer de ellos datos que son usados durante la ejecución del programa, de una manera más ordenada, ya que al ser 4 bancos con 8 registros cada uno es equivalente a tener 32 registros El banco de registros es seleccionado por dos bits (RS0 y RS1) del registro PSW El banco usado por defecto es el banco 0 La siguiente tabla (Tabla 41) muestra la relación que guarda el banco de registro con su localización BANCO DE REGISTRO RS1 RS0 LOCALIZACIÓN Bank x00-0x07 Bank x08-0x0F Bank x10-0x17 Bank x18-0x1F Tabla 41- Muestra la relación de los bancos de registro con su dirección 44

46 65 PROGRAMA DE EJEMPLO Se realizará un programa que usando subrutinas realice el cálculo del factorial de un número y la secuencia de fibonacci El programa realiza el cálculo del factorial para un número que en este caso será máximo 5 utilizando una subrutina que realiza este cálculo y otra que inicializa los registros necesarios, el programa valida el número para el caso del factorial de tal forma que si este es mayor a 5 no calcula el factorial El pseudocódigo para el factorial es el siguiente: Si (n<=5) Entonces fact := 1; PARA i DESDE 1 HASTA n HACER fact := fact * i; FIN FIN éste es de forma iterativa y se detendrá cuando se haya llegado a n, que es el valor al que se le calculará el factorial En el caso de la secuencia de fibonacci el pseudocódigo es el siguiente: fib_menor := 1; fib_mayor := 1; PARA i DESDE 2 HASTA n HACER Inicio aux := fib_menor; fib_menor := fib_mayor; fib_mayor := aux + fib_mayor; fib_n := fib_mayor; Fin Recordemos que la secuencia de fibonacci se define como sigue: 1 si n 1 Fibonacci ( n) = Fibonacci( n 1) + Fibonacci( n 2) ;*********************************************** ;*********** CALCULA FACTORIAL ************* ;********** Y SECUENCIA FIBONACCI ********** ORG 00H JMP INICIA ;*********************************************** ;********** INICIALIZA REGISTROS ************ INICIALIZA: MOV R1, #00 MOV R3, #00 MOV R5, #00 MOV B, #00 MOV A, #00 CLR C ;Se limpia la bandera de acarreo RET ;RETORNO AL AL LUGAR DONDE FUE INVOCADA ;*********************************************** ;**************** FACTORIAL ****************** FACTORIAL: MOV R5, 40H ;Valida el número para que CJNE R5, #05, VALIDA ;sea menor a 5 JMP MENOR VALIDA: JC MENOR ;Si es diferente pero menor a 5 JMP FIN ;continua, de lo contrario se sale MENOR: CALL INICIALIZA ;Se invoca la subrutina ;que inicializa los registros MOV R2, #01 OTRA: INC R1 MOV A, R2 MOV B, R1 MUL AB MOV R2, A MOV A, R1 CJNE A, 40H, OTRA ;Se cargan los valores en ;registros para ser multiplicados ;El resultado es respaldado en R2 FIN: SETB C ;Activa la bandera de acarreo ;indicando que el numero es mayor a 5 RET ;RETORNO AL AL LUGAR DONDE FUE INVOCADA El código es el siguiente: 45

47 ;*********************************************** ;**************** FIBONACCI ****************** FIBONACCI: CALL INICIALIZA ;Se invoca la subrutina ;que inicializa los registros MOV 20H,#01 MOV 21H,#01 ;se inicializan las primeras dos ;posiciones del arreglo utilizado MOV R0, #20H MOV R1, #21H FIBO: INC R3 MOV MOV ADD A, B MOV R4, A INC R0 INC R1 A MOV A, R3 ADD A, #02 CJNE A, 40H, FIBO ;Se inicializan los punteros en ;las dos primeras posiciones del ;arreglo ;Se realiza la suma de los números ;anteriores para obtener el siguiente ;de la secuencia ;Es almacenado el nuevo número en el ;arreglo RET ;RETORNO AL LUGAR DONDE FUE INVOCADA ;*********************************************** ;**************** PRINCIPAL ******************* INICIA: MOV 40H, #04 CALL FACTORIAL MOV 40H, #10 CALL FIBONACCI END ;Este es el valor al cual se ;le obtiene el factorial ;Se invoca la subrutina que ;calcula el factorial ;Se carga la cantidad de ;números en la secuencia ;Se invoca la subrutina que ;calcula la secuencia y la ;guarda en el arreglo 46

48 66 EJERCICIO PROPUESTO: Diseñar un programa en ensamblador que realice, usando subrutinas, la secuencia del juego de las Torres de Hanoi para 3 discos Como el juego es para 3 discos entonces deben hacerse 2 3-1=8-1=7 movimientos Las torres pueden ser definidas en espacios de memoria o en registros 47

49 48

50 71 QUÉ ES UN PUERTO? El puerto de un microcontrolador es una interfaz que permite el intercambio de datos entre el microcontrolador y algún otro sistema que genere información digital (una computadora, periféricos, otros microcontroladores, etc) En los microcontroladores existen dos formas de intercambio de datos, la transmisión de datos puede ser en serie o en paralelo La comunicación serial permite que a través de una sola entrada (pin) se pueda transmitir o recibir datos de forma secuencial, o en otras palabras bit por bit La segunda permite transmisión o recepción de bits simultáneos, es decir se hace en bloque teniendo la misma cantidad de entradas (pines) 72 PUERTO PARALELO El CC1010 consta de 4 puertos de E/S de propósito general, con 8 bits cada uno La estructura del puerto paralelo del CC1010 con respecto al 8051 estándar es diferente, ya que los bits de los puertos no están localizados juntos en el diagrama de pines del CC1010, debido a la ruptura de la secuencia entre ellos, asimismo cada puerto del CC1010 tiene asociados dos registros, un registro para recibir o enviar datos de 8 bits y otro registro para configurar cada uno de sus pines como entrada (recepción de datos) o salida (transmisión de datos) Solamente los puertos 1 y 2 pueden enviar o recibir datos de 8 bits de forma paralela El microcontrolador ha reservado los bits del 4 al 7 del puerto 0 como pines de lectura, estos pines sólo son de lectura, mientras que los bits del 0 al 3 son utilizados para lectura y escritura Los bits del 0 al 2 tienen una función adicional la cual está descrita en la Tabla71 Fig 71 Transmisión ó recepción en serie P0X Función alternativa 0 SCK; reloj serial para SPI MO, SI; salida de reloj maestro, 1 entrada de reloj esclavo, para SPI respectivamente MI, SO; entrada de reloj 2 maestro, salida de reloj maestro, para SPI respectivamente Tabla 71- Funciones alternativas de los bits 0 al 2 del P0 Fig 72 Transmisión ó recepción en paralelo En el contexto de este tutorial se discutirá como se pueden intercambiar datos a través del puerto paralelo En el puerto 1 (P1) todos los bits del 0-7 son bidereccionales, es decir que son de lectura/escritura y no tiene funciones alternativas En el puerto 2 (P2) todos los bits del 0-7 son bidireccionales En este puerto también se cuenta con funciones alternativas que se muestran en la Tabla 72: 49

51 P2X Función alternativa RXD1; Recepción del puerto serial 0 1 TXD1; Transmisión del puerto 1 serial 1 Tabla 72- Funciones alternativas de los bits 0, 1 del P2 En el puerto 3 (P3) sólo los bits del 0 5 son bidireccionales El microcontrolador ha reservado el bit 6 y 7 como de sólo lectura En este puerto al igual que en el puerto P0 y P2 algunos de los pines están ligados a funciones alternativas Dichas funciones se detallan en la Tabla 73: P3X 0 1 Función alternativa RXD0; Recepción del puerto serial 0 TXD0; Transmisión del puerto serial 0 2 INT0; Interrupción externa 0 3 INT1; Interrupción externa T0; Contador de entrada al timer 0 ó PWM2; Modulación PWM a la salida del timer 2 T1; Contador de entrada al timer 1 ó PWM3; Modulación PWM a la salida del timer 3 Tabla 73- Funciones alternativas de los bits 0 al 5 del P3 Los puertos 2 y 3 manejan la comunicación serial, dado que en éstos se reservan 4 bits (2 en cada puerto) de transmisión y recepción serial, que son controlados por medio de los registros SCON0 y SCON1 73 ACCESO AL PUERTO Cada uno de estos puertos, puede ser accedido fácilmente a través de los registros P0, P1, P2 y P3 de la RAM interna Asimismo es posible manipular cualquier bit de los puertos(a excepción de los bits reservados en el puerto 0 y el puerto 3), indicando el puerto y el número del pin deseado Ejemplo: CLR P12; En este caso se está limpiando el pin 2 del Puerto 1 Para poder utilizar cualquiera de los puertos, cada uno de sus pines debe ser configurado como de entrada o salida Esto se puede hacer con la instrucción SETB PXY (X=0,1,2,3,4 e Y=0,1,2,3,4,5,6,7) o MOV PXY, C (donde C=1) para configurarlo como salida y usando la instrucción CLR PXY o MOV PXY, C (donde C=0) cuando se desee configurar como entrada (Tabla 74) Puerto Dirección 0 P0DIR (0xA4) 1 P1DIR (0xA5) 2 P2DIR (0xA6) 3 P3DIR (0xA7) Tabla 74- Direcciones de los puertos del CC1010 La habilitación de los bits depende de cada puerto, ya que como se vio anteriormente algunos puertos tiene bits que son reservados y que no se pueden utilizar, mientras que para los demás se puede mandar un cero o un 1 a cada bit dependiendo de si se quiere para escritura o lectura respectivamente 50

52 Ejemplo: MOV 0A5H, #00H; Se habilita el puerto 1 MOV A, #05H; El acumulador es cargado con 5 LOOP: MOV P1, A ; Se despliega el número en el puerto 1 DEC A ; Se decrementa en 1 el valor de A JNZ LOOP ; Brinca si A no es cero En el ejemplo anterior, se puede observar que se está habilitando el puerto 1 como un puerto de salida y el acumulador es cargado con el valor 5 para ser decrementado hasta que sea cero El resultado de esta operación es enviado al puerto P1 51

53 74 PROGRAMA DE EJEMPLO Para este ejemplo se utilizará un display o exhibidor de 16x2 (AND 491), es decir 16 caracteres por 2 líneas, el cual tiene las siguientes terminales: TERMINAL SEÑAL FUNCION 1 GND Tierra 2 VDD 5 Volts 3 V0 Contraste 4 RS 5 R / W 6 E 7 DB0 RS=1 Entrada de dato RS=0 Entrada de control R/W=1 Lectura R/W=0 Escritura Señal de Habilitación Bit menos significativo 8 DB DB2 DB6 14 DB7 Bit más significativo El display fue conectado al CC1010 de la siguiente forma: Bus de datos del LCD (Terminal 7 a 14) en Puerto 1 Enable Terminal 6 del LCD al puerto 2 pin 4 RS Terminal 4 del LCD al puerto 2 pin 5 WR Terminal 5 del LCD a tierra Terminal 1 del LCD tierra Terminal 2 del LCD a + 5 voltios Terminal 3 del LCD luminosidad con resistencia variable (100Khoms) Este programa despliega un mensaje en el display vía el puerto 1, y utiliza el puerto 2 como salida de las señales de habilitación del display para lectura y escritura Para configurar el LCD es necesario que la Terminal 4 (RS) del mismo este a cero y que exista un flanco negativo en la Terminal 6 (Enable) del LCD, para que los comandos sean leídos del bus por el LCD, para esto se pone a uno la Terminal 6 (Enable) y después de cierto tiempo (aproximadamente 1 msegundo) se cambia a cero para que exista un flanco negativo que es el que activa la lectura de los comandos en el LCD, y para que se desplieguen mensajes en el LCD se necesita que la Terminal 4 (RS) sea 1, utilizando la Terminal 6 (Enable) de la misma forma para que sean desplegados lo carateres que se le manden Es importante que haya un retardo entre cada instrucción, ya que estas instrucciones requieren de 40µs a 1ms para ser procesadas por el display El retardo utilizado en este ejemplo es de aproximadamente 1 ms y fue calculado utilizando el método mencionado anteriormente en este tutorial con un cristal de MHz El código es el siguiente: ;P24 PAT 14-ENABLE Se activa por flanco negativo para comandos y escritura ;P25 PAT 11-RS RS= 0 comando, RS= 1 dato ;************************************ ;********** MANEJO DE LCD *********** ORG 00H JMP INICIA ;************************************ ;********* RETARDO PARA LCD ********* RETARDO: MOV R3,#5 MOV R2,#198 RETAR: DJNZ R2,RETAR DJNZ R3,RETAR RET ;************************************ ;********* INICIALIZA LCD *********** INILCD: 52

54 CLR P25 ;RS a cero para comando CALL ENABLE MOV P1,#0CH ;ENCIENDE DISPLAY CURSOR ON CALL ENABLE ;escribe palabra de control MOV P1,#38H ;8 BITS, 2 LINEAS, 5x7 PUNTOS CALL ENABLE ;escribe palabra de control MOV P1,#01H ;BORRA PANTALLA CALL ENABLE ;escribe palabra de control MOV P1,#06H ;ESCRIBE HACIA LA DERECHA CALL ENABLE ;escribe palabra de control MOV P1,#80H ;ESCRIBE EN LA PRIMER LINEA CALL ENABLE ;escribe palabra de control CALL BLANCO MOV P1, #4FH ;CODIGO DE CARACTER " O " CALL ENABLE CALL BLANCO MOV P1, #4CH ;CODIGO DE CARACTER " L " CALL ENABLE CALL BLANCO MOV P1, #41H ;CODIGO DE CARACTER " A " CALL ENABLE CALL BLANCO RET ;*********************************** ;***** PINTA ESPACIO EN BLANCO ***** BLANCO: MOV P1, #0A0H ;CODIGO DE CARACTER ESPACIO EN BLANCO CALL ENABLE ;escribe palabra de control RET ;*********************************** ;********* HABILITACION ************ ;********* ESCRITURA ************ ENABLE: SETB P24 ;CAMBIA DE 1 LOGICO CALL RETARDO ;A CERO LOGICO CLR P24 ;FLANCO NEGATIVO RET ;*********************************** ;********** PINTA COMILLAS ********* COMILLAS: MOV P1, #22H ;CODIGO DE CARACTER ( " ) CALL ENABLE ;escribe palabra de control RET ;*********************************** ;********** PRINCIPAL ************** INICIA: MOV 0A5H, #00H ;Habilita el puerto 1 MOV 0A6H, #00H ;Habilita el puerto 2 CALL INILCD SETB P25 CALL BLANCO CALL BLANCO ;Llama a subrutina que inicializa lcd ;RS a 1 para datos ;Deja dos espacios ;en blanco CALL COMILLAS ;Pinta comillas CALL BLANCO CALL COMILLAS CLR P25 ;RS a cero para comando MOV P1,#0C0H ;Cambio de linea (linea 2) CALL ENABLE SETB P25 CALL BLANCO CALL BLANCO CALL BLANCO ;RS a 1 para datos MOV P1, #42H ;CODIGO DE CARACTER " B " CALL ENABLE MOV P1, #49H ;CODIGO DE CARACTER " I " CALL ENABLE MOV P1, #45H ;CODIGO DE CARACTER " E " CALL ENABLE MOV P1, #4EH ;CODIGO DE CARACTER " N " CALL ENABLE MOV P1, #56H ;CODIGO DE CARACTER " V " CALL ENABLE MOV P1, #45H ;CODIGO DE CARACTER " E " CALL ENABLE MOV P1, #4EH ;CODIGO DE CARACTER " N " CALL ENABLE MOV P1, #49H ;CODIGO DE CARACTER " I " CALL ENABLE MOV P1, #44H ;CODIGO DE CARACTER " D " CALL ENABLE MOV P1, #4FH ;CODIGO DE CARACTER " O " CALL ENABLE LOOP: NOP JMP LOOP MOV P1, #48H ;CODIGO DE CARACTER " H " END ;Fin de programa 53

55 75 EJERCICIO PROPUESTO: Diseñe una calculadora con las 4 operaciones básicas (suma, resta, multiplicación y división), utilizando las instrucciones hasta ahora vistas, el programa deberá utilizar al puerto 1 para leer los datos a manipular, éstos serán datos de máximo 4 bits Se utilizará el puerto 3 como entrada de la selección de la operación (suma, resta, multiplicación o división) utilizando los cuatro bits menos significativos de tal forma que cuando se lea un 1 se hará la suma, con un dos la multiplicación, con un tres la división y con un cuatro la resta El resultado será desplegado cuando el bit más significativo de los cuatro menos significativos, es decir el cuarto bit del puerto 3 sea 1, y el resultado será desplegado en dos displays de siete segmentos vía el puerto 2 En el caso de la resta no es necesario dar resultados negativos y en la división sólo se requieren resultados enteros La siguiente figura muestra el diseño para la conexión del los displays de siete segmentos a la salida del puerto: Para la entrada de los datos al puerto 1 se utilizará un dip-switch de 8 bits, como lo muestra la siguiente figura: 54

56 Y de la misma forma para el puerto 3, pero con un dip-switch de cuatro bits como se muestra en la figura: 55

57 56

58 81 QUÉ ES UNA INTERRUPCIÓN? Las interrupciones son utilizadas para atender eventos extemporáneos cuya aparición es difícil o imposible de predecir en la secuencia de código que el microcontrolador debe ejecutar Una vez que este proceso es terminado el CPU vuelve al programa principal continuando su trabajo justo donde se quedó, sólo que con un retardo en tiempo Las interrupciones pueden INTERRUPCIÓN PRIORIDAD NATURAL CONTROL DE PRIORIDAD ocurrir en cualquier instante de tiempo, por lo que se requiere tener mucho cuidado en el manejo de éstas El CC1010 contiene un total de 15 interrupciones que permiten manejar eventos generados dentro del microcontrolador a través de alguno de sus periféricos o bien para atender eventos generados fuera del microcontrolador Estas interrupciones se muestran en la Tabla 81 VECTOR DE INTERRUPCIÓN HABILITACIÓN DE INTERRUPCIÓN BANDERA DE INTERRUPCIÓN Interrupción Flash / Debug 0-0x33 EICONFDIE EICONFDIF Interrupción Externa 0 1 IPPX0 0x03 IEEX0 TCONIE0 (*) Interrupción del Timer 0 2 IPPT0 0x0B IEET0 TCONTF0 (*) Interrupción Externa 1 3 IPPX1 0x13 IEEX1 TCONIE1 (*) Interrupción del Timer 1 4 IPPT1 0x1B IEET1 TCOMTF1 (*) Interrupción de Transmisión del Puerto Serial 0 Interrupción de Recepción del Puerto Serial 0 Interrupción de Transmisión del Puerto Serial 1 Interrupción de Recepción del Puerto Serial 1 Interrupción de Transmisión / Recepción de RF SCON0TI_0 5 IPPS0 Ox23 IEES0 SCON0RI_0 SCON1TI_1 6 IPS1 0x3B IEES1 SCON1RI_1 7 EIPPRF 0x43 EIERFIE EXIFRFIF Interrupción del Timer 2 8 EIPPT2 0x4B EIEET2 EXIFTF2 Interrupción ADC Interrupción de Encriptación/ Desencriptación DES 9 EIPPAD 0x53 EIEADIE and ADCON2ADCIE EIEADIE and CRPCONCRPIE EXIFADIF and ADCON2ADCIF EXIFADIF and CRPCONCRPIF Interrupción del Timer 3 10 EIPPT3 0x5B EIEET3 EXIFTF3 Interrupción del Reloj de Tiempo Real 11 EIPPRTC 0x63 EIERTCIE EICONRTCIF Tabla 81- Interrupciones del CC Tabla 81 tomada del datasheet del CC1010 (descarga wwwchipconcom), propiedad de Texas Instrument Copyright Texas Instruments Incorporated 57

59 82 POR QUÉ SE DEBE O SE PUEDE ENMASCARAR UNA INTERRUPCIÓN? Una interrupción se dice que es enmascarable cuando es posible ignorar ésta sin que se vea de alguna forma afectado el curso normal del programa en ejecución Al ocurrir una o más interrupciones, el microcontrolador debe atenderlas una por una y la única forma de llevar a cabo esto es a través del enmascaramiento de interrupciones Esto es necesario para preservar el control del sistema cuando existen varias interrupciones en espera de ser atendidas por el microcontrolador El registro IE permite habilitar o deshabilitar todas las interrupciones, excepto la interrupción Flash / Debug, ya que ésta tiene su bit de mascara de interrupción (EICONFDIE) Cuando el bit 7 del registro IE (EA, ver Tabla 81) está deshabilitado todas las interrupciones son deshabilitadas excepto la interrupción Flash / Debug, y cuando el bit está activo las interrupciones son habilitadas de acuerdo a sus bits de enmascaramiento individual, es decir por los otros 7 bits del registro IE Cuando se requiere atender una interrupción lo que se hace es enmascarar el registro (IE) de tal manera que sólo quede el bit de la interrupción a atender y el bit 7, quedando deshabilitadas las otras interrupciones 83 REGISTROS CONTROLADORES DE INTERRUPCIÓN IE (Interrupt Enable Register Registro de Habilitación de Interrupción) Como ya se mencionó antes el registro IE nos permite habilitar o deshabilitar las interrupciones del CC1010, interrupciones internas, externas y del puerto serial EIE (Extended Interrupt Enable Register Registro Extendido de Habilitación de Interrupción) El registro EIE permite activar o desactivar las demás interrupciones debido a que el registro IE no es suficiente para las 15 interrupciones En el caso del 8051 estándar, sólo se manejan 5 interrupciones, esa es otra gran diferencia con el CC1010 EICON (Extended Interrupt Control Control Extendido de interrupción) Controla las interrupciones que faltan de las 15 que tiene el CC1010 En este registro se activan banderas de interrupción mencionadas en la Tabla 81 Este registro tiene la opción de ser activado por software a través de la instrucción TRAP que permite activar la bandera FDIF que permite al microcontrolador atiender la interrupción de más alta prioridad EXIF (Extended Interrupt Flag Bandera Extendida de Interrupción) El registro EXIF contiene las demás banderas utilizadas para las interrupciones TCON (Timer Control Controlador del timer 0 y timer 1) El TCON también controla las interrupciones externas 0 y 1 de tal forma que estas interrupciones se pueden configurar para ser activadas por flanco negativo (Fig 81a) o por nivel (Fig 81b) cuando se detecta un nivel bajo 58

60 resueltas a través de su prioridad natural La interrupción que tiene la prioridad natural más baja debe ser atendida primero (a) (b) Fig 81- (a) Cambio por flanco negativo (b) Cambio por nivel 84 PRIORIDAD DE INTERRUPCIÓN Cuando se habla de la prioridad de una interrupción, se refiere a que interrupción debe atenderse primero, ya que el microcontrolador no puede atender todas al mismo tiempo En el CC1010 el servicio a la interrupción se elige tomando en cuenta dos prioridades: nivel de interrupción y prioridad natural, debido a que puede existir dos o más interrupciones con el mismo nivel de prioridad, el microcontrolador toma la decisión de atención (a la interrupción) debido a la prioridad natural de cada una ( que es única) Existen tres niveles de interrupción (bajo, alto o más alto) y estos se deben tomar en cuenta antes de la prioridad natural La segunda columna de la Tabla 81, muestra las prioridades naturales de cada interrupción, éstas van de la 0 a la 11 y entre más pequeño sea el número más prioridad natural tienen Por ejemplo cuando la interrupción Flash /Debug, está habilitada, siempre tiene la más alta prioridad A todas las otras interrupciones se les puede asignar una baja o alta prioridad, activada por los registros IP y EIP Una vez que una interrupción está siendo atendida, solamente una interrupción de nivel de prioridad más alto puede interrumpir la rutina actual de servicio atendida La tabla anterior (Tabla 81) nos permite conocer la programación de cada uno de los registros para habilitar/deshabilitar y atender a cada una de las interrupciones, de acuerdo a su prioridad 85 PASOS PARA LA ATENCIÓN A INTERRUPCIONES Cuando se escribe una subrutina de atención a interrupción (llamada también rutina de servicio de interrupción ISR), lo que se debe hacer primero es poner el vector de interrupción de la misma (Ver Tabla 81), enseguida se coloca una instrucción JMP a la localidad de memoria donde se encuentra la rutina de atención a la interrupción Al final del código de la subrutina de interrupción se debe colocar la instrucción RETI La instrucción RETI permite regresar de la subrutina de interrupción, la diferencia con la instrucción RET es que esta instrucción llama al control de interrupciones y si no hay otra interrupción que atender funciona como una instrucción RET, de lo contrario atiende a la siguiente interrupción dependiendo de la prioridad de la misma, esta instrucción es de 1 byte y se ejecuta en 4 ciclos de instrucción, además no afecta ninguna de las banderas del PSW La habilitación de las interrupciones se puede hacer habilitando a cada bit deseado (IEET1), o en su caso utilizando el SFR IE, dando la palabra correcta según sea el caso en el que se desee trabajar Dos interrupciones con la misma prioridad de interrupción que ocurren simultáneamente, son 59

61 86 PROGRAMA DE EJEMPLO El siguiente ejemplo muestra de una manera sencilla el procedimiento para utilizar una interrupción Este ejemplifica de forma primitiva el funcionamiento de un semáforo que siempre está en verde, en el que por medio de una interrupción externa (Un switch en el pin 2 del puerto 3) pueda cambiar de inmediato a la secuencia para que se ponga en rojo La secuencia es la siguiente: primero se necesita tener en cuenta que cada interrupción tiene un vector que es prácticamente la dirección en donde se debe poner el código respectivo de la interrupción, por eso es que se comienza la interrupción en la dirección 03H, porque el vector de la interrupción externa 0 está en esa dirección Entonces se comienza en la 00H y se realiza un salto a INICIA (principal), este a su vez inicializa el puerto y la interrupción, el programa enciende el verde hasta que ocurra la interrupción externa, y en ese momento entrara automáticamente a realizar lo necesario para que el semáforo se ponga en rojo, cuando entra a la rutina de interrupción se deshabilitan las interrupciones para evitar que haya problemas si presionan el botón varias veces seguidas y por medio de una bandera se indica cuando sale de la interrupción que se puede volver a habilitar El pin 0 del puerto 1 es la salida para el foco verde, el pin 1 del puerto es la salida para el foco amarillo y el pin 2 del puerto es la salida para el foco rojo Los retardos son de 10 segundos para RET1 y 1 segundo para RET2, y fueron calculados de la misma forma en la que se menciona al principio del tutorial con un cristal de MHz El código es el siguiente: ;********************************************** ;*************** SEMAFORO ******************* ORG 00H JMP INICIA ;********************************************** ;************** INICIALIZA ******************** ORG 03H ;vector de interrupción JMP INTERRUPCION ;Salto a la rutina de int INICIALIZA: MOV 0A5H, #00H ; Se inicializa el puerto 1 MOV IE, #81H ;Habilitación de la interrupción ; Externa 0 MOV TCON, #01H ;La interrupción se inicializa ; para funcionar por flanco ;negativo RET ;********************************************** ;*************** RETARDO 1 ******************* RET1: MOV R1, # 187 MOV R2, #197 MOV R3, #127 T: DJNZ R3, T DJNZ R2, T DJNZ R1, T RET ;********************************************** ;**************** RETARDO 2 ****************** RET2: MOV R1, #19 MOV R2, #174 MOV R3, #62 T2: DJNZ R3, T2 DJNZ R2, T2 DJNZ R1, T2 RET ;********************************************** ;*************** INTERRUPCION **************** ;*************** VERDE A ROJO ***************** INTERRUPCION: MOV IE, #00H ;Deshabilitacion de las interrupciones MOV R1,#03H LOOP0: SETB P10 ;VERDE ;CALL RET1 CLR P10 ;Apaga verde DJNZ R1,LOOP0 SETB P11 ;AMARILLO ;CALL RET1 60

62 CLR P11 ;Apaga amarillo SETB P12 ;ROJO ;CALL RET2 CLR P12 ;Apaga rojo SETB F0 ;Bandera de salida de interrupcion ;para habilitarla de nuevo RETI ;************************************************ ;************** PRINCIPAL ********************** INICIA: CALL INICIALIZA OTRA: SETB P10 ;VERDE LOP: JB F0, ENABLE ;Verifica si entro a la interrupcion JMP LOP CALL RET1 ENABLE: MOV IE, #81H interrupción externa 0 ;Llama a retardo para evitar que ;se active otra interrupción ;inmediatamente después de ;que termina la primera ;Se vuelve a habilitar la CLR F0 JMP OTRA ;Bandera de salida de interrupcion ;Vuelve a encender el verde END 61

63 87 EJERCICIO PROPUESTO: Escriba un programa para manejar un teclado matricial de 4x4, el teclado deberá conectarse al puerto 1 para leer los datos y la salida deberá ser el puerto 2 El funcionamiento será como sigue, al introducir un dato vía el teclado, se activará la interrupción externa y el dato será desplegado en un display de siete segmentos conectado al puerto 2 como en el caso del ejercicio 75 El Diagrama del teclado es como sigue: Para evitar los rebotes a la hora de introducir los datos por el teclado se utilizará el decodificador 74C922, el cual también es utilizado para obtener la señal necesaria para la interrupción externa Cuando el dato es estable en el teclado y no hay rebotes la Terminal DA se pone en 1, entonces la rutina de interrupción deberá leer el dato y desplegarlo 62

64 63

65 91 TARJETA DE EVALUACIÓN CC1010EB La tarjeta de evaluación sirve como motherboard para los módulos de evaluación Los módulos de evaluación (CC1010EM) son unas pequeñas tarjetas que contienen un microcontrolador CC1010 Figura 92- Tarjeta de evaluación CC1010EB Figura 91- Módulo de evaluación CC1010EM 4 El módulo de evaluación CC1010EM contiene un cristal de Mhz y un cristal de baja frecuencia de 32768Khz Este módulo tiene lo necesario para funcionar de manera independiente ya que tiene pines para conectarlo a alguna fuente de voltaje, pero es necesario que se conecte a la tarjeta de avaluación CC1010EB para que se le puedan cargar los programas utilizando el software CC1010 Flash programmer program La tarjeta CC1010EB adicional al módulo de evaluación contiene dos puertos seriales, un puerto paralelo, botones, cuatro LEDs, entrada de voltaje regulado para voltajes entre 4 y 10 Volts, una entrada de voltaje no regulada para voltaje de 36 Volts, jumpers de configuración y conectores que facilitan la interfaz entre el CC1010 y diferentes equipos de prueba Estos periféricos son de gran utilidad para realizar las pruebas necesarias después de haber programado y cargado el programa en el CC1010 Para mayor detalle de estos periféricos consulte el manual CC1010DK Development Kit (descarga en wwwchipconcom) 92 USO DEL COMPILADOR ASEM51 PARA PROGRAMAS EN ENSAMBLADOR DEL CC1010 El ASEM 51 es un compilador gratuito de lenguaje ensamblador para el microcontrolador 8051 (descarga en: 51/final13htm) que se distribuye desde 1999 Su autor es WW Heinz El archivo ejecutable ASEMexe sólo requiere 256 KB de memoria en MS-DOS Una de las ventajas más importantes de este compilador es la facilidad de uso, así como su fácil instalación Este compilador resultó ser una de las mejores opciones para compilar programas en ensamblador del CC1010, debido al elevado costo del Keil µvision (software recomendado por Chipcon para programar el CC1010 pero que no es de licencia libre) 4 Figuras 91 y 92 tomadas del manual CC1010DK (descarga wwwchipconcom), propiedad de Texas Instrument Copyright Texas Instruments Incorporated 64

66 93 COMPILACIÓN DEL CÓDIGO Para escribir un programa en ensamblador desde MS- DOS, se debe ejecutar el siguiente comando: C:\ asem51\edit Donde aparecerá una pantalla para escribir código, después se debe guardar el archivo con la extensión: nombrearchivoasm Esto permitirá crear un archivo con código en ensamblador, para compilar el archivo asm, se debe ejecutar el siguiente comando: C:\ asem51\asem nombrearchivoasm Si no hay errores, el compilador lo notificará, de lo contrario dirá cuántos errores de compilación hay y en que número de línea del código está dicho error o errores Cuando la compilación es satisfactoria se liga (linking) el código automáticamente, para generar un archivo que se enviará vía puerto paralelo a la tarjeta del CC1010, este archivo tendrá la extensión hex (hexadecimal para la familia Intel) Si se va a usar el A51 del Keil los pasos a seguir son un poco más elaborados que en ASEM51, ya que el compilador A51 no genera un archivo con extensión hex al compilar el programa (tenga o no tenga errores), en este caso se utilizan otros dos comandos de línea para poder generar un archivo con extensión hex que es el que se carga en el CC1010 Como en el caso del asem, si no existe el programa en ensamblador lo hacemos desde MS-DOS C:\ A51\edit donde aparecerá una pantalla para escribir código, después se debe guardar el archivo con la extensión: nombrearchivoasm esto permitirá crear un archivo en ensamblador, para compilar el archivo asm, se debe ejecutar el siguiente comando C:\ A51\ A51 nombrearchivoasm este comando de línea no genera un archivo hex, además tampoco liga (linker) el archivo, esta instrucción solamente genera un nombrearchivoobj y un nombrearchivolst, así que se usa otro programa C:\A51\L51 nombrearchivoobj to nombre archivoabs esta instrucción cambia de la extensión obj a la extensión abs que es un archivo que contiene el código objeto absoluto, por el momento ningún archivo generado se puede cargar en el CC1010, debido a esa situación se debe ejecutar otro comando de línea que genera un archivo hex utilizando el archivoabs generado con el comando anterior C:\ A51\ OH51 nombrearchivoabs esta instrucción general el archivo en hexadecimal nombrearchivohex Ya una vez generado de cualquier manera el archivo hex se puede cargar a través del programador CCPROG flash (descarga: wwwchipconcom ) al CC1010 EJEMPLO DEL USO DEL ASEM51 PARA COMPILAR EL PROGRAMA LLAMADO PRUEBAASM Este programa se utilizó para verificar en la tarjeta CC1010EM el funcionamiento de la compilación de código en ASEM51 65

67 Lo que realiza el siguiente programa es encender el led Rojo de la tarjeta, que es la salida del puerto 1 bit 3 PASO 1 Instalar el programa ASEM51: PASO 2 Bajar el programa desde la pagina y guardar el contenido descomprimido en la carpeta ASEM Abrir una ventana en MS- DOS y aparecerá una ventana similar a la Fig 1 Fig 2- muestra la ventana en MS-DOS y los comandos de línea adecuados para trabajar con el compilador ASEM y el comando para crear un archivo llamado pruebaasm PASO 3 Escribir el código en lenguaje ensamblador Ver Fig 3 Fig 1- muestra la ventana en MS-DOS y los comandos de línea adecuados para trabajar con el compilador ASEM Cada comando finaliza con un enter Cuando ya estamos en la carpeta ASEM lo que debemos hacer es abrir el editor y crear un archivo para escribir el código del programa pruebaasm, escribiendo edit pruebaasm (Fig2) Fig 3-Código de programa escrito en el editor de MS-DOS PASO 4 Compilación del programa pruebaasm Guardar cambios del archivo pruebaasm Salir del editor, regresando a la ventana de comandos de MS-DOS Ejecutar los comandos de línea que se muestran en la Fig4 66

68 Fig 4-Compilación del archivo pruebaasm El compilador no marca errores Fig 5-Muestra los archivos generados después de la compilación con ASEM Como el compilador no marca errores (Ver Fig4) entonces ya se generó un archivo pruebahex que será el que se cargue en la tarjeta CC1010EM verificamos con el comando de línea DIR que ya se generó un archivo pruebahex (ver Fig5) PASO 5 Cargar el programa a la tarjeta CC1010EM mediante el programa CC1010 Flash programmer program (Descarga en wwwchipconcom) y de acuerdo a las instrucciones marcadas en el archivo CC1010DK_Quick_Start_1_0, que también se descarga desde la pagina de Chipcon Como se puede observar, la compilación en ASEM no es complicada y su instalación es muy sencilla, por lo que es recomendable su uso 67

69 68

70 DESCRIPCIÓN DE LOS MNEMÓNICOS UTILIZADOS EN LAS TABLAS DE INSTRUCCIONES 1 SÍMBOLO NOMBRE A Acumulador AB Registro par A y B C Bandera de acarreo DPTR Puntero de datos Rn Registro R0 R7 PC Contador de Programa directo Dirección de datos de 8 bits (RAM interna 0x00 0x7F, SFRs 0x80 Registro interno apuntado por R0 ó R1 (excepto MOVX) rel Complemento de SJMP y brincos condicionales bit Dirección de bit directa #data Constante de 8 bits #data 16 Constante de 16 bits addr 16 Dirección de destino de 16 bits addr 11 Dirección de destino de 11 bits Tabla Apéndice I- Símbolos usados en el resumen de instrucciones La columna Bytes de las siguientes tablas, muestran el número de bytes usados en la memoria del CC1010; también se muestra el número de ciclos y cada instrucción requiere de 4 ciclos de reloj, además las 4 columnas de la derecha muestran las banderas (PSW) que son afectadas por las instrucciones 1 Todas las tablas del apéndice I, fueron obtenidas del datasheet del CC1010 de Chipcon (wwwchipconcom), propiedad de Texas Instrument Copyright Texas Instruments Incorporated 69

71 INSTRUCCIONES ARITMÉTICAS (Tabla 1) Mnemónicos Descripción Bytes Ciclos de Instrucción Código Hexa C Y A C O V P ADD A, directo Suma el byte directo a A X X X X ADD Suma el dato de memoria a A X X X X ADD A, #data Suma el dato inmediato a A X X X X ADDC A, Rn ADDC A, directo Suma el registro a A con acarreo Suma el byte directo a A con acarreo F X X X X X X X X ADDC ADDC A, #data Suma el dato de memoria a A con acarreo Suma el dato inmediato a A con acarreo X X X X X X X X SUBB A, Rn Resta el registro a A F X X X X SUBB A, directo Resta el bit directo a A X X X X SUBB Resta el dato de memoria a A X X X X SUBB A, #data Resta el dato inmediato a A X X X X INC A Incrementa A X INC Rn Incrementa el registro F INC directo Incrementa el byte directo Incrementa el dato de memoria DEC A Decrementa A X DEC Rn Decrementa el registro F DEC directo Decrementa el byte directo INC DPTR Decrementa el dato de memoria Incrementa el apuntador de datos A3 MUL AB Multiplica A por B 1 5 A4 X X X DIV AB Divide A por B X X X DA A Ajuste decimal a A 1 1 D4 X X 70

72 INSTRUCCIONES LÓGICAS (Tabla 2) Mnemónicos Descripción Bytes Ciclos de Instrucción Código Hexa C Y A C O V P ANL A, Rn Operación AND del registro con A F X ANL A, directo Operación AND del byte directo con A X ANL Operación AND del dato de memoria con A X ANL A, #data Operación AND del dato inmediato con A X ANL directo, A Operación AND de A con el byte directo ANL directo, Operación AND del dato #data inmediato con el byte directo ORL A, Rn Operación OR del registro con A F X ORL A, directo Operación OR del byte directo con A X ORL Operación OR del dato de memoria con A X ORL A, #data Operación OR del dato inmediato con A X ORL directo, A Operación OR de A con el byte directo ORL directo, Operación OR del dato #data inmediato con el byte directo XRL A, Rn Operación OR-Ex del registro con A F X XRL A, directo Operación OR-Ex del byte directo con A X XRL Operación OR-Ex del dato de memoria con A X XRL A, #data Operación OR-Ex del dato inmediato con A X XRL directo, A Operación OR-Ex de A con el byte directo XRL directo, Operación OR-Ex del dato #data inmediato con el byte directo CLR A Limpia el registro A 1 1 E4 X CPL A Complemento del registro A 1 1 F4 X SWAP A Intercambio de nibbles de A 1 1 C4 RL A Rotar A a la izquierda RLC A Rotar A a la izquierda con acarreo X X RR A Rotar A a la derecha RRC A Rotar A a la derecha con acarreo X X 71

73 INSTRUCCIONES DE TRANSFERENCIA DE DATOS (Tabla 3) Mnemónicos Descripción Bytes Ciclos de Instrucción Código Hexa C Y A C O V P MOV A, Rn Mueve el registro a A 1 1 E8-EF X MOV A, directo Mueve el byte directo a A 2 2 E5 X MOV Mueve el dato de memoria a A 1 1 E6-E7 X MOV A, #data Mueve el dato inmediato a A X MOV Rn, A Mueve A al registro 1 1 F8-FF MOV A, directo Mueve el byte directo al registro 2 2 A8-AF MOV Rn, #data Mueve el dato inmediato al registro F MOV directo, A Mueve A al byte directo 2 2 F5 MOV directo, Rn Mueve el registro al byte directo F MOV directo, directo MOV Mueve el byte directo al byte directo Mueve el dato de memoria al byte directo MOV directo, Mueve el dato inmediato al byte #data directo A Mueve A al dato de memoria 1 1 F6-F7 directo Mueve el byte directo al dato de memoria 2 2 A6-A7 #data Mueve el dato inmediato al dato de memoria MOV DPTR, #data Mueve el dato inmediato al puntero de datos MOVC MOVC Mueve el byte de código relativo DPTR a A Mueve le byte de código relativo PC a A X X MOVX Mueve el dato externo (A8) a A E2-E3 X MOVX Mueve el dato externo (A16) a A E0 X A Mueve A al dato externo (A8) F2-F3 A Mueve A al dato externo (A16) F0 PUSH directo Guarda el byte directo en la pila 2 2 C0 POP directo Extrae el byte directo de la pila 2 2 D0 XCH A, Rn Intercambia A por el registro 1 1 C8-CF X XCH A, directo Intercambia A por el byte directo 2 2 C5 X XCH Intercambia A por el dato de memoria 1 1 C6-C7 X XCHD Intercambia el nibble de A por el del dato de memoria 1 1 D6-D7 X 72

74 INSTRUCCIONES SOBRE BITS INDIVIDUALES (Tabla 4 ) Mnemónicos Descripción Bytes Ciclos de Instrucció n Código Hexa C Y A C O V P CLR C Limpia la bandera de acarreo 1 1 C3 X CLR bit Limpia el bit directo 2 2 C2 SETB C Se activa la bandera de acarreo 1 1 D3 X SETB bit Se activa el bit directo 2 2 D2 CPL C Complementa el acarreo 1 1 B3 X CPL bit Complementa el bit directo 2 2 B2 ANL C, bit Operación AND del bit directo con el acarreo X ANL C, /bit Operación AND del inverso del bit directo con el acarreo 2 2 B0 X ORL C, bit Operación OR del bit directo con el acarreo X ORL C, /bit Operación OR del inverso del bit directo con el acarreo 2 2 A0 X MOV C, bit Mueve el bit directo al bit de acarreo 2 2 A2 X MOV bit, C Mueve el bit de acarreo al bit directo ACALL addr 11 Llamada absoluta a la subrutina F1 LCALL addr 16 Llamada larga a subrutina RET Regreso de subrutina RETI Regreso de interrupción AJMP addr 11 Salto incondicional Absoluto E1 LJMP addr 16 Salto incondicional Largo SJMP rel Salto corto (dirección relativa) JC rel Salto con acarreo = JNC rel Salto con acarreo = JB bit, rel Salto con bit directo= JNB bit, rel Salto con bit directo = JBC bit, rel Salto con bit directo = 1 y clear Salto relativo indirecto DPTR JZ rel Salto con acumulador= JNZ rel Salto con acumulador /=

75 ( continuación Tabla 4) Mnemónicos Descripción Bytes Ciclos de Instrucció n Código Hexa C Y A C O V P CJNE A, directo, rel CJNE A, #d, rel CJNE Rn, #d, rel #d, rel DJNZ Rn, rel DJNZ directo, rel Compara A y directo, salto relativo si no es igual Compara A con el bit inmediato, salto relativo si no es igual Compara el registro con el inmediato, salto relativo sino es igual Compara el dato de memoria con el inmediato, salto relativo si no es igual Decrementa el registro, salto relativo si no es cero Decrementa el byte directo, salto relativo si no es cero 3 4 B5 X 3 4 B4 X 3 4 B8-BF X 3 4 B6-B7 X 2 3 D8-DF 3 4 D5 74

76 INSTRUCCIONES MISC (Tabla 5) Mnemónicos Descripción Bytes Ciclos de Instrucció n Código Hexa C Y A C O V P NOP No operación TRAP Activa la bandera EICONFDIF=1, usada para breakpoints 1 3 A5 75

77 REFERENCIAS CHIPCON CC1010_Data_sheet wwwchipconcom CHIPCON CC1010DK_User_Manualwwwchipconcom CHIPCON CC1010IDE_User_Manual wwwchipconcom CHIPCON CC1010DK_Quick_Start_1_0wwwchipconcom WW Heinz Compilador Asem51http://plitde/asem-51/final13htm 76

78

Tablas familia MCS-51 (8051)

Tablas familia MCS-51 (8051) Tablas familia MCS-5 (805) y detalles para el Atmel AT89C5RE Informática Industrial Ingeniería Técnica Industrial, esp. Electrónico Departamento de Informática de Sistemas y Computadores - DISCA Escuela

Más detalles

CONJUNTO DE INSTRUCCIONES PARA LA FAMILIA DEL 51

CONJUNTO DE INSTRUCCIONES PARA LA FAMILIA DEL 51 CONJUNTO DE INSTRUCCIONES PARA LA FAMILIA DEL 51 Notas para el conjunto de instrucciones y modos de direccionamiento Rn Registros de R0-R7 del banco de registro seleccionado actualmente. Direct Dirección

Más detalles

BLOQUE 3 (PARTE 2) MICROCONTROLADOR 8051 DESCRIPCIÓN GENERAL

BLOQUE 3 (PARTE 2) MICROCONTROLADOR 8051 DESCRIPCIÓN GENERAL SISTEMAS ELECTRÓNICOS DIGITALES BLOQUE 3 MICROCONTROLADORES (PARTE 2) MICROCONTROLADOR 8051 DESCRIPCIÓN GENERAL Enrique Mandado Pérez María José Moure Rodríguez Familia original del microcontrolador 8051

Más detalles

Práctica 1 : INTRODUCCIÓN Práctica 1: Introducción al 8051

Práctica 1 : INTRODUCCIÓN Práctica 1: Introducción al 8051 Práctica 1 : INTRODUCCIÓN 8051 1. Práctica 1: Introducción al 8051 ARQUITECTURA 1. Organización microcontrolador 8051 RAM 256 Bytes MEMORIA PASIVA (OPCIONAL) HASTA 4KBytes 8051 (8 bits) T0 T1 PUERTO SERIE

Más detalles

Programación de los Microcontroladores 8052/8051 (II)

Programación de los Microcontroladores 8052/8051 (II) CAPITULO 4 Programación de los Microcontroladores 8052/8051 (II) 4.1. INSTRUCCIONES BOOLEANAS. La familia de microcontroladores 8051 incluye un procesador booleano. Esto es, un procesador especializado

Más detalles

ORGANIZACIÓN DE LA MEMORIA

ORGANIZACIÓN DE LA MEMORIA Existen dos tipos de memoria en todos los µc, memoria de programa y memoria de datos. La primera (EPROM, EEPROM, FLASH, etc) contiene los códigos de operación que se ejecutarán para seguir una secuencia

Más detalles

Relación de Problemas I

Relación de Problemas I Relación de Problemas I 352) $1'5e6 52/'È1 $5$1'$ 1. Realizar el cálculo del tiempo que transcurre durante la ejecución del bloque de instrucciones sombreado, en función del contenido de los registros

Más detalles

Arquitectura Interna del 8088

Arquitectura Interna del 8088 Arquitectura Interna del 8088 Intel diseñó el 8088/8086 para realizar al mismo tiempo las principales funciones internas de transferencia de datos y búsqueda de instrucciones. Para conseguir esto, el 8088

Más detalles

INSTRUCCIONES. Las instrucciones del microcontrolador Z8 PLUS se pueden clasificar en grupos de acuerdo a su función como:

INSTRUCCIONES. Las instrucciones del microcontrolador Z8 PLUS se pueden clasificar en grupos de acuerdo a su función como: INSTRUCCIONES Las instrucciones del microcontrolador Z8 PLUS se pueden clasificar en grupos de acuerdo a su función como: Instrucciones de carga Manipulación de bit Aritméticas Transferencias Lógicas Rotación

Más detalles

Programación de los Microcontroladores 8052/8051 (I)

Programación de los Microcontroladores 8052/8051 (I) CAPITULO 3 Programación de los Microcontroladores 8052/8051 (I) 3.1. INTRODUCCION Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones. Estas instrucciones están optimizadas para

Más detalles

CONJUNTO DE INSTRUCCIONES DEL MICROCONTROLADOR Regreso al menú principal

CONJUNTO DE INSTRUCCIONES DEL MICROCONTROLADOR Regreso al menú principal CONJUNTO DE INSTRUCCIONES DEL MICROCONTROLADOR 8051 Regreso al menú principal ACALL dirección 11 (llamada absoluta) ACALL llama incondicionalmente a una subrutina localizada en la dirección indicada. Durante

Más detalles

Microcontrolador Cygnal 8051F040

Microcontrolador Cygnal 8051F040 Microcontrolador Cygnal 8051F040 Ingeniería Técnica Industrial Electrónica. Informática Industrial. Prof. Dr. Alejandro Linares Barranco 1 Microcontrolador Cygnal 8051F040. Contenido 1. Introducción y

Más detalles

INTRODUCCIÓN. Comunicación Serial.

INTRODUCCIÓN. Comunicación Serial. INTRODUCCIÓN La función principal de este tipo de comunicación es la de convertir datos de salida de forma paralela a serial y la de convertir datos de entrada de forma serial a paralela. El acceso al

Más detalles

Introducción a la Programación en Lenguaje Ensamblador.

Introducción a la Programación en Lenguaje Ensamblador. CAPITULO 5 Introducción a la Programación en Lenguaje Ensamblador. 5.1. INTRODUCCION Se entiende por modelo de programación al conjunto de registros accesibles por el usuario que junto al set de instrucciones

Más detalles

Unidad IV: Programación de microcontroladores

Unidad IV: Programación de microcontroladores Unidad IV: Programación de microcontroladores El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el código ejecutable y está compuesto por una serie de ceros y unos,

Más detalles

Arquitectura (Procesador familia 80 x 86 )

Arquitectura (Procesador familia 80 x 86 ) Arquitectura (Procesador familia 80 x 86 ) Diseño de operación Basada en la arquitectura Von Newman Memoria CPU asignadas direcciones I / O BUS: Es un canal de comunicaciones Bus de direcciones: Contiene

Más detalles

APENDICE A Microcontrolador de 8 bits MC68HC11F1

APENDICE A Microcontrolador de 8 bits MC68HC11F1 APENDICE A Microcontrolador de 8 bits MC68HC11F1 Características generales: Memoria RAM de 1Kbyte Memoria EEPROM de 512 bytes Cuatro modos de operación o Bootstrap o Expandido o Single chip o Test Siete

Más detalles

UNIDAD I CONCEPTOS GENERALES. Conceptos Generales Microprocesadores Otoño 2011

UNIDAD I CONCEPTOS GENERALES. Conceptos Generales Microprocesadores Otoño 2011 1 UNIDAD I CONCEPTOS GENERALES Fall 2011 Conceptos Generales Microprocesadores Otoño 2011 Contenido 2 Introducción Arquitectura generalizada de una computadora Componentes de una computadora Conjunto de

Más detalles

Figura 2. Formato de un dato serie síncrono.

Figura 2. Formato de un dato serie síncrono. ELECTRÓNICA DIGITAL II 1 COMUNICACIÓN SERIE EN EL 8051 En la comunicación serie los datos se transfieren bit por bit. Una interfaz en el microcontrolador los transfiere el dato en paralelo del CPU a serie

Más detalles

Conceptos de Arquitectura de Computadoras Curso 2015

Conceptos de Arquitectura de Computadoras Curso 2015 PRACTICA 1 Assembly, Instrucciones, Programas, Subrutinas y Simulador MSX88 Objetivos: que el alumno Domine las instrucciones básicas del lenguaje assembly del MSX88. Utilice los diferentes modos de direccionamiento.

Más detalles

8.4. El software en los μprocesadores

8.4. El software en los μprocesadores 8.4. El software en los μprocesadores Ejemplo de comandos de la CPU: Tarea: Sumar dos números A y B. Suponer los datos A y B almacenados en las posiciones 1000 2 y 1010 2 respectivamente. El resultado

Más detalles

CAPITULO 2 Organización de la memoria en los Microcontroladores 8052/8051

CAPITULO 2 Organización de la memoria en los Microcontroladores 8052/8051 CAPITULO 2 Organización de la memoria en los Microcontroladores 8052/8051 2.1. MEMORIA DE PROGRAMAS Y DATOS Los Microcontroladores 8052/8051 tienen separados los espacios de direcciones para memoria de

Más detalles

Arquitectura de Computadores II Clase #3

Arquitectura de Computadores II Clase #3 Arquitectura de Computadores II Clase #3 Facultad de Ingeniería Universidad de la República Instituto de Computación Curso 2010 Veremos Registros Repertorio de instrucciones Modos de direccionamiento El

Más detalles

Tema 2 INSTRUCCIONES DE UN COMPUTADOR. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Tema 2 INSTRUCCIONES DE UN COMPUTADOR. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía Tema 2 INSTRUCCIONES DE UN COMPUTADOR ÍNDICE Definiciones Formatos de instrucción Modos de direccionamiento Tipos de instrucciones Diagrama de flujo Lenguaje del computador Definiciones: conceptos de arquitectura

Más detalles

Contenido. Conjunto de Instrucciones. Formato de la Instrucción. Instrucciones de 1 byte. Formato de la Instrucción 28/09/2011

Contenido. Conjunto de Instrucciones. Formato de la Instrucción. Instrucciones de 1 byte. Formato de la Instrucción 28/09/2011 1 ontenido 2 UNIDAD 5 EL LENGUAJE DE ENSAMBLADOR DEL Z80 onjunto de instrucciones Tipos de instrucciones Modos de direccionamiento El ensamblador del Z80 El simulador AVOET Implementación de un sistema

Más detalles

Los números naturales y enteros en el 80X86 y en LAN

Los números naturales y enteros en el 80X86 y en LAN Los números naturales y enteros en el 80X86 y en LAN 1. Los números naturales en el 80X86/TASM Representación Sistema de representación En el 80X86 (y en la mayoría de los procesadores), los números naturales

Más detalles

Funcionamiento de las computadoras

Funcionamiento de las computadoras Funcionamiento de las computadoras Introducción a las ciencias de la computación Antonio López Jaimes UNIVERSIDAD AUTÓNOMA METROPOLITANA UNIDAD IZTAPALAPA Plan de la presentación El modelo de von Neuman

Más detalles

Ensamblador. Introducción. Dpto. Física y Arquitectura de Computadores. Universidad Miguel Hernandez

Ensamblador. Introducción. Dpto. Física y Arquitectura de Computadores. Universidad Miguel Hernandez Dpto. Física y Arquitectura de Computadores Universidad Miguel Hernandez Es el lenguaje de más bajo nivel que admite una máquina. El ensamblador hace que el código binario(máquina sea transparente al usuario)

Más detalles

Microcontrolador. Filosofía del bit

Microcontrolador. Filosofía del bit MCU Microcontrolador Microcomputadora en un solo circuito que cumple funciones de CONTROL Microcontroladores - Parte 1 1 Filosofía del bit MOV C,P1.4 ;Se trae al CY el estado del pin 4 de la puerta 1 ANL

Más detalles

Ejercicio. Solución. Banderas. Banderas. Banderas 05/10/2011 UNIDAD 5 2 A PARTE PROGRAMANDO EN EL ENSAMBLADOR DEL Z80

Ejercicio. Solución. Banderas. Banderas. Banderas 05/10/2011 UNIDAD 5 2 A PARTE PROGRAMANDO EN EL ENSAMBLADOR DEL Z80 1 UNIDAD 5 2 A PARTE PROGRAMANDO EN EL ENSAMBLADOR DEL Z80 2 Cargue el numero F2H y 68H en los registros B y C respectivamente Almacene A2H en la locación de memoria 2065H Reste el 68H de F2H (F2H-68H)

Más detalles

INSTITUTO TECNOLÓGICO DE CHIHUAHUA II ARQUITECTURA DE COMPUTADORAS MAESTRO: ERNESTO LEAL ALUMNOS: LUIS CARLOS BARRERA ORTIZ STHEPANIE FLORES GUILLEN

INSTITUTO TECNOLÓGICO DE CHIHUAHUA II ARQUITECTURA DE COMPUTADORAS MAESTRO: ERNESTO LEAL ALUMNOS: LUIS CARLOS BARRERA ORTIZ STHEPANIE FLORES GUILLEN INSTITUTO TECNOLÓGICO DE CHIHUAHUA II ARQUITECTURA DE COMPUTADORAS MAESTRO: ERNESTO LEAL ALUMNOS: LUIS CARLOS BARRERA ORTIZ STHEPANIE FLORES GUILLEN En este cuestionario de estudiaran los microprocesadores

Más detalles

El Diseño de un Lenguaje Máquina

El Diseño de un Lenguaje Máquina Arquitectura de Ordenadores Juego de Instrucciones del Procesador Intel Pentium Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática El Diseño de un Lenguaje

Más detalles

Instrucciones del microprocesador

Instrucciones del microprocesador Instrucciones del microprocesador Formato de las Instrucciones Las líneas de instrucciones se integran de 4 campos. [Identificador]: Se utiliza par etiquetar a las intrucciones donde se realizara el salto,nombre

Más detalles

Ejercicios Básicos para Simulación

Ejercicios Básicos para Simulación Ejercicios Básicos para Simulación [6609] Laboratorio de Microcomputadoras Facultad de Ingeniería - Universidad de Buenos Aires Durante el desarrollo de estas prácticas, se trabajará con la versión gratuita

Más detalles

Microcontrolador PIC16F84: Arquitectura

Microcontrolador PIC16F84: Arquitectura Microcontrolador PIC16F84: Arquitectura La arquitectura del PIC es tipo Harvard: Mem. de Programa (instrucciones) (tipo FLASH) Control DIR DATOS µp (tipo RISC, pipeline de 2 etapas) Control DIR DATOS 14

Más detalles

PUERTOS DE ENTRADA / SALIDA EN UN MICROCONTROLADOR

PUERTOS DE ENTRADA / SALIDA EN UN MICROCONTROLADOR PUERTOS DE ENTRADA / SALIDA EN UN MICROCONTROLADOR Cualquier aplicación de un sistema digital basado en un microprocesador o microcontrolador requiere la transferencia de datos entre circuitos externos

Más detalles

Modos de Direccionamiento

Modos de Direccionamiento Modos de Direccionamiento Modos de direccionamiento del 8051 La CPU tiene la habilidad de accesar los datos de varias formas Se podría especificar el dato directamente en la instrucción Para datos en la

Más detalles

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA INTRODUCCIÓN AL PIC NOMENCLATURA ARQUITECTURA. TEMPORIZACIÓN. SET DE INSTRUCCIONES. MODOS DE DIRECCIONAMIENTO.

Más detalles

Arquitectura y mapa de memoria del 80C167. Cesáreo Fernández Martínez Álvaro Sánchez Miralles

Arquitectura y mapa de memoria del 80C167. Cesáreo Fernández Martínez Álvaro Sánchez Miralles Arquitectura y mapa de memoria del 80C167 Cesáreo Fernández Martínez Álvaro Sánchez Miralles Introducción Microcontrolador (Embedded Processor) de 16 bits ALU y Registros de 16 bits Diseñado para tareas

Más detalles

MODOS DE DIRECCIONAMIENTO DEL µc51

MODOS DE DIRECCIONAMIENTO DEL µc51 Los modos de direccionamiento son la manera que tienen los µc para accesar a los distintos recursos con los que cuenta. Para manipular los datos y códigos de operación en cada programa se tienen las siguientes

Más detalles

Unidad Nº II Capacidad de la unidad central. de procesamiento. Instituto Universitario Politécnico. Santiago Mariño

Unidad Nº II Capacidad de la unidad central. de procesamiento. Instituto Universitario Politécnico. Santiago Mariño Instituto Universitario Politécnico Santiago Mariño Unidad Nº II Capacidad de la unidad central de procesamiento Organización de instrucción de máquina Cada instrucción requiere la información que necesita

Más detalles

CURSO DE MICROCONTROLADORES PROGRAMACION E INTERCONEXIONADO DEL µc-8051

CURSO DE MICROCONTROLADORES PROGRAMACION E INTERCONEXIONADO DEL µc-8051 CURSO DE MICROCONTROLADORES PROGRAMACION E INTERCONEXIONADO DEL µc-8051 * INTRODUCCION * CARACTERISTICAS DEL 8051 * ARQUITECTURA DEL 8051 * TERMINALES DEL 8051 * REGISTROS INTERNOS DEL 8051 * MODOS DE

Más detalles

Introducción a los microcontroladores. Decanato de Postgrado Mayo de 2011

Introducción a los microcontroladores. Decanato de Postgrado Mayo de 2011 Introducción a los microcontroladores Decanato de Postgrado Mayo de 2011 Microcontroladores aaaaa Un microcontrolador (Micro Controller Unit, MCU), es un circuito integrado programable, construido con

Más detalles

B) Arquitectura generalizada de una computadora

B) Arquitectura generalizada de una computadora Microprocesadores B) Arquitectura generalizada de una computadora LAS COMPONENTES PRINCIPALES UNA MICROCOMPUTADORA SON: La Unidad Central de Procesamiento,CPU constituido por el Microprocesador Microprocesadores

Más detalles

Arquitectura de Computadoras

Arquitectura de Computadoras Arquitectura de Computadoras Dr. Andrés David García García Escuela de Diseño, Ingeniería y Arquitectura Departamento de Mecatrónica 1 Microprocesadores y Periféricos Objetivos: Analizar la arquitectura

Más detalles

ARQUITECTURA DEL PIC16F84A

ARQUITECTURA DEL PIC16F84A ARQUITECTURA DEL PIC16F84A Arquitectura interna del PIC16F84A CPU ALU Decodificador de Instrucciones - Buses Registro de trabajo W PC Contador de Programa Organización de la memoria Memoria de Programa

Más detalles

Estructura de Computadores. Problemas de Instrucciones y Direccionamientos

Estructura de Computadores. Problemas de Instrucciones y Direccionamientos Estructura de Computadores. Problemas de Instrucciones y Direccionamientos Departamento de Arquitectura y Tecnología de Sistemas Informáticos Octubre 2009 1. Sea un computador con palabras y direcciones

Más detalles

TEMA 2. Interrupciones y periféricos básicos

TEMA 2. Interrupciones y periféricos básicos TEMA 2 Interrupciones y periféricos básicos INDICE 1. Interrupciones 1. Fuentes y habilitación de interrupciones 2. Vectores de interrupción 3. Prioridad y anidamiento 4. Registros de configuración 5.

Más detalles

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones Introducción a la Computación Capítulo 10 Repertorio de instrucciones: Características y Funciones Que es un set de instrucciones? La colección completa de instrucciones que interpreta una CPU Código máquina

Más detalles

RELACIÓN DE PROBLEMAS DE LÓGICA PROGRAMADA (TEMA 4)

RELACIÓN DE PROBLEMAS DE LÓGICA PROGRAMADA (TEMA 4) RELACIÓN DE PROBLEMAS DE LÓGICA PROGRAMADA (TEMA 4) 1) Se ha escrito el programa adjunto en lenguaje ensamblador del microprocesador 8085. Sabiendo que se encuentra almacenado a partir de la posición 2000H

Más detalles

La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales: CAPITULO 8 Interrupciones 8.1. INTRODUCCION La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales: a) Consultas (polling):

Más detalles

ARQUITECTURA INTERNA DEL µp8086

ARQUITECTURA INTERNA DEL µp8086 El µp 8086 es un dispositivo de 16 bits de datos y 20 bits de direcciones. Esta dividido en dos subprocesadores: EU (Unidad de Ejecución). Es la encargada de realizar todas las operaciones de control y

Más detalles

Laboratorio 1 Entorno de desarrollo y subrutinas

Laboratorio 1 Entorno de desarrollo y subrutinas Laboratorio 1 Entorno de desarrollo y subrutinas Objetivos Dar los primeros pasos con el uso de la placa. Desarrollar subrutinas que acceden a puertos de entrada y salida (E/S). Validar subrutinas básicas

Más detalles

Un. VIII. Generación de Código Objeto

Un. VIII. Generación de Código Objeto Un. VIII. Generación de Código Objeto 8.1 Lenguaje Máquina Es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. El lenguaje máquina solo es entendible por las computadoras.

Más detalles

Organización de Computadoras. Clase 7

Organización de Computadoras. Clase 7 Organización de Computadoras Clase 7 Temas de Clase Formatos de instrucción Modos de direccionamiento Notas de Clase 7 2 Elementos de una instrucción de máquina Código de operación especifica la operación

Más detalles

Sistemas con Microprocesadores I

Sistemas con Microprocesadores I Sistemas con Microprocesadores I 1 Microcontroladores Introducción Harvard vs. von-neumann Clasificación del procesador Segmentado o Pipeline Ortogonal vs. No ortogonal 2 Microcontroladores PIC Siglas

Más detalles

Resumen de las instrucciones del 8086/8088

Resumen de las instrucciones del 8086/8088 Resumen de las instrucciones del 8086/8088 En este capítulo se hace un resumen de las instrucciones del 8086/8088. Estas instrucciones se encuentran explicadas más detalladamente en otro capítulo. Se puede

Más detalles

1.2 Arquitectura interna del microcontrolador

1.2 Arquitectura interna del microcontrolador 1.2 Arquitectura interna del microcontrolador El microcontrolador seleccionado para este curso es el MSP430 de Texas instruments http://www.ti.com/msp430 En particular el MSP430G2553 y la tarjeta LaunchPad

Más detalles

5 - Lenguaje Ensamblador

5 - Lenguaje Ensamblador PROGRAMACIÓN EN ENSAMBLADOR 62 Fuente.asm,.s51,... Fases del Ensamblado Ensamblado Objeto.obj,.r03 Objeto Enlazado Ejecutable.hex,.bin Librerías Eprom Simulador Emulador Monitor PROGRAMACIÓN EN ENSAMBLADOR

Más detalles

INSTITUTO TECNOLÓGICO DE CHIHUAHUA II

INSTITUTO TECNOLÓGICO DE CHIHUAHUA II INSTITUTO TECNOLÓGICO DE CHIHUAHUA II Carrera: Ingeniería Informática Nombre de la materia: Arquitectura de Computadoras Nombre del docente: Ernesto Leal Nombre de los alumnos: Janeth Hernández Hernández,

Más detalles

Ejercicio. Solución. Ejercicio. Comparaciones. Solución 16/11/2011 UNIDAD 5 3 A PARTE PROGRAMANDO EN EL ENSAMBLADOR DEL Z80

Ejercicio. Solución. Ejercicio. Comparaciones. Solución 16/11/2011 UNIDAD 5 3 A PARTE PROGRAMANDO EN EL ENSAMBLADOR DEL Z80 1 UNIDAD 5 3 A PARE PROGRAMANDO EN EL ENSAMBLADOR DEL Z80 2 Los puertos de entrada F1H y F2H estan conectados a 7 switches cada uno. El bit mas significativo D 7 esta conectado a un una señal de emergencia

Más detalles

Análisis general de un Microprocesador

Análisis general de un Microprocesador Análisis general de un Microprocesador Arquitectura del chip Repertorio de instrucciones Sistema mínimo Señales de control Función de cada pin del µp Herramientas de desarrollo Performance. ARQUITECTURA

Más detalles

COMPUTADORA. Introducción Las computadoras se usan en diversas aplicaciones

COMPUTADORA. Introducción Las computadoras se usan en diversas aplicaciones ORGANIZACIÓN DE UNA COMPUTADORA Introducción Las computadoras se usan en diversas aplicaciones (industria, i oficinas, i hogares, ciencia, i etc.) La primera computadora digital electrónica fue construida

Más detalles

Tema: Microprocesadores

Tema: Microprocesadores Universidad Nacional de Ingeniería Arquitectura de Maquinas I Unidad I: Introducción a los Microprocesadores y Microcontroladores. Tema: Microprocesadores Arq. de Computadora I Ing. Carlos Ortega H. 1

Más detalles

Interrupciones y entrada/salida

Interrupciones y entrada/salida Departamento de Automática 1 / 15 Índice Mapa de entrada/salida Instrucciones IN/OUT Modo de operación Registros Habilitación de interrupciones Marco de interrupción Procesamiento de una interrupción 2

Más detalles

Arquitectura del CPU. Organización del Computador 1 Verano 2016

Arquitectura del CPU. Organización del Computador 1 Verano 2016 Arquitectura del CPU Organización del Computador 1 Verano 2016 Agenda De dónde venimos? Introducción: esquema de una computadora Representación de la información Circuitos Combinatorios Circuitos Secuenciales

Más detalles

Conceptos. Generales ALGORITMOS

Conceptos. Generales ALGORITMOS Conceptos 1 Generales ALGORITMOS Que es un Algoritmo? 2 Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos

Más detalles

Estructura de Microprocesadores. Profesor Ing. Johan Carvajal Godínez

Estructura de Microprocesadores. Profesor Ing. Johan Carvajal Godínez Estructura de Microprocesadores PIC 18F4550 Administración de la memoria Profesor Ing. Johan Carvajal Godínez Contenidos Organización de la memoria del MCU Administración de la memoria de programa (Flash)

Más detalles

Trabajo Práctico Nro 3: Assembler

Trabajo Práctico Nro 3: Assembler Año 28 Banderas Nombre Estado = Estado = 1 Desbordamiento: Indica cuando el resultado de una operación con NV-No hubo OV-Desborde signo a excedido la capacidad del up. desborde Dirección: Controla la selección

Más detalles

Microcontrolador. Microcomputadora en un solo circuito que cumple funciones de CONTROL. Sistemas Empotrados (embedded)

Microcontrolador. Microcomputadora en un solo circuito que cumple funciones de CONTROL. Sistemas Empotrados (embedded) Microcontrolador MCU Microcomputadora en un solo circuito que cumple funciones de CONTROL Microcontroladores - Parte 1 1 Sistemas Empotrados (embedded) Basados en componentes programambles (ej. Microcontroladores,

Más detalles

Instrucción De Salto Incondicional

Instrucción De Salto Incondicional INSTRUCCIONES DE CONTROL DE FLUJO Los programas que se han desarrollado hasta ahora se ejecutan en forma secuencial, esto es, el programa inicia su ejecución con la primera instrucción y continúa de arriba

Más detalles

Estructura y Tecnología de Computadores. Módulo C. Arquitectura del procesador. Tema 4. Modos de direccionamiento y tipos de datos

Estructura y Tecnología de Computadores. Módulo C. Arquitectura del procesador. Tema 4. Modos de direccionamiento y tipos de datos 1 Estructura y Tecnología de Computadores Módulo C. Arquitectura del procesador Tema. Modos de direccionamiento y tipos de datos José Manuel Mendías Cuadros Dpto.. Arquitectura de Computadores y Automática

Más detalles

Universidad Nacional de Ingeniería Arquitectura de Maquinas I. Unidad II: Arquitectura y Programacion de un Microprocesador (80X86)

Universidad Nacional de Ingeniería Arquitectura de Maquinas I. Unidad II: Arquitectura y Programacion de un Microprocesador (80X86) Universidad Nacional de Ingeniería Arquitectura de Maquinas I Unidad II: Arquitectura y Programacion de un Microprocesador (80X86) Arq. de Computadora I Ing. Carlos Ortega H. 1 Interrupciones FUNCIÓN INT

Más detalles

Ejercicios del tema 4. El procesador

Ejercicios del tema 4. El procesador jercicios del tema 4. l procesador jercicio 1. Considere un procesador de 32 bits con una frecuencia de reloj de 500 MHz con la estructura del mostrado en el jercicio 3. La memoria se direcciona por bytes

Más detalles

Instrucciones de Control de Flujo y Usos de la Pila

Instrucciones de Control de Flujo y Usos de la Pila 1 Instrucciones de Control de Flujo y Usos de la Pila Objetivos Generales Facultad: Estudios Tecnologicos. Escuela: Electrónica Asignatura: Microprocesadores Analizar la forma en que se ejecutan algunas

Más detalles

Arquitecturas de DSP TMS320F28xxx

Arquitecturas de DSP TMS320F28xxx ... 7 de febrero de 2017 Universidad Nacional Autónoma de México Indice Kernel de un DSP 1 Kernel de un DSP Unidad central de proceso Indice Kernel de un DSP 1 Kernel de un DSP Unidad central de proceso

Más detalles

Operaciones lógicas y repetición

Operaciones lógicas y repetición Organización de computadoras Universidad Nacional de Quilmes http:// Repaso Algebra de Boole Memoria principal datos direcciones Unidad Aritmético- Logica (ALU) Unidad de Control de programa (UC) CPU 1

Más detalles

2. PANTALLA ALFANUMÉRICA DE LCD (HITACHI HD44780U)

2. PANTALLA ALFANUMÉRICA DE LCD (HITACHI HD44780U) 2. PANTALLA ALFANUMÉRICA DE LCD (HITACHI HD44780U) Este controlador de la casa Hitachi se usa para mostrar caracteres alfanuméricos en paneles LCD de matriz pasiva (los típicos que se pueden encontrar

Más detalles

MICROPROCESADORES. ANL C, <orig.bit>: Y lógico entre el bit y el indicador de acarreo.

MICROPROCESADORES. ANL C, <orig.bit>: Y lógico entre el bit y el indicador de acarreo. Instrucciones Booleanas. El 8051 contiene un completo procesador Booleano (por bits), el cual permite ejecutar instrucciones de limpieza, establecimiento o complementación de un solo bit, y operaciones

Más detalles

EVOLUCIÓN HISTÓRICA DE LOS µp

EVOLUCIÓN HISTÓRICA DE LOS µp EVOLUCIÓN HISTÓRICA DE LOS µp El primer procesador fue inventado por los Babilonios en el año 500 ac En 1642 se perfeccionó la primera calculadora por Blas Pascal A mediados del siglo pasado se inventaron

Más detalles

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION DIIAGRAMAS DE FLUJO Un diagrama de flujo es un dibujo que utiliza símbolos estándar de diagramación de algoritmos para

Más detalles

TEMA 1. La familia de microcontroladores 80C51

TEMA 1. La familia de microcontroladores 80C51 TEMA 1 La familia de microcontroladores 80C51 INDICE 1. Nucleo de CPU y ampliación de memoria. 1.1 Introducción a los microcontroladores. 1.2 Familias de Microcontroladores 1.3 La familia del MCS-51. Características

Más detalles

INDICE Programa Entrada Unidad de control Unidad aritmética y lógica (ALU)

INDICE Programa Entrada Unidad de control Unidad aritmética y lógica (ALU) INDICE Capitulo 1. Qué es un computador? 1.1. Introducción 1 1.2. El computador como dispositivo electrónico 2 1.3. Cómo se procesa la información? 3 1.4.Diagrama de bloques de un computador 1.4.1. Información

Más detalles

2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 1 - INTRODUCCIÓN JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ

2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 1 - INTRODUCCIÓN JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ ARQUITECTURAS DE COMPUTADORES 2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 1 - INTRODUCCIÓN JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ Tema 1.MaNoTaS 1 Definiciones (I) Descripción Un

Más detalles

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Microprocesador. Introducción. Instituto Sagrado Corazón de Jesús

Microprocesador. Introducción. Instituto Sagrado Corazón de Jesús Microprocesador Introducción El microprocesador es la parte de la computadora diseñada para llevar acabo o ejecutar los programas. Este viene siendo el cerebro de la computadora, el motor, el corazón de

Más detalles

Memoria y Buses. Organización de Computadoras Universidad Nacional de Quilmes

Memoria y Buses. Organización de Computadoras Universidad Nacional de Quilmes Memoria y Buses Organización de Computadoras Universidad Nacional de Quilmes Índice 1. Memoria Principal e instrucciones 1 1.1. Operaciones sobre la memoria.................... 3 1.2. Interconexión.............................

Más detalles

Tema: Lenguaje ensamblador embebido

Tema: Lenguaje ensamblador embebido Compiladores. Guía 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Lenguaje ensamblador embebido Contenido En esta guía se presenta una breve introducción a las estructuras

Más detalles

SISTEMAS OPERATIVOS Arquitectura de computadores

SISTEMAS OPERATIVOS Arquitectura de computadores SISTEMAS OPERATIVOS Arquitectura de computadores Erwin Meza Vega emezav@unicauca.edu.co Esta presentación tiene por objetivo mostrar los conceptos generales de la arquitectura de los computadores, necesarios

Más detalles

Tema 1. Fundamentos del lenguaje ensamblador

Tema 1. Fundamentos del lenguaje ensamblador Tema 1. Fundamentos del lenguaje ensamblador Laboratorio de Estructura y Organización de Computadores Grados en Ingeniería Informática e Ingeniería de Computadores Curso 2012-2013 Índice Estructura del

Más detalles

Arquitectura de Computadoras

Arquitectura de Computadoras 4-1 Arquitectura de Computadoras Tema 4: Arquitectura del Set de Instrucciones Eduardo Daniel Cohen dcohen@arnet.com.ar http://www.herrera.unt.edu.ar/arqcom 4-2 Arquitectura del Set de Instrucciones Indice

Más detalles

AUTOMATIZACION. Reconocer la arquitectura y características de un PLC Diferenciar los tipos de entradas y salidas MARCO TEORICO. Estructura Interna

AUTOMATIZACION. Reconocer la arquitectura y características de un PLC Diferenciar los tipos de entradas y salidas MARCO TEORICO. Estructura Interna AUTOMATIZACION GUIA DE TRABAJO 3 DOCENTE: VICTOR HUGO BERNAL UNIDAD No. 3 OBJETIVO GENERAL Realizar una introducción a los controladores lógicos programables OBJETIVOS ESPECIFICOS: Reconocer la arquitectura

Más detalles

Capítulo 1. Introducción a los PIC de 8 bits

Capítulo 1. Introducción a los PIC de 8 bits Capítulo 1. Introducción a los PIC de 8 bits 1.1 Memorias y Registros Entre los componentes básicos de un microcontrolador podemos definir el contador, sus registros, la memoria, el watchdog timer, el

Más detalles

TEMPORIZADORES Y CONTADORES

TEMPORIZADORES Y CONTADORES Los µc51 tienen dos temporizadores/contadores, TIMER0 y TIMER1 de 16 bits cada uno. Cuando operan como temporizadores, los registros SFR s THx y TLx son incrementados cada ciclo de máquina, desde 0000H

Más detalles

Prácticas con el microprocesador Z80

Prácticas con el microprocesador Z80 Page 1 of 7 Prácticas con el microprocesador Z80 MC. Juan Gilberto Mateos Suárez ARQUITECTURA DEL MICROPROCESADOR Z80 El Z80 fué el primero de la tercera generación, sin embargo es uno de los microprocesadores

Más detalles

Bus de direcciones. Bus de datos

Bus de direcciones. Bus de datos 1) INTRODUCCIÓN A LA MÁQUINA SENCILLA La máquina sencilla (MS) es un computador concebido para fines exclusivamente didácticos. MS sólo dispone de dos bloques: Unidad Central de Proceso y memoria principal.

Más detalles

PRÁCTICA 2: Programas básicos. Tipos de direccionamiento.

PRÁCTICA 2: Programas básicos. Tipos de direccionamiento. SISTEMAS ELECTRÓNICOS Y AUTOMÁTICOS PRACTICAS DE MICROCONTROLADORES PIC PRÁCTICA 2: Programas básicos. Tipos de direccionamiento. Tipos de direccionamiento Ejemplos y ejercicios - 1 - 1. Objetivos - Introducir

Más detalles

Partes de una computadora. Conceptos Generales. Elementos de Computación (CU) Computación (TIG) El Hardware de una computadora

Partes de una computadora. Conceptos Generales. Elementos de Computación (CU) Computación (TIG) El Hardware de una computadora Elementos de Computación (CU) Computación (TIG) Unidad 3 Organización Básica de la Computadora Conceptos Generales Sistema Digital: Es un sistema en el cual la información se representa por medio de variables

Más detalles

Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1

Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1 Compiladores, Guía 11 1 Tema: GENERACION DE CODIGO. Facultad : Ingeniería Escuela :Computación Asignatura:Compiladores Objetivo Reconocer las diferentes instrucciones para la generación de código.ensamblador

Más detalles