Anda di halaman 1dari 27

El RCX: CPU, memoria y dispositivos de entrada / salida El RCX es un controlador programable que integra los tres componentes principales

de un dispositivos de ordenador, procesador, memoria, y de entrada/salida en un solo ladrillo de LEGO. Fsicamente , los componentes electrnicos de la computadora dentro del RCX se compone de una placa de circuito impreso y una fuente de alimentacin basado en pila de 9V. En los chips de la tarjeta de circuitos y otros componentes electrnicos se montan y se conecta, por ejemplo, el H8/3292 microcontrolador de un solo chip, un chip de RAM 32Kbytes, fichas de control del motor, la pantalla LCD y LCD chips controladores, un altavoz, las conexiones a la entrada RCX / puertos de salida de la cubierta de plstico y los contactos de los cuatro botones de goma. Fotos de un RCX desmontado con una lista detallada de los componentes se pueden obtener de: Internos RCX . La estructura lgica del controlador RCX es la de un ordenador personal de gama baja simple con un solo bus se utiliza para conectar el procesador, memoria y dispositivos de entrada / salida. De entrada / salida se asigna memoria y cada dispositivo consta de dos partes: una que contiene los componentes electrnicos del dispositivo de interfaz al bus, y una que contiene los componentes mecnicos y electrnicos del dispositivo en s. Ejemplos de los componentes mecnicos y elctricos de los dispositivos en el RCX incluye botones, pantalla LCD y los altavoces, sino tambin las construcciones mecnicas y elctricas construyen con ladrillos LEGO, incluyendo los sensores y actuadores de interfaz y los dispositivos que dependen de aplicaciones para el RCX. Esto demuestra que el nivel de abstraccin determina lo que ha de considerarse como la parte de interfaz y lo que se ha de considerar como el propio dispositivo. La parte de interfaz se conoce normalmente como el controlador de dispositivo. Es la estructura lgica que es til pensar en la hora de programar el controlador RCX. Los componentes de la estructura lgicamente se describirn ahora desde un punto de vista de los programadores. La CPU RCX El procesador visto por el programador es la: CPU H8/300 . Es impulsado por un reloj del sistema con la frecuencia de 16 MHz. La CPU tiene ocho registros de propsito general de 16 bits (R0 - R7, R7 se usa como

puntero de pila (SP)), un contador de programa de 16 bits (PC), y un cdigo de condicin de registro de 8 bits (cc). El registro de cdigo de condicin incluye los bits aritmticos de estado como el acarreo, desbordamiento, y cero, y, adems, la mscara de bits de interrupcin que controla mundial desactivar / activar las interrupciones. El conjunto de instrucciones incluye registro a registrar la aritmtica, adems de por ejemplo 16-bit, 16-bit resta, multiplicacin de 8 bits, y la divisin 16-bit/8-bit. Adems, hay la lgica usual operaciones XOR, o, y, no, las operaciones de cambio, manipulacin de bits, rama, llamada y retorno de subrutina, el retorno de excepcin (alarma) y la instruccin del sueo para entrar en el modo de bajo consumo de energa. Los tipos de datos incluyen bits, nibbles 4 bits (embalado BCD), byte, y la palabra (2 bytes). Los modos de direccionamiento son:
Modo de direccin El lenguaje ensamblador Registro directo rn Registrarse indirecta @ Rn Registrarse indirecta con desplazamiento de 16 bits @ (D: 16, rn) Registro indirecto de incremento @ Rn + Registro indirecto de incremento previo @-Rn Direccin absoluta (8 o 16 bits) @ Aa: 8, @ aa: 16 Inmediata (8 -, o datos de 16 bits) # Aa: 8, # aa: 16 PC-relativa (desplazamiento de 8 bits) @ (D: pc) Indirecto por memoria @ @ Aa: 8

La memoria RCX El H8/3292 ficha del RCX funciona en el modo 2 . El modo se puede leer como los valores de bit 1 y el bit 0 en el modo de control Registrarse en direccin 0xffc5. En el modo 2 de la ROM en el chip, la memoria RAM, y el campo de registro estn habilitadas. Adems, el 32 Kbytes chip de memoria RAM externa se asigna al espacio de direcciones de 16 bits por la lgica de decodificacin de direcciones externa. Slo podemos acceder al chip de memoria RAM externa cuando usamos direcciones en aquellas partes del espacio de direcciones que no es ocupada por la memoria en el chip. El mapa de memoria se determina por lo tanto por la eleccin del modo 2 y la decodificacin de direcciones externa. El diseo de la memoria resultante es como sigue:
Rango de Tipo de memoria Contenido Direccin 0x000 - 0x3FFF mscara ROM programable H8/3292 vectores de interrupcin , RCX

en un chip 0x8000 - 0xefff fuera de chip de RAM 0xf000 0xfd80 - 0xff7f 0xff88 - 0xffff registro off-chip en-chip de memoria RAM on-chip campo de registro

ejecutivos programa / datos registro de dispositivo para los puertos de salida de RCX Vectores de interrupcin RCX / programa / datos H8/3292 registros del dispositivo

La entrada / salida Dispositivos RCX Los dispositivos de entrada / salida RCX consta de dos partes: el controlador de dispositivo de entrada / salida RCX y el propio dispositivo de entrada / salida RCX. El controlador de dispositivo de RCX es el dispositivo como se ve desde el interior, es decir, como se ve desde el punto de vista de los programadores, el propio dispositivo de entrada / salida RCX es el dispositivo como se ve desde el exterior. Visto desde el interior, los cuatro botones son cuatro bits en los registros de memoria asignados de dos H8/3292 puertos de entrada / salida, visto desde el exterior, los botones son botones de plstico colocadas en la cubierta de plstico del RCX.Dado que vamos a describir los dispositivos RCX desde el punto de vista de los programadores, vamos a describir principalmente la parte controladora dispositivo RCX. Un programa que se ejecuta en la CPU RCX comunicarse y sincronizarse con los dispositivos de RCX en la forma habitual a travs de registros del dispositivo y las interrupciones. Por lo tanto, la comunicacin y la interfaz de sincronizacin para cada controlador de dispositivo RCX es los registros del dispositivo RCX y alarmas RCX que es proporcionado por el controlador de dispositivo de RCX. La mayora de los controladores de dispositivos RCX se basan en los componentes de entrada / salida H8/3292. El dispositivo de mapeado registros de memoria de la componente de entrada / salida H8/3292 tambin se utiliza como los registros del dispositivo RCX y las interrupciones proporcionadas por el componente de entrada / salida H8/3292 tambin se utilizan como interrupciones del dispositivo RCX. La nica excepcin son los puertos de salida del RCX. Estos se basan en componentes electrnicos externos, por lo que el controlador de puerto de salida RCX qu no usar la entrada H8/3292 / componentes de salida. El dispositivo se registra de la que se accede al controlador de salida RCX a travs de las direcciones / datos pins del H8/3292. Esto significa que son la memoria asignada al espacio de direcciones no se utilizan por los recuerdos en el chip. Por lo tanto, el dispositivo registra

RCX de los puertos de salida RCX son no parte del registro rango de direcciones campo en el chip. Los controladores de dispositivos RCX se basan en los H8/3292 los componets de la siguiente manera:
RCX dispositivo Dispositivo registra Interrupciones controlado registros de dispositivos de puertos 4 y 7 I / O. Se utilizan dos lneas de entrada de 4 Run est conectado a botones puertos y dos puertos 7. IRQ0, IRQ1 registros IRQ0, OnOff a IRQ1 del dispositivo dispositivo se registra de un convertidor de puertos de entrada registros y el dispositivo / D del puerto de E / S Una interrupcin / D 6. Se utilizan tres lneas de salida de puerto 6 nivel de voltaje de dispositivo se registra de convertidor A / D Una interrupcin / D la batera interrupciones del temporizadores registros del dispositivo de temporizadores temporizador dispositivo se registra de SCI, puerto I / O 4, y Interrumpe SCI, emisor / receptor el temporizador 1. Se utiliza una lnea de salida temporizador 1 de infrarrojos de 4 puertos interrupciones registros de dispositivos de puerto de E / S LCD sin interrupciones 6. Se utilizan dos lneas de puerto 6 registros de dispositivos de puerto 6 y el 0 temporizador de altavoz temporizador 0 I / O. Se utiliza una lnea de interrupcin salida del puerto de 6 registro de dispositivo en el espacio de puertos de salida sin interrupciones direcciones externa

El acceso a los registros de dispositivos RCX Los bits de los registros del dispositivo RCX se puede acceder directamente por bitmanipulation en un programa escrito en lenguaje ensamblador o C. Vamos a utilizar C para ilustrar por ejemplo, cmo un solo bit se puede borrar o establecer en un dispositivo de registro. Los siguientes tipos y nombres de acceso fcil a los bytes y palabras del dispositivo de registros:
typedef unsigned char byte, palabra sin signo int corto typedef; / * Un convertidor A / D * / / * A D Control / Estado / Registro * / # define ADCSR * ((byte voltil *) 0xffe8) # define ADF (1 << 7 ) / * A D Flag, bit 7 * / # define ADST (1 << 5) / * A / D de inicio, bit 5 * / / * A / D Datos Registro A * / # define ADDRA * ((word / voltil *) 0xffe0)

El encasillado en la primera define la direccin se vuelve constante 0xffe8 en un puntero a un byte. El * (...) toma el contenido del byte apuntado por la direccin. El voltil se necesita calificador para evitar que un compilador de optimizacin para leer el contenido del byte o palabra slo una vez, por ejemplo, fuera de un bucle que espera a que el valor del dispositivo de registro para cambiar. Estos tipos y definiciones pueden utilizarse para, por ejemplo, iniciar una conversin de A / D del canal 0, esperan final de conversin y leen los 10 bits que resultan de los datos A / D registren A:
ADCSR = 0; ADCSR | = ADST; / * Inicio de conversin * / while / * Espera hasta el fin de la conversin * / ADCSR & = ~ ADF; / * Lee registro y claro ADF * / Port3 ((ADCSR y ADF)!) = ((ADDRA >> 6) y 0x03FF); / * Desplazamiento de un nmero entero en [0 .. 1023] * /

Operaciones bit a bit en C se describen en Kernighan y Ritchie, p. 48, 49 y p. 149, 150. Interrupciones RCX y Manejadores de interrupciones La tabla de vectores H8/3292 comienza en la direccin 0x0000 y el ltimo vector de la tabla est en la direccin 0x0048. Las entradas de esta tabla son fijados por el ROM en el chip. Cada entrada contiene una direccin que apunta a un despachador de interrupcin de ROM en el chip, un despachador para cada vector de interrupcin. Para cada despachador de interrupcin hay una entrada en una tabla en la memoria RAM en el chip que se utiliza como una direccin de una rutina de envo a cuando se ha producido una interrupcin H8/3292. Esta tabla en la memoria RAM en el chip puede ser utilizado para instalar un controlador de interrupcin para cada una de las interrupciones manejadas por el hardware de interrupcin H8/3292. Por lo tanto, el mecanismo de interrupcin H8/3292 hardware se ha convertido en un mecanismo de interrupcin RCX por el contenido de la ROM en el chip con los vectores de interrupcin RCX en la memoria RAM en el chip. La aplicacin de este mecanismo se puede describir de la siguiente manera:
H8/3292 interrupcin Direccin vector: Direccin de interrupcin interrupcin despachador despachador: push r6 mov @ RCX direccin de interrupcin vector, r6 jsr @ r6 r6 pop rte direccin de vector de interrupcin RCX: Direccin de RCX interrupcin controlador controlador de interrupciones RCX: guardar registros necesarios para el manejo de interrupciones mango interrumpir restaurar registros de retorno guardada para interrumpir despachador (RTS)

El contenido de la pila en la entrada al controlador de interrupcin est determinada por el mecanismo de H8/3292 interrupcin y el despachador de interrupcin. El contenido es:

Contenido direccin sp regreso a despachador sp - 2 r6 del programa interrumpido sp - 4 cc de interrupcin del programa sp - 6 pc de programa interrumpido

Por otra parte, las interrupciones estn deshabilitadas en la entrada al controlador de interrupciones RCX hasta que la instruccin rte es ejecutado por el despachador a menos que el bit de interrupcin de cc est explcitamente autorizada por el controlador de interrupciones RCX. Por lo tanto, cuando el bit I no se borra, las acciones del controlador de interrupcin es un RCX, operacin atmica no interrumpible indivisible (MOS, captulo 2), ya que las interrupciones no enmascarable no se utilizan en el RCX. El manejador de interrupciones RCX se pueden programar e instalar en lenguaje ensamblador y C. Vamos a utilizar C para ilustrar cmo instalar un controlador de interrupciones RCX para el botn Ejecutar . Las siguientes definiciones facilitan la instalacin de un controlador de interrupciones RCX:
# Define Int_Handler (RCX_Vector_Addr) (* (void (**) (void)) (RCX_Vector_Addr)) # define IRQ0_Addr 0xfd94 / * RCX IRQ0 Interrupt Vector Direccin * / # define Run_Button_Interrupt_Handler Int_Handler (IRQ0_Addr)

El encasillado convierte el RCX_Vector_Addr en un puntero a una rutina que no toma parmetros y devuelve ningn resultado. La ltima definicin se puede utilizar para instalar por ejemplo, la rutina C RunInt como el controlador de interrupciones para el botn Run:
Run_Button_Interrupt_Handler = RunInt;

donde la rutina RunInt se define por ejemplo, de la siguiente manera:


Conde r3 r4 pulsa r1 r2 int16; void RunInt (void) {asm ("push r0 r1 empuje empuje empuje r2 empuje empuje r5"); / * Incremento de contador global cuando se Run * / Contador = Contador + 1; asm ("pop pop r5 r3 r4 pop pop pop pop r0 ");}

Para habilitar las interrupciones desde el botn Ejecutar y definir el evento que activa la alarma, hay que acceder a las IRQ registros del dispositivo:
/ * Registro de Control Sense IRQ IRQ y Enable Register * / # define ISCRaddr 0xffc6 # define IERaddr 0xffc7 # define ISCR * ((byte *) ISCRaddr) # define IER * ((byte *) IERaddr)

Para activar una interrupcin por el flanco de bajada del estado del botn Run (cuando se pulsa el botn Ejecutar) y para habilitar las interrupciones botn Ejecutar, los registros del dispositivo se deben inicializar de la siguiente manera:
ISCR = 1; IER = 1;

Botones

En la parte superior del RCX hay cuatro botones: View, On-Off, Prgm y Run.

Figura X Los cuatro botones de Vista, On-Off Prgm y Run. El Tutorial leJOS , (1.2.2006), Control del Hardware: Botones .

Los cuatro botones estn conectados a cuatro lneas de entrada de los puertos de entrada / salida H8/3292. Dos de los botones tambin puede iniciar interrupciones externas. Los detalles son los siguientes:
Botn Puerto de entrada Direccin Bitposition Interrumpir Ejecutar 4 puertos 0xffb7 bit 2 IRQ 0 OnOff 4 puertos 0xffb7 bit 1 IRQ 1 Ver puerto 7 0xffbe bit 6 sin interrupcin Prgm puerto 7 0xffbe el bit 7 sin interrupcin

El valor del bit obtenido en una lectura es 0 cuando se pulsa el botn y 1 cuando se suelta el botn. El valor de bit para cada botn se puede acceder directamente desde los registros del dispositivo por bitmanipulation. Usaremos C para ilustrar cmo los estados del botn se puede utilizar como entrada para un programa de C. Podemos definir los siguientes nombres para facilitar el acceso a, por ejemplo el estado del botn Run:

# Define port4_addr 0xffb7 # define Port4 * ((byte voltil *) port4_addr) # define Run! (Port4 y (<< 1 2))

El ltimo define permite utilizar Ejecutar como una expresin que tiene el valor 1 cuando se pulsa el botn Ejecutar y 0 cuando es liberado. El valor de ejecucin se puede utilizar por ejemplo para detener un bucle:
while (! Run) {... }

RCX Puertos de Entrada

En el lado superior de la RCX es posible conectar los sensores a los puertos de entrada RCX marcadas 1, 2 y 3.

Figura X Los tres puertos de entrada del RCX. El Tutorial leJOS , (1.2.2006), Control del Hardware: Sensores .

Los sensores son de dos tipos: pasivos y activos sensores. Los sensores pasivos son el tacto y sensores de temperatura. Los sensores activos son la luz y sensores de rotacin. Desde un punto de vista de la programacin de los dos tipos son tratados de manera diferente.

Figura X Los cinco LEGO estndar sensores. El Tutorial leJOS , (1.2.2006), Control del Hardware: Sensores .

El uso de sensores conectados a los puertos de entrada requiere una comprensin de la electrnica de los sensores y los puertos de entrada. Una descripcin detallada de esto se puede encontrar en el funcionamiento interno de los puertos de entrada y sensores . Adems, tambin requiere el conocimiento de RCX programacin para ser capaz de obtener los valores de los sensores conectados a los puertos de entrada. Esto se describe en el siguiente. Para obtener un valor de entrada desde un sensor pasivo se utiliza el convertidor A / D. Para un sensor activo, como el sensor de luz tambin tenemos que encender una luz de diodo emmitting iluminacin (LED) para que la luz roja en la parte exterior del sensor de luz se enciende. Esto se logra a travs de una de las tres lneas de salida de puerto de E / S 6. El sensor de rotacin tambin contiene

LEDs que tienen que ser encendido. Estos LEDs estn construidos en el LEGO azul ladrillo y no son visibles desde el exterior. Los tres puertos de entrada RCX estn conectados a los canales del convertidor A / D y las lneas de salida de puerto de E / S 6 de la siguiente manera:
Puerto de entrada Un Canal / D Lnea de salida 1 Pin de entrada analgica 2 (AN2) Puerto 6, bit 2 2 Pin de entrada analgica 1 (AN1) Puerto 6, bit 1 3 Pin de entrada analgica 0 (AN0) Puerto 6, bit 0

El valor de entrada del sensor se obtiene para ambos tipos de sensores a travs de una conversin A / D. El dispositivo se registra del convertidor A / D se utiliza para iniciar una conversin, para controlar el final de la conversin, y para acceder al valor de entrada resultante convertida 10 bits del sensor. El A / D de control / registro de estado se utiliza para iniciar la conversin y para sondear el final de la conversin. El fin de la conversin tambin se puede sealizar con una interrupcin final A / D. Los datos A / D registra resultados tiendas de conversiones. El registro de datos contiene el valor convertido de 10 bits en los 10 bits ms significativos de una palabra de 16 bits. Los registros de datos se conectan a los canales A / D y los valores convertidos se pueden leer en las siguientes direcciones:
Puerto de entrada Un Canal / D Registro Abreviatura Direccin 1 AN2 Un dato / D registrar un ADDRC 0xffe4 2 AN1 A / registro de datos B D ADDRB 0xffe2 3 AN0 A / D datos de registro C ADDRA 0xffe0

El A / registro de control / estado D (ADCSR) es un dispositivo de registro de 8 bits en la direccin 0xffe8. Los bits se utilizan de la siguiente manera:
Poco Nombre 7 A / D End Flag Abreviatura Significado deben ser aprobados por el programa en el extremo ADF de la conversin, establecido por convertidor para sealar el fin de la conversin 0: Alarma de personas con discapacidad; 1: Alarma activada 0: la conversin se detuvo; 1: Conversin de inicio 0: monomodo; 1: modo de escaneo 0: la conversin lenta; 1: conversin rpida

6 5 4 3

A / D End habilitacin de ADIE interrupcin A / D de inicio ADST Scan Mode SCAN Reloj Seleccione CKS

2 a 0 Seleccin de canal

CH2 a CH0 Selecciona el canal (s)

Los canales seleccionados bits se utilizan para seleccionar uno de los tres puertos de entrada para la conversin (modo individual) o seleccionar ms de una (modo de digitalizacin), por ejemplo:
Puerto de entrada CH2 a CH0 Modo 1 010 solo 2 001 solo 3 000 solo 1,2,3 010 escanear

Un ejemplo sencillo de un D conversin de un valor nico pasador / se muestra en el mdulo de AD.h . El mdulo InputPorts.h contiene funciones para introducir valores de los sensores pasivos y activos. En RCX Programacin, Leccin 1 estos Mdulos se utilizan para interpretar la entrada del sensor de luz en colores diferentes. Transmisor / Receptor de infrarrojos El RCX utiliza luz IR (infrarrojos) para comunicarse con un host u otro RCX.

Figura X El transmisor de infrarrojos y receptor. El Tutorial leJOS , (02/15/2004), Control del Hardware: La interfaz IR .

El IR Transmisor / Receptor se basa en la interfaz de comunicacin serie on-chip (SCI, consulte la Seccin 11 de Hitachi H8/3292 ). El SCI acta como un controlador de dispositivo para la comunicacin por infrarrojos de serie. La luz infrarroja enciende y se apaga con una frecuencia de 38,5 kHz se usa como un vehculo para el flujo en serie de bits: valor de bit 0 se representa como un intervalo de tiempo con el portador de luz infrarroja activada, valor de bit de 1 como un intervalo de tiempo sin luz infrarroja. La frecuencia de la onda portadora, 38,5 kHz, es proporcionado por la salida del contador de tiempo del temporizador 1. La transmisin por infrarrojos se puede realizar de dos modos: modo de rango corto y largo plazo. Pin 0 de Port 4 determina el modo de transmisin, para abreviar 1 y 0 para la gama larga. La luz infrarroja emitida no slo es recibida por otros receptores de infrarrojos, sino tambin por el receptor en el RCX transmitir. Esto significa que la transmisin simultnea por dos o ms,

es decir, colisin, se puede detectar mediante inspeccin de la corriente de bits recibida. La duracin del intervalo de tiempo para un nico bit est relacionada con la velocidad de transmisin seleccionada en la SCI. Con una velocidad de 2400 bit / s el intervalo de tiempo es de 417 us = 1 bit/2400 bit / seg. El formato de comunicacin utilizado en la comunicacin serie se selecciona a travs de los registros del dispositivo de la SCI. Una declaracin en C de estos registros se puede ver en el mdulo SCI.h . El transmisor / receptor de infrarrojos se pueden utilizar tanto programa impulsado y controlado por alarma como se muestra por el conjunto de rutinas de C-incluido en el mdulo de IR.h . En RCX Programacin, Leccin 3 se presenta un ejemplo de los programas de RCX que se comunican mediante este mdulo Pantalla de Cristal Lquido (LCD) En el lado superior de la RCX no es una pantalla LCD.

Figura X La pantalla LCD muestra un hombre LEGO a poca posicin, el nmero uno a la derecha del hombre LEGO y una indicacin de la direccin del motor por encima de la letra A. El Tutorial leJOS , (1.2.2006), Control del Hardware: LCD .

La pantalla de LCD contiene 43 segmentos. Un segmento es una figura o un smbolo por ejemplo, un punto, una flecha o las piernas de un hombre pequeo LEGO. Cada segmento puede ser controlado individualmente girando dentro o fuera. Esto se logra a travs de un controlador de LCD. La comunicacin con el controlador de la LCD se lleva a cabo en una lnea serie que consta de dos alambres. En el RCX estos dos cables se conectan al puerto I / O 6, bit 5 y 6 bits. La lectura y la escritura de estos dos bits se utiliza para controlar la pantalla LCD desde el RCX. El on-chip ejecutivo RCX utiliza un protocolo sobre la lnea serie para aplicar una serie de operaciones de alto nivel en la pantalla LCD: Un rea de memoria contiene un bfer LCD con un bit para cada segmento, las rutinas ejecutivas RCX escriben en el buffer, y llamadas explcitas a una rutina de RCX ejecutivo, actualizar ( vase rutinas LCD ), utiliza el protocolo para actualizar la pantalla para que los segmentos se muestran u ocultan que

corresponde a los valores de los bits reales en el bfer LCD. El conocimiento detallado del protocolo y el bfer LCD se puede obtener de Internos RCX . Altavoz La acumulacin en el altavoz se puede controlar a travs del puerto I / O 6, bit 4. Antes de que el altavoz se puede utilizar, la Direccin de Registro de Datos I / O port 6 se debe establecer en la produccin por ejemplo de la siguiente manera:
# Define P6DDR * ((byte voltil *) 0xffb9) # define P6DDR_ROM * ((byte voltil *) 0xfd85) # define P6DR * ((byte voltil *) 0xffbb) # define bit4 (1 << 4) # define SpeakerHigh P6DR | = bit4 # define SpeakerLow P6DR & = ~ bit4 / * Inicializa bit4 del puerto 6 como salida. * / P6DDR_ROM | = bit4; P6DDR = P6DDR_ROM;

Para hacer sonidos bit 4 del puerto de salida debe ser cambiada con intervalos de tiempo adecuados entre alternancia. Por ejemplo, un tono de frecuencia de 500 Hz se produce mediante la repeticin:
SpeakerHigh; Espere un ms; SpeakerLow; Espere un ms;

La conmutacin del bit 4 tambin puede ser controlado por el temporizador de salida de temporizador 0. RCX Puertos de salida El RCX tiene tres puertos de salida etiquetados A, B, y C. Una variedad de actuadores se puede conectar a los puertos de salida. Los actuadores disponibles de LEGO son motores, lmparas, y una serie de elementos de sonido. Cada puerto de salida puede conducir a uno o ms actuadores. Si por ejemplo, un motor y una lmpara se conecta a un solo puerto, la luz indicar cuando el motor est activo.

Figura X Los tres puertos de salida RCX A, B y C. Desde el Tutorial leJOS , (10.2.2004), Control del Hardware: Motors .

Los puertos de salida son impulsados por la corriente de la fuente de alimentacin de la batera V 9. El estado del flujo de corriente a travs del accionador conectado a un puerto de salida est controlada por el contenido de la salida de los puertos de dispositivo de registro RCX en la direccin

0xf000. Cada puerto est controlado por dos bits en el registro dispositivo de 8 bits.
Puerto de salida La B C Bits bits 7 y 6 bit 3 y 2 bit 1 y 0

Estos campos de bits del puerto de salida se pueden consultar en la direccin de registro de dispositivo. Por ejemplo, para establecer el estado del puerto de salida de la A a la 2 se puede hacer en C de la siguiente manera:
# Define OutputPorts * ((byte voltil *) 0xf000): # define AMASK 0xc0 byte temp, temp = OutputPorts; temp & = ~ AMASK; temp | = (2 << 6); OutputPorts = temp;

Los cuatro valores posibles de los dos bits corresponden a cuatro maneras diferentes de controlar el estado del flujo de corriente a travs del actuador. Los valores 01 y 10 permite que la corriente fluya en cualquiera de las dos direcciones. Esto permite el control bidireccional del flujo de corriente. El valor 00 desconectar el actuador del suministro elctrico. El valor 11 conecta los dos terminales del actuador a la misma polaridad de la fuente de alimentacin. Internals de puertos de salida y Actuadores contiene ms detalles sobre la conexin entre la fuente de alimentacin y los puertos de salida. Para que sea ms fcil para programar el control de los actuadores conectados a los puertos de salida de un C-rutina simple se puede programar para cada puerto que establece el estado actual del puerto. Por ejemplo, para el canal A puede tener el siguiente aspecto:
# Define Float 0 # define OnPos 1 # define OnNeg 2 # define freno 3 void PortA (estado byte) {temp byte; temp = OutputPorts; temp & = ~ AMASK; temp | = (estado << 6); OutputPorts = temp; }

Una llamada a la rutina Puerto A establece el estado del puerto de salida correspondiente a uno de los cuatro estados actuales (denominado flotador, OnPos, OnNeg, y freno ) en funcin del valor real del parmetro de estado . Tal conjunto de rutinas de C se incluyen en el mdulo OutputPorts.h . El efecto de los cuatro estados tiene en un actuador conectado al puerto de salida depende del actuador:
Bits de Motor Lmpara Flash salida 00 flotar, es decir, el modo de sin luz sin luz Elemento sonido sin sonido de

funcionamiento libre 01 10 11 girar en una direccin girar en la otra direccin freno luz luz sin luz la luz / la luz que uno alarmsound destella la luz / la luz que la otra destella alarmsound sin luz sin sonido

Vamos a considerar un coche conducido por los motores conectados al puerto A y C y le permite llamar a los cuatro estados actuales de Float, OnPos, OnNeg, y el freno que antes. Estado OnPos y OnNeg harn la rueda en el motor gire en sentido horario o antihorario dependiendo de cmo estn conectados los cables a los puertos de salida y los motores. A cambio de una potencia estatales OnPos o OnNeg a un estado sin alimentacin Float o freno tiene efectos muy diferentes sobre la locomocin de un coche. Un cambio de frenos forzar el coche se detenga inmediatamente. Un cambio a la flotacin permite que el motor para hacer girar libremente y el coche se deslice.

Figura X Dos motores conectados al puerto A y C. De La Tutorial leJOS , (10.2.2004), Control del Hardware: Motors .

El C-rutinas Porta, PortB y PORTC nos permite utilizar el programa impulsado por el control de los puertos de salida. Por ejemplo, para hacer una lmpara en el puerto un parpadeo podramos repetir lo siguiente:
PortA (OnPos); espere un ms; PortA (Float); Espere un ms;

El C-rutina tambin se puede utilizar para escribir C-rutinas para el control de locomociones de automviles. Por ejemplo:
/ * Define los estados de energa que hacen que las ruedas de traccin del coche hacia adelante y hacia atrs. Las conexiones entre los motores y los puertos deben ser cambio a realizar estos estados corresponden a los locomociones coches reales. * / # Define Aback OnNeg # define OnPos Aforward # define cBACK OnNeg # define OnPos Cforward void CarCoast (void) {PortA (Float); PORTC (Float);} void CarBrake (void) {PortA (freno); PORTC (frenos) ;} void CarGoForward (void) {PortA (Aforward); PORTC (Cforward);} void CarGoBackward (void) {PortA (Aback); PORTC (cBACK);} void CarSpinClockwise (void) {PortA (Aforward); PORTC (cBACK );} void CarSpinCounterClockwise (void) {PortA (Aback); PORTC (Cforward);}

Si los cambios de estado de un puerto de salida pasan bastante rpido, por ejemplo OnPos, flotador, OnPos, flotador, ... con una duracin de 1 ms de cada estado, el efecto en una lmpara es que no brilla tan brillante como cuando la potencia todo el tiempo. Este modo de control del actuador se llama modulacin por ancho de pulsos (PWM). Cada estado de encendido se llama una puls y la duracin de los pulsos se llama elancho del pulso. La energa transferida a un dispositivo de accionamiento puede ser controlado mediante la variacin de la anchura de pulsos y el patrn de impulsos. Para llevar a cabo el control PWM puerto de salida, podemos utilizar el temporizador T0 del H8/3292 proporcionar interrupciones del temporizador con un perodo de, por ejemplo 1 ms. Estas interrupciones pueden utilizarse para llamar a un C-rutina que proporciona un patrones regulares de los cambios de estado de un puerto de salida. El mdulo MotorControl.h utiliza el control PWM para conducir a los puertos de salida A y C. Cada puerto de salida puede ser manejado en 16 niveles diferentes de energa proporcionados por 16 diferentes patrones puls. En programacin RCX, leccin 2 se muestra un ejemplo de un programa en C que conduce un coche utilizando rutinas en este mdulo. El Ejecutivo RCX Cuando el RCX se ha encendido o restablecer una base ROM ejecutivo se pone en marcha y controla el RCX. A travs del transmisor / receptor de infrarrojos otro equipo puede comunicarse con el ejecutivo. El ejecutivo ofrece un protocolo sencillo para realizar una descarga del programa desde otro ordenador al RCX. Cuando un programa se ha descargado, puede ser iniciado por el ejecutivo. Una vez en funcionamiento, el ejecutivo acta como un entorno de ejecucin para el programa, que ofrece servicios como rutinas de E / S para el acceso a los dispositivos de entrada / salida RCX. En Madvick y Donovan, Sistemas Operativos de 1974, un sistema ejecutivo se describe como sigue: "A medida que las computadoras se volvieron ms complejos, especialmente con respecto a la gestin de dispositivos de E / S, se desarrollaron sistemas ejecutivos que resida de forma permanente en la memoria y siempre Input / Output Control Servicios (IOC) para tareas de usuario ". Esto se ajusta a la funcin del sistema basado en la ROM en el RCX. Esta es la razn de llamarlo un ejecutivo . Otros lo llaman un sistema similar de un monitor de a bordo . La comunicacin con el Ejecutivo RCX El ejecutivo se comunica con otro equipo por medio de un simple protocolo de solicitud / respuesta : La computadora enva una solicitud, el ejecutivo hace lo

que se pide y enva una respuesta. La respuesta puede contener datos, por ejemplo los nmeros de versin, pero la respuesta puede ser tambin un sentido reconocimiento de que la solicitud ha sido atendida o que las cosas estn bien. La Solicitud / Respuesta Protocolo Las siguientes solicitudes pueden enviarse al Ejecutivo: Alive : comprueba si el ejecutivo est en marcha y que hay una buena conexin con el RCX. GetVersions : Obtener la versin del programa de aplicacin que se ejecuta en la parte superior de los poderes ejecutivo y ejecutivo. En las aplicaciones de Lego Mindstorms, esto es normalmente un intrprete de bytecode, referido como el firmware, consulte Kit de Desarrollo de Software, escribir programas RCX en Visual Basic, el Lego Mindstorms . EnterDownloadMode : Si un programa se est ejecutando en la parte superior de la ejecutiva se detiene el programa. Ahora el ejecutivo est listo para una descarga de programas. BeginDownload : Preparar el ejecutivo de una descarga de programas. DownloadBlock : Descarga un bloque de bytes en la memoria del RCX. RunProgram : Iniciar la ejecucin del programa descargado. Un programa descargado slo puede iniciarse si contiene el texto "Foro de bytes, cuando me llamo?", De lo contrario el Ejecutivo se niega a ejecutar el programa descargado. Cada peticin / respuesta se enva como un paquete de bytes. Un paquete contiene la solicitud real / respuesta con una cabecera aade a la parte delantera y un remolque aade al final:
paquete = encabezado de solicitud / respuesta remolque

donde
header = 0x55 0xff peticin / respuesta = remolque bytesequence = suma de comprobacin

La suma de comprobacin se obtiene como el byte menos significativo de la suma de los bytes de la solicitud / respuesta. Una solicitud est por lo tanto representa como una secuencia de bytes. El primer byte es el cdigo de solicitud , los siguientes bytes contienen los datos de la solicitud . Una respuesta tiene una estructura similar con el primer byte es el cdigo de respuesta , los siguientes octetos son los datos de respuesta . El cdigo de respuesta es el valor complementado bits del cdigo de peticin enviado. Para cada solicitud hay dos cdigos de peticin, la diferencia entre los dos cdigos es el valor de 4 bits en el byte. Esto es un poco de control de secuencia : El ejecutivo slo ejecuta la primera de una serie de peticiones con cdigos de peticin idnticos, la segunda y ms all no se ejecutan. La respuesta

enviada a la segunda solicitud y ms all es el mismo que el enviado a la primera. Para asegurarse de que la misma solicitud se ejecuta dos veces seguidas por el ejecutivo, utilice valores de los bits de control de secuencia alternativas. Esto es necesario en una secuencia de peticiones DownloadBlock. Ahora sigue una descripcin detallada de cada solicitud / respuesta. Para cada solicitud / respuesta de los dos cdigos de peticin / se indican los cdigos de respuesta (en hexadecimal), junto con el significado y la representacin de los datos de peticin / datos de respuesta.
Solicitar Vivo GetVersions Cdigos de Solicitud de datos peticin 10/18 ninguno 15/1d Clave Cdigos de Responder datos respuesta ef/e7 ninguno ROMVersion, ea/e2 ProgramVersion 9a/92 ninguno Resultar Resultar Texto

EnterDownloadMode 65/6d BeginDownload DownloadBlock RunProgram 75/7d 45/4d a5/ad

Clave ProgramEntryPoint, 8a/82 ProgramChecksum, Zero BlockSequenceNumber, BlockLength, DataBlock, ba/b2 BlockChecksum RunKey 5a/52

Clave : cinco bytes con los valores decimales de 1, 3, 5, 7, 11. La clave impide que un programa en ejecucin se detenga accidentalmente. ROMVersion : A cuatro BCD byte representa el nmero de versin del ejecutivo residente ROM. ProgramVersion : Un cuatro BCD byte representa el nmero de versin del programa de aplicacin. Cuando se est ejecutando ningn programa, los cuatro bytes son 0. ProgramEntryPoint : Un poco de direccin de 16 bits representado endian de dos bytes. Esta es la direccin donde el ejecutivo se inicia el programa descargado. ProgramChecksum : A dos bytes little endian representado entero de 16 bits sin signo. Se trata de los 16 bits menos significativos de la suma de todos los bytes de programa descargados en una secuencia de peticiones DownloadBlock. Zero : Un relleno de byte con el valor 0. BlockSequenceNumber : Un bloque de dos bytes de nmero de secuencia. Empieza con 1 en la primera solicitud DownloadBlock e incrementa en uno con cada solicitud consecutiva. Un valor de 0 se utiliza para la BlockSequenceNumber en la ltima solicitud DownloadBlock para marcar el final de una serie de peticiones DownloadBlock.

BlockLength : El nmero de bytes en el siguiente DataBlock. Representado como dos bytes little endian entero de 16 bits sin signo. DataBlock : Una secuencia de bytes de longitud BlockLength. BlockChecksum : Un byte calculado como el byte menos significativo de la suma de todos los bytes en el DataBlock. RunKey : El texto "LEGO ", representado como los cinco valores ASCII 76, 69, 71, 79, 174 (decimal). Texto : El texto "Slo un poco de la manzana!" representado como una secuencia de 26 valores ASCII. Resultado : Un valor byte. Un valor de 0 significa que el pedido se ha procesado correctamente por el ejecutivo. Un resultado distinto de cero significa que se ha producido un error. En DownloadBlock los valores de resultado tiene el siguiente significado: 1: no hay suficiente memoria 2: Formato de bloques malos 3: Error de suma de comprobacin en este bloque 4: Error de suma de comprobacin del programa 6: No en el modo de descarga El Protocolo de Byte Cada solicitud / respuesta se enva como un paquete de bytes en una lnea de comunicacin serie entre el ordenador y el RCX. Esta lnea serie se compone de dos dispositivos de transmisor / receptor de infrarrojos, una conectada a la computadora a travs de un puerto de comunicacin RS232, la otra construccin en el RCX. La velocidad de transmisin es de 2400, lo que es el nmero de bits enviados por segundo. Para marcar el inicio y el final de cada byte, un byte se enva precedida por un bit de inicio y seguido por un bit de parada. Adems, un nico bit de paridad se aade al byte. El bit de paridad se elige por lo que el nmero de bits en el valor del bit 9 enviado es impar. Por lo tanto, cada byte se enva como 11 bits. Adems, cada byte en un paquete, excepto la primera, es decir, 0x55, se enva como dos bytes, el byte en s y su complemento bits. El resultado es un paquete con un nmero igual de bits cero y uno bits (el byte 0x55 cabecera tambin tiene un nmero igual de bits de cero y uno). Esto permite que un receptor de infrarrojos para compensar un sesgo de seal constante (causada por la luz ambiental) simplemente restando el valor medio de la seal. Por lo tanto, cada valor de 8 bits en un paquete, excepto el primero, se enva como 22 bits en total. Con una velocidad de transmisin de 2400 esto se lleva a 22 bits / 2400 bit / seg = 9 mseg para cada byte. El Protocolo de bits

Cada bit de transmisin entre los dos dispositivos emisores / receptores de infrarrojos se representa con el valor bit 0 como un perodo usec 417 de luz infrarroja pulsado con una frecuencia de 38 kHz, y el valor de bit 1 como un perodo usec 417 sin luz infrarroja. La duracin del perodo de un nico bit est relacionada con la velocidad en baudios de la siguiente manera 1 bit/2400 bits / seg = 417 useg. El RS232 Transmisor / receptor de infrarrojos conectado El transmisor de infrarrojos / receptor conectado al puerto serie RS232, se hace eco de los bytes enviados por el ordenador al puerto serie. Esto significa que los bytes recibidos despus de enviar un paquete, es una copia del paquete en frente del paquete de respuesta recibido del ejecutivo RCX. Un programa para comunicarse con el Ejecutivo RCX Un sencillo programa RCX_Request_Reply.c se puede utilizar para investigar la comunicacin entre un ordenador UNIX y el ejecutivo RCX. El transmisor / receptor de infrarrojos deben estar conectados a un puerto serie dada por un nombre definido en el programa por el texto constante llamada DEFAULT_RCX_IR . Cambiar esto si es necesario o utilizar la variable de entorno RCX_IR para reemplazar la configuracin predeterminada. Las entradas del programa una peticin como una secuencia de bytes primas representadas hexadecimales. Este es enviado al ejecutivo RCX. A continuacin, el programa espera una respuesta. Despus de un tiempo ya sea una respuesta correcta se ha recibido o se ha producido un error. El programa da salida ya sea una respuesta como una secuencia de bytes representados primas hexadecimales o el curso de la insuficiencia. Para comprobar la vitalidad de la conexin y el RCX, podemos utilizar el programa de la siguiente manera:
RCX_Request_Reply 10 0000: ef

La solicitud Alive se enva como el cdigo de solicitud de prima 10 . La respuesta es ef , dando seales de que las cosas estn bien. Las versiones de los programas que se ejecutan en el RCX se obtienen a travs de:
RCX_Request_Reply 15 1 3 5 7 b 0000: ea 00 03 00 01 00 00 00 00

Ningn programa de aplicacin se est ejecutando, y la versin del ejecutivo es de 3.1. Ahora queremos descargar y ejecutar el siguiente programa en lenguaje ensamblador sencilla - Anuncio de cmo el texto obligatorio se incluye por medio de una cuerda. Directiva en la seccin de datos:

... Seccin de texto alinee 1 mundial __ __ inicio inicio:.... Mov.w @ 0, seccin jsr @ r0 r0 datos de cadena "Foro de bytes, cuando me llamo?" . Finales

En primer lugar tenemos que montarlo en un programa absoluta por ejemplo en forma de bytes hexadecimales:
mov.w @ 0, r0 6b 00 00 00 jsr @ r0 5d 00 Do 44 6f 20 79 6f 75 que 20 bytes, 62 79 74 65 2c 20 al 77 68 65 6e 20 49 I 20 ronda? 6b 6f 6e 63 6b 3f

Entonces tenemos que calcular el ProgramChecksum y BlockChecksum. Para descargar el programa resultante de la memoria del RCX se procede de la siguiente manera: EnterDownloadMode :
RCX_Request_Reply 65 1 3 5 7 b 0000: 9a

BeginDownload , ProgramEntryPoint = 8,000, ProgramChecksum = 09A8, Zero = 0:


RCX_Request_Reply 75 00 80 a8 09 00 0000: 8 A 00

DownloadBlock , BlockSequenceNumber = 0, BlockLength = 0022, DataBlock = 6b 00 ... 3f 00 00, BlockChecksum = a8:


RCX_Request_Reply 4d 00 00 22 00 6b 00 .... 3f 00 00 a8 0000: b2 00

RunProgram , RunKey = 4c 45 47 ae 4f (hex):


RCX_Request_Reply a5 4c 45 47 4f ae 0000: 5a 4a 75 73 74 20 61 20 62 69 74 20 6f 66 66 20 0010: 74 68 65 20 62 6c 63 6f 6b 21

La respuesta contiene el hexadecimal representado los valores ASCII para el texto "Slo un poco fuera de la cuadra". As que las cosas estn bien, y el programa se est ejecutando. No por mucho tiempo, sin embargo.Las dos instrucciones del programa crea un salto indirecto a travs del vector de reset en la direccin 0. Esto devolver el control al Ejecutivo. El Ejecutivo RCX como un entorno de tiempo de ejecucin

Un programa que se ejecuta en el RCX puede utilizar los servicios proporcionados por los ejecutivos, por ejemplo, las rutinas de acceso de alto nivel a la pantalla LCD. En esta seccin vamos a dar algunos servicios ejecutivos tiles y describir la forma de interfaz para estos servicios de C-programas de montaje y. Una lista ms completa de los servicios de ejecutivos puede obtenerse a partir de Internos RCX . Como un simple ejemplo vamos a empezar con una rutina de multiplicacin de enteros con signo de 16 bits. Est disponible en el ejecutivo en la direccin 0x0130 , lo que significa que la rutina de multiplicacin se puede llamar en el montaje como una subrutina:
jsr @ 0x0130

Los dos operandos se pasan a la subrutina en los registros r5 y r6 , el resultado se devuelve en R6 . Esto significa que la multiplicacin de, por ejemplo 51 y 72 puede llevarse a cabo en el montaje como:
mov.w # 51, # 72 mov.w r5, r6 jsr @ 0x0130

El valor de r6 es 3672 = 51 * 72 en el retorno de la subrutina. En un programa C, podemos concluir este llamado conjunto en una funcin C de la siguiente manera:
int16 imul (Int16, Int16 b) {int res; asm ("mov.w% 1,% 2 mov.w r5, r6 jsr 0x0130; llamada imul mov.w r6,% 0": "= r" (res ): "r" (a), "r" (b): "r0", "r1", "r5", "R6"); res retorno;}

Esta funcin de C se puede activar como es habitual en un programa en C-:


int16 p; ... p = imul (51,72);

Envoltorios C , al igual que el de la rutina de multiplicacin, se pueden programar las rutinas ejecutivas para facilitar el acceso a los servicios ejecutivos. Un nmero de envolturas de C puede ser recogido y colocado junto con los tipos de datos, constantes y variables globales en una definicin de interfaz o cabecera de archivo, por ejemplo, RCX_RTE.h . Esta sencilla interfaz tambin contiene los tipos de datos principales para el H8/300, como byte y palabra , el texto obligatorio "Foro de bytes, cuando me llamo?" y una rutina para restablecer el RCX. La interfaz puede ser incluido en el texto de un programa en C:
# Include "RCX_RTE.h"

Esta sencilla interfaz para el ejecutivo RCX es un ejemplo de un entorno de tiempo de ejecucin que se puede basar en el ejecutivo RCX. En la siguiente los servicios proporcionados para el acceso a la pantalla LCD en esta interfaz se describirn en detalle. Rutinas LCD En el ejecutivo, hay rutinas que hace posible ignorar los detalles de bajo nivel de control LCD a travs de las dos terminales del H8/3292 puerto I / O 6. Ellos tambin se esconden los detalles de cmo cada bit en los mapas de amortiguamiento LCD a los segmentos de la pantalla. Hay dos rutinas ejecutivas para mostrar u ocultar un icono en la pantalla. Un icono es uno o ms segmentos. Adems, hay una rutina para la escritura de nmeros en la pantalla. Todas las rutinas operan el contenido de la memoria intermedia de LCD en la memoria. Los cambios en el bfer LCD no tienen ningn efecto en la pantalla a menos que una llamada explcita a una rutina ejecutiva hace que los cambios en el bfer LCD visible en la pantalla. En la detallada descripcin en la siguiente tabla vamos a suponer que los cambios en el bfer LCD aparecer poco despus en la pantalla, por ejemplo por una llamada explcita a la rutina que se actualiza la pantalla.
Rutina LCD Descripcin refrescar llame a la nombres de los direccin parmetros y el tipo de sin parmetros sin parmetros icon (16-bit) icon (16-bit) Formato (16-bit), valor (16-bit), scalecode (16bit)

pantalla de actualizaciones de 0x27c8 contenido del bfer LCD borrar pantalla transparente 0x27ac show_icon hacer visible el icono 0x1b62 hide_icon ocultar icono 0x1e4a un valor entero se muestra de show_number acuerdo con los parmetros de 0x1ff2 formato y la escala

El primer parmetro a las rutinas se pasa en el registro R6 , se pasan los parmetros restantes en la pila: el tercer parmetro es el primero en ser insertado en la pila, entonces el segundo parmetro se inserta en la pila. Los parmetros tienen el siguiente significado: icono , un cdigo de 16 bits a uno de los iconos que el ejecutivo puede manejar, por ejemplo, un hombre LEGO de pie o caminando. El icono de la disposicin son:
Cdigo de 16 bits Describtion 0x3006 figura de pie

0x3007 0x3008 0x3009 0x300a 0x300b 0x300c 0x300d 0x300e 0x300f 0x3010 0x3011 0x3012 0x3013 0x3014 0x3015 0x3016 0x3018 0x3019 0x301a 0x301b 0x301c 0x301d 0x3020

caminando figura sensor 0 vista seleccionada 0 sensor activo sensor vista 1 seleccionado sensor de 1 activa sensor de visin 2 seleccionado sensor 2 activa motor vista 0 seleccionadas motor 0 revs flecha motor 0 flecha adelante motor 1 visualizacin seleccionado motor 1 flecha hacia atrs motor 1 flecha adelante vista del motor 2 seleccionado motor 2 hacia atrs arrow motor 2 hacia adelante flecha indicador de registro de datos descarga en curso cargar en curso batera baja indicador de corto alcance Indicador de largo alcance todos los segmentos

Las llamadas repetidas con los cdigos de 0x3018, 0x3019, y 0x301a crea una animacin simple en la pantalla. Esto se puede utilizar para indicar un proceso que consume tiempo en curso. formato , la rutina show_number opera en seis posiciones en la pantalla:
firmar digit3 digito2 digit1 digit0 dgitos

La posicin se puede mostrar un signo menos (-) o estar vaco. Las otras cinco posiciones se muestran los dgitos decimales 0,1, ... 9, el signo menos (-), o estar vaco. Entre digit3 y digito2, o entre digito2 y digit1, o entre digit1 y digit0, el punto decimal se puede mostrar como un punto. El formato del parmetro controla cmo pasa el valor de 16 bits como el segundo parmetro se interpreta y se hace visible en la pantalla.
Formato Significado el valor de 16 bits se interpreta como una firma entero y muestra como hasta 0x3001 cuatro dgitos decimales en las posiciones 3, 2, 1, 0 sin ceros a la izquierda. Si el

valor es inferior a -9999, -9999 se muestra, si el valor es mayor que 9999, 9999 se muestra si el valor de 16 bits se encuentra en el rango de 0 .. 9 que se muestra en la 0x3017 posicin de dgito. Si no se muestra nada. el valor de 16 bits se interpreta como un signo entero y se muestra en las 0x301f posiciones 3, 2, 1, 0 con ceros a la izquierda. Si el valor es mayor que 9999, se muestra 9999.

scalecode , determina la posicin de un posible punto decimal. Se aplica slo a formato 0x3001 y 0x301f.
Scalecode ScaleFactor 0x3002 1 0x3003 0.1 0x3004 0.01 0x3005 0.001

Estas rutinas LCD ejecutivos pueden ser envueltos en rutinas C . Ejemplos de este tipo de rutinas envueltas C se han incluido en RCX_RTE.h con nombres que en la mesa de las rutinas ejecutivas LCD con el prefijo lcd_, lcd_refresh , lcd_clear , .... (Ver RCX_RTE.h descripcin ). Cada rutina termina con una llamada explcita a refrescar para actualizar la pantalla inmediatamente despus de realizar los cambios en el bfer LCD. Para facilitar an ms el uso, tambin llamadas especializadas a show_number se han incluido en RCX_RTE.h , como lcd_show_int16 y lcd_show_digit . Esto muestra cmo las rutinas especializadas se pueden basar en las rutinas generales previstas por el ejecutivo. Compilacin de programas para el RCX Ya hemos visto cmo una simple programa en lenguaje ensamblador puede ser traducido manualmente en bytes hexadecimales que representan el programa de cdigo de mquina equivalente H8/300. Tambin hemos visto cmo estos bytes se pueden descargar al RCX a travs de una serie de peticiones explcitas al ejecutivo RCX, y tambin cmo se puede iniciar el programa descargado. Sin embargo, este proceso manual es muy tedioso y propenso a errores. En esta y en la siguiente seccin se describen las herramientas para facilitar el proceso. En esta seccin se describe un ensamblador cruzado y un compilador cruzado que traduce los programas en lenguaje ensamblador y C-programas en H8/300 programas nativos representadas como una serie de registros-S. En la siguiente seccin de un programa, RCX_Download , se describe que lleva a cabo una transformacin de una serie de registros-S a una secuencia de bytes y luego

enva las peticiones al Ejecutivo RCX para descargar e iniciar el programa de transformacin. Cmo instalar el ensamblador cruzado y Cross-Compiler Si a travs del ensamblador y compilador cruzado no est instalado en su mquina UNIX una gua de instalacin le mostrar cmo obtener estas herramientas. Traduccin de programas en lenguaje ensamblador El programa de la asamblea de la seccin anterior, por ejemplo, que figura en los archivos asm_reset.s se puede traducir en una serie de registros-S mediante el siguiente comando UNIX:
hacer asm_reset.srec

Este comando realiza la traduccin del programa conjunto en un S-record programa RCX formateado en dos pasos: el primer paso se traduce el programa conjunto en un mdulo de objeto asm_reset.o , el segundo paso transforma el mdulo de objeto en una secuencia de registros-S en asm_reset.srec . Los dos pasos realizados por el comando se encuentran en el siguiente Makefile :
# Makefile para H8/300 traduccin entre los programas en ensamblador. # Ruta al ensamblador (as) y el enlazador (ld). BINDIR = / users/kursus/dArk/solaris/h8300-hitachi-hms/bin / AS = $ (BINDIR) como LD = $ (BINDIR) ld # Opciones para el enlazador. LFLAGS =-Tasm_rcx.lds los comentarios #. # $ <$ @ Y se expande al nombre de archivo real que coincide con la parte # derecho y el lado izquierdo de: (dos puntos). % S:..% S $ (AS) $ <-o $ @% srec:.% O $ (LD) $ (LFLAGS)-o $ @ $ <.

En este caso, como es un ensamblador cruzado, no el ensamblador nativo de la mquina host UNIX; ld es un agente de reticulacin. El conector funciona bajo el control explcito de la escritura de enlace que se encuentre en el archivo asm_rcx.lds da despus de la opcin T. La secuencia de comandos del vinculador en asm_rcx.lds define la transformacin del archivo de objeto en los registros-S. Este archivo es el siguiente:
/ ** Asm_rcx.lds ** GNU ld guin para el mapeo de un mdulo de objeto montado en * un S-record representado programa absoluta H8/300. Las secciones de * el mdulo de objeto se asignan a la memoria del RCX a partir de * la direccin de carga 0x8000. La duracin del programa no debe exceder * 0x6fff porque la direccin 0xf000 se utiliza como dispositivo de registro. * El punto de entrada del programa es __ comienzo. ** / Output_format (srec) OUTPUT_ARCH (h8300) ENTRADA (__start) MEMORIA {mem: ORIGEN = 0x8000, LONGITUD = 0x6fff SECCIONES} {texto: * {(datos.):. {* (. Texto)}> Datos mem. }> mem}

La traduccin y transformacin realizado por hacer asm_reset.srec resultados en la siguiente secuencia de cinco S-registros contenidos en el archivo asm_reset.srec :
S011000061736D5F72657365742E7372656350 S10980006B0000005D00AE S1188006446F20796F7520627974652C207768656E2049206B6B S10A801B6E6F636B3F000070 S90380007C

El primer registro S0 contiene el nombre del archivo como caracteres ASCII (r = 72, e = 65, ...). El registro de terminacin S9 contiene el punto de entrada del programa H8/300, 0x8000. Los tres registros restantes S1 contiene el cdigo nativo, cada byte se representa como un nmero hexadecimal de dos dgitos. La direccin de carga del primer registro S1 es 0x8000, que es donde el primer byte del programa va. Recopilacin de C-Programas Un programa de C- reset.c , similar al programa de montaje de la seccin anterior, se puede escribir de la siguiente manera:
# Include "RCX_RTE.h" vaco _start (void) {RCX_Reset ();}

En este programa el restablecimiento se logra a travs de una llamada a la rutina C RCX_Reset en RCX_RTE.h (ver RCX_RTE.h descripcin ). Este programa puede ser compilado en un mdulo de objeto y luego se transform en una secuencia de registros-S de una manera similar al proceso transversal de montaje descrito para programas en lenguaje ensamblador. Esta vez el comando UNIX es:
hacer reset.srec

El resultado es un S-record formateado programa nativo reset.srec para el RCX. El siguiente Makefile se utiliz:
# Makefile para H8/300 compilacin transversal de los programas en C y ensamblador. # Ruta al compilador de C (gcc), ensamblador (as) y el enlazador (ld). INSTDIR = / usuarios / legolab / RCX BINDIR = $ (INSTDIR) / `uname-s` / h8300-hitachi-hms/bin / CC = $ (BINDIR) gcc AS = $ (BINDIR) como LD = $ (BINDIR) ld RCXDOWNLOAD = $ (INSTDIR) / `uname-s` / bin / RCX_Download # Opciones para el compilador de C y el enlazador. CFLAGS =O2-Wall-I $ (INSTDIR) / include LFLAGS =-T $ (INSTDIR) / Manual.dir / rcx.lds # comentarios. # $ <$ @ Y se expande al nombre de archivo real que coincide con la parte # derecho y el lado izquierdo de: (dos puntos). % S:..% C $ (CC) $ (CFLAGS)-c $ <% s:...% S $ (AS) $ <-o $ @% s:.% C $ (CC)-S $ (CFLAGS) $ <% srec:...% o $ (LD) $ (LFLAGS)-o $ @ $ <% enva:% srec $ (RCXDOWNLOAD) $ <.

Este Makefile tambin puede ser usado para compilar un programa en C-en un modul objeto con el comando:
hacer reset.o

Para compilar un programa C en un programa en lenguaje ensamblador utilizar el Makefile de la siguiente manera:
hacer reset.s

Esto es til cuando hay una necesidad de inspeccionar el cdigo simblico H8/300 generado por el compilador cruzado. Las secuencias de comandos enlace rcx.lds especificados en la opcin T del enlazador es:
/ ** Rcx.lds ** GNU ld guin para el mapeo de un mdulo objeto compilado en C * S-record absoluto representado programa H8/300. Las secciones de * el mdulo de objeto se asignan a la memoria del RCX a partir de * la direccin de carga 0x8000. La duracin del programa no debe exceder * 0x6fff porque la direccin 0xf000 se utiliza como dispositivo de registro. * El punto de entrada del programa es __ comienzo. ** / Output_format (srec) OUTPUT_ARCH (h8300) ENTRADA (__start) MEMORIA {mem: ORIGEN = 0x8000, longitud = 0x6fff SECCIONES} {texto:. *. {(. Texto) * (. Rodata)}> mem datos: { * (datos).}> mem bss:. {__ bss_start =. , * (. Bss) * (COMMON) __ end =. ;}> Mem / DISCARD /: * {(. Vectores)}}

Este script enlace controla la asignacin del modul objeto en un S-record programa nativo formato para el RCX. Descarga de programas para el RCX Para descargar un programa al RCX, primero una versin S-record del programa debe ser producido por ejemplo por la cruz-ensamblaje o compilacin cruzada se describe en la seccin anterior. Luego, encienda el RCX y descargar el programa S-record de la siguiente manera:
RCX_Download <filename de S-record programa>

El programa RCX_Download.c pasa por todos los pasos necesarios para descargar e iniciar el programa en el archivo dado por el nombre del archivo. El transmisor / receptor de infrarrojos deben estar conectados a un puerto serie dada por un nombre definido en el programa por el texto constante llamada DEFAULT_RCX_IR . Cambiar esto si es necesario o utilizar la variable de entorno RCX_IR para reemplazar la configuracin predeterminada.

Anda mungkin juga menyukai