Vous êtes sur la page 1sur 20

Tarea 1. Caracteristicas Basicas y sintaxis en procesadores y microcontroladores.

Caractersticas Procesadores Intel Pentium Caracteriasticas Microcontroladores AVR de ATMEL


Tecnologa Intel Turbo Boost
Tecnologa Intel Hyper-Threading
Tecnologa de virtualizacin Intel (VT-x)
Tecnologa de virtualizacin Intel para E/S dirigida (VT-d)
Tecnologa Intel Trusted Execution
Nuevas instrucciones de AES Intel
Arquitectura Intel 64
Estados de inactividad
Tecnologa Intel Speedstep mejorada
Conmutacin segn demanda Intel
Tecnologas de monitoreo trmico
El bit de desactivacin de ejecucin
Informacin de cach
Identificacin de chipset
Estado de interrupcin mejorada
Frecuencia prevista
gigatransferencias por segundo (GT/s)
Controlador de memoria integrado
Intel QuickPath Interconnect
Tecnologa Intel SpeedStep mejorada
Overclock
Informacin sobre paquetes
Gua de compatibilidad de plataforma
Nombre de marca del procesador
Familia de procesadores
Modelo de procesador
Nmero de procesador
Revisin del procesador
Versin del procesador
Tipo de procesador
Frecuencia informada
Las Extensiones SIMD
Bus de sistema overclocking
Alto desempeo, baja potencia.
* Arquitectura RISC avanzada:
-120 instrucciones poderosas, la mayora con ejecucin de un
solo ciclo de reloj.
-32x8 registros de trabajo de propsito general.
-operacin totalmente esttica.
* Programa y Memoria de Datos no voltiles:
-2/4/8 kbytes de Memoria Flash Programable en el sistema, con
duracin: 10000 ciclos de escritura/borrado.
-128/256/512 bytes de EEPROM programable en el sistema, con
duracin: 100000 ciclos de escritura/borrado.
-128/256/512 bytes de SRAM interna.
-Cerrojo de programacin para autoprogramar la Memoria
Flash y Seguridad de Datos de EEPROM.
* Caractersticas Perifricas:
-Contador/Temporizador de 8 bits con Prescaler y dos canales
PWM.
-Contador/Temporizador de Alta Velocidad de 8 bits con
Prescaler separado:
Dos Salidas PWM de Alta Frecuencia con Registros de
Comparacin de Salida separados.
Generador Programable de Tiempo Muerto.
-Interfaz Serie Universal con Detector de Condicin de
Comienzo.
-ADC de 10 bits:
Cuatro Canales de Una Sola Salida.
Dos Pares de Canales ADC Diferenciales con Ganancia
Programable (1x, 20x).
-Temporizador Programable de Vigilancia con Oscilador
separado dentro del integrado.
-Comparador Analgico dentro del integrado.
* Caractersticas Especiales del Microcontrolador:
-Sistema de Depuracin debugWIRE dentro del integrado.
-Programable dentro del Sistema a travs del Puerto SPI.
-Fuentes de Interrupcin Externas e Internas.
-Modos de Descanso en Baja Potencia, de Reduccin de Ruido
de ADC, y de Reduccin de Potencia.
-Circuito Mejorado de Reinicializacin de Encendido.
-Circuito Programable de Deteccin de Brown-out (estado en
que la tensin es entre un 8 y un 12% inferior al valor tpico) .
-Oscilador Calibrado interno.


Sintaxis del lenguaje ensamblador procesador Intel Pentium.
Proceso de creacin de un programa
Para la creacin de un programa es necesario seguir cinco pasos: diseo del algoritmo, codificacin del mismo, su traduccin a
lenguaje mquina, la prueba del programa y la depuracin. La etapa de diseo se plantea el problema a resolver y se propone
la mejor solucin, creando diagramas esquemticos utilizados para el mejor planteamiento de la solucin. La codificacin del
programa consiste en escribir el programa en algn lenguaje de programacin; en este caso especfico en ensamblador,
tomando como base la solucin propuesta en el paso anterior. La traduccin al lenguaje mquina es la creacin del programa
objeto, esto es, el programa escrito como una secuencia de ceros y unos que pueda ser interpretado por el procesador. La prueba
del programa consiste en verificar que el programa funcione sin errores, o sea, que haga lo que tiene que hacer.
La ltima etapa es la eliminacin de las fallas detectadas en el programa durante la fase de prueba. La correccin de una falla
normalmente requiere la repeticin de los pasos comenzando desde el primero o el segundo. Para crear un programa en
ensamblador existen dos opciones, la primera es utilizar el MASM (Macro Assembler, de Microsoft), y la segunda es utilizar el
debugger, en esta primera seccin utilizaremos este ltimo ya que se encuentra en cualquier PC con el sistema operativo MS-
DOS, lo cual lo pone al alcance de cualquier usuario que tenga acceso a una mquina con estas caractersticas.
Debug solo puede crear archivos con extensin .COM, y por las caractersticas de este tipo de programas no pueden ser
mayores de 64 kb, adems deben comenzar en el desplazamiento, offset, o direccin de memoria 0100H dentro del segmento
especfico.
Registros de la UCP
Como lo mencionamos en el capitulo 4 la UCP tiene 14 registros internos, cada uno de 16 bits. Los primeros cuatro, AX, BX, CX,
y DX son registros de uso general y tambin pueden ser utilizados como registros de 8 bits, para utilizarlos como tales es
necesario referirse a ellos como por ejemplo: AH y AL, que son los bytes alto (high) y bajo (low) del registro AX. Esta
nomenclatura es aplicable tambin a los registros BX, CX y DX.
Es posible visualizar los valores de los registros internos de la UCP utilizando el programa Debug. Para empezar a
trabajar con Debug digite en el prompt de la computadora:
C:\> Debug [Enter]
En la siguiente lnea aparecer un guin, ste es el indicador del Debug, en ste momento se pueden introducir las instrucciones
del Debug. Utilizando el comando:
- r [Enter]
Se desplegaran todos los contenidos de los registros internos de la UCP; una forma alternativa de mostrarlos es usar el comando
"r" utilizando como parmetro el nombre del registro cuyo valor se quiera visualizar. Por ejemplo:
- rbx
Esta instruccin desplegar nicamente el contenido del registro BX y cambia el indicador del Debug de " - " a " : " Estando as
el prompt es posible cambiar el valor del registro que se visualizo tecleando el nuevo valor y a continuacin [Enter], o se puede
dejar el valor anterior presionando [Enter] sin teclear ningn valor. Es posible cambiar el valor del registro de banderas, as
como utilizarlo como estructura de control en nuestros programas como se ver ms adelante. Cada bit del registro tiene un
nombre y significado especial, la lista dada a continuacin describe el valor de cada bit, tanto apagado como prendido y su
relacin con las operaciones del procesador:
Overflow

NV = no hay desbordamiento;
OV = s lo hay
Direction

DI = desactivadas;
EI = activadas
Sign

PL = positivo;
NG = negativo
Zero

NZ = no es cero;
ZR = si lo es
Auxiliary Carry

NA = no hay acarreo auxiliar;
AC = hay acarreo auxiliar
Parity

PO = paridad non;
PE = paridad par;
Carry

NC = no hay acarreo;
CY = si lo hay

La estructura del ensamblador
En el lenguaje ensamblador las lneas de cdigo constan de dos partes, la primera es el nombre de la instruccin que se va a
ejecutar y la segunda son los parmetros del comando u operandos. Por ejemplo: add ah bh Aqu "add" es el comando a ejecutar
(en ste caso una adicin) y tanto "ah" como "bh" son los parmetros.
El nombre de las instrucciones en ste lenguaje est formado por dos, tres o cuatro letras. A estas instrucciones tambin se les
llama nombres mnemnicos o cdigos de operacin, ya que representan alguna funcin que habr de realizar el procesador.
Existen algunos comandos que no requieren parmetros para su operacin, as como otros que requieren solo un parmetro.
Algunas veces se utilizaran las instrucciones como sigue:
add al,[170] Los corchetes en el segundo parmetro nos indican que vamos a trabajar con el contenido de la casilla de memoria
nmero 170 y no con el valor 170, a esto se le conoce como direccionamiento directo.
Nuestro primer programa
Vamos a crear un programa que sirva para ilustrar lo que hemos estado viendo, lo que haremos ser una suma de dos valores
que introduciremos directamente en el programa:
El primer paso es iniciar el Debug, ste paso consiste nicamente en teclear debug [Enter] en el prompt del sistema operativo.
Para ensamblar un programa en el Debug se utiliza el comando "a" (assemble); cuando se utiliza ste comando se le puede dar
como parmetro la direccin donde se desea que se inicie el ensamblado.
Si se omite el parmetro el ensamblado se iniciar en la localidad especificada por CS:IP, usualmente 0100H, que es la localidad
donde deben iniciar los programas con extensin .COM, y ser la localidad que utilizaremos debido a que debug solo puede
crear ste tipo especfico de programas. Aunque en ste momento no es necesario darle un parmetro al comando "a" es
recomendable hacerlo para evitar problemas una vez que se haga uso de los registros CS:IP, por lo tanto tecleamos:
- a0100 [Enter]
Al hacer esto aparecer en la pantalla algo como: 0C1B:0100 y el cursor se posiciona a la derecha de stos nmeros, ntese que
los primeros cuatro dgitos (en sistema hexagesimal) pueden ser diferentes, pero los ltimos cuatro deben ser 0100, ya que es la
direccin que indicamos como inicio. Ahora podemos introducir las instrucciones:
0C1B:0100 mov ax,0002; coloca el valor 0002 en el registro ax 0C1B:0103 mov bx,0004; coloca el valor 0004 en el registro
bx 0C1B:0106 add ax,bx ;le adiciona al contenido de ax el contenido de bx 0C1B:0108 int 20 ; provoca la terminacin del
programa. 0C1B:010A
No es necesario escribir los comentarios que van despus del ";". Una vez digitado el ltimo comando, int 20, se le da [Enter] sin
escribir nada mas, para volver al prompt del debuger.
La ltima lnea escrita no es propiamente una instruccin de ensamblador, es una llamada a una interrupcin del sistema
operativo, estas interrupciones ser n tratadas ms a fondo en un captulo posterior, por el momento solo es necesario saber que
nos ahorran un gran nmero de lneas y son muy tiles para accesar a funciones del sistema operativo.
Para ejecutar el programa que escribimos se utiliza el comando "g", al utilizarlo veremos que aparece un mensaje que dice:
"Program terminated normally". Naturalmente con un mensaje como ste no podemos estar seguros que el programa haya
hecho la suma, pero existe una forma sencilla de verificarlo, utilizando el comando "r" del Debug podemos ver los contenidos de
todos los registros del procesador, simplemente teclee:
- r [Enter]
Aparecer en pantalla cada registro con su respectivo valor actual:
AX=0006BX=0004CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1BES=0C1BSS=0C1BCS=0C1BIP=010A NV UP EI PL NZ NA PO NC
0C1B:010A 0F DB oF
Existe la posibilidad de que los registros contengan valores diferentes, pero AX y BX deben ser los mismos, ya que son los que
acabamos de modificar.
Otra forma de ver los valores, mientras se ejecuta el programa es utilizando como parmetro para "g" la direccin donde
queremos que termine la ejecucin y muestre los valores de los registros, en ste caso sera: g108, esta instruccin ejecuta el
programa, se detiene en la direccin 108 y muestra los contenidos de los registros. Tambin se puede llevar un seguimiento de
lo que pasa en los registros utilizando el comando "t" (trace), la funcin de ste comando es ejecutar lnea por lnea lo que se
ensambla mostrando cada vez los contenidos de los registros.
Para salir del Debug se utiliza el comando "q" (quit).

Guardar y cargar programas
No sera prctico tener que digitar todo un programa cada vez que se necesite, para evitar eso es posible guardar un programa
en el disco, con la enorme ventaja de que ya ensamblado no ser necesario correr de nuevo debug para ejecutarlo.
Los pasos a seguir para guardar un programa ya almacenado en la memoria son:
Obtener la longitud del programa restando la direccin final de la direccin inicial, naturalmente en sistema hexadecimal.
Darle un nombre al programa y extensin Poner la longitud del programa en el registro CX Ordenar a Debug que escriba el
programa en el disco.
Utilizando como ejemplo el programa del captulo anterior tendremos una idea ms clara de como llevar stos pasos:
Al terminar de ensamblar el programa se vera as:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010A
- h 10a 100
020a 000a
- n prueba.com
- rcx
CX 0000
:000a
-w
Writing 000A bytes
Para obtener la longitud de un programa se utiliza el comando "h", el cual nos muestra la suma y resta de dos nmeros en
hexadecimal. Para obtener la longitud del nuestro le proporcionamos como parmetros el valor de la direccin final de nuestro
programa (10A) y el valor de la direccin inicial (100). El primer resultado que nos muestra el comando es la suma de los
parmetros y el segundo es la resta.
El comando "n" nos permite poner un nombre al programa.
El comando "rcx" nos permite cambiar el contenido del registro CX al valor que obtuvimos del tamao del archivo con "h", en
ste caso 000a, ya que nos interesa el resultado de la resta de la direccin inicial a la direccin final.
Por ltimo el comando w escribe nuestro programa en el disco, indicndonos cuantos bytes escribi.
Para cargar un archivo ya guardado son necesarios dos pasos:
Proporcionar el nombre del archivo que se cargar.
Cargarlo utilizando el comando "l" (load).
Para obtener el resultado correcto de los siguientes pasos es necesario que previamente se haya creado el programa anterior.
Dentro del Debug escribimos lo siguiente:
- n prueba.com
- l
- u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
El ltimo comando, "u", se utiliza para verificar que el programa se carga en memoria, lo que hace es desensamblar el cdigo
y mostrarlo ya desensamblado. Los parmetros le indican a Debug desde donde y hasta donde desensamblar.
Debug siempre carga los programas en memoria en la direccin 100H, a menos que se le indique alguna otra.
Condiciones, ciclos y bifurcaciones
Estas estructuras, o formas de control le dan a la mquina un cierto grado de decisin basado en la informacin que recibe. La
forma ms sencilla de comprender ste tema es por medio de ejemplos.
Vamos a crear tres programas que hagan lo mismo: desplegar un nmero determinado de veces una cadena de caracteres en la
pantalla.
- a100
0C1B:0100 jmp 125 ; brinca a la direccin 125H
0C1B:0102 [Enter]
- e 102 'Cadena a visualizar 15 veces si 0d 0a '$'
- a125
0C1B:0125 MOV CX,000F ; veces que se desplegar la cadena
0C1B:0128 MOV DX,0102 ; copia cadena al registro DX
0C1B:012B MOV AH,09 ; copia valor 09 al registro AH
0C1B:012D INT 21 ; despliega cadena
0C1B:012F LOOP 012D ; si CX>0 brinca a 012D
0C1B:0131 INT 20 ; termina el programa.
Por medio del comando "e" es posible introducir una cadena de caracteres en una determinada localidad de memoria, dada
como parmetro, la cadena se introduce entre comillas, le sigue un espacio, luego el valor hexadecimal del retorno de carro, un
espacio, el valor de lnea nueva y por ltimo el smbolo '$' que el ensamblador interpreta como final de la cadena. La
interrupcin 21 utiliza el valor almacenado en el registro AH para ejecutar una determinada funcin, en ste caso mostrar la
cadena en pantalla, la cadena que muestra es la que est almacenada en el registro DX. La instruccin LOOP decrementa
automticamente el registro CX en uno y si no ha llegado el valor de ste registro a cero brinca a la casilla indicada como
parmetro, lo cual crea un ciclo que se repite el nmero de veces especificado por el valor de CX. La interrupcin 20 termina la
ejecucin del programa. Otra forma de realizar la misma funcin pero sin utilizar el comando LOOP es la siguiente:
- a100
0C1B:0100 jmp 125 ; brinca a la direccin 125H
0C1B:0102 [Enter]
- e 102 'Cadena a visualizar 15 veces si 0d 0a '$'
- a125
0C1B:0125 MOV BX,000F ; veces que se desplegar la cadena
0C1B:0128 MOV DX,0102 ; copia cadena al registro DX
0C1B:012B MOV AH,09 ; copia valor 09 al registro AH
0C1B:012D INT 21 ; despliega cadena
0C1B:012F DEC BX ; decrementa en 1 a BX
0C1B:0130 JNZ 012D ; si BX es diferente a 0 brinca a 012D
0C1B:0132 INT 20 ; termina el programa.
En ste caso se utiliza el registro BX como contador para el programa, y por medio de la instruccin "DEC" se disminuye su valor
en 1. La instruccin "JNZ" verifica si el valor de B es diferente a 0, esto con base en la bandera NZ, en caso afirmativo brinca
hacia la direccin 012D. En caso contrario continua la ejecucin normal del programa y por lo tanto se termina. Una ultima
variante del programa es utilizando de nuevo a CX como contador, pero en lugar de utilizar LOOP utilizaremos decrementos a
CX y comparacin de CX a 0.
- a100
0C1B:0100 jmp 125 ; brinca a la direccin 125H
0C1B:0102 [Enter]
- e 102 'Cadena a visualizar 15 veces 0d 0a '$'
- a125
0C1B:0125 MOV DX,0102 ; copia cadena al registro DX
0C1B:0128 MOV CX,000F ; veces que se desplegar la cadena
0C1B:012B MOV AH,09 ; copia valor 09 al registro AH
0C1B:012D INT 21 ; despliega cadena
0C1B:012F DEC CX ; decrementa en 1 a CX
0C1B:0130 JCXZ 0134 ; si CX es igual a 0 brinca a 0134
0C1B:0132 JMP 012D ; brinca a la direccin 012D
0C1B:0134 INT 20 ; termina el programa
En ste ejemplo se usa la instruccin JCXZ para controlar la condicin de salto, el significado de tal funcin es: brinca si CX=0 El
tipo de control a utilizar depender de las necesidades de programacin en determinado momento.
Instrucciones para ciclos El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la programacin de
ciclos finitos, la instruccin LOOP.

Esta instruccin trabaja en forma conjunta con el registro contador CX. El formato general de esta instruccin es:
Mov CX,No_Veces
Etiqueta:
-------
Loop Etiqueta
La instruccin LOOP ejecuta las instrucciones que se encuentran entre la Etiqueta: y Loop Etiqueta el nmero de veces que
indique el campo No_Veces.
Por ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro AX, esto lo repite 10 veces.
Mov CX,10 ;10 veces
Otro:
Inc AX ; AX=AX+1
Loop Otro
La instruccin Loop decrementa el registro CX en cada iteracin y se detiene cuando CX es igual a cero.
El siguiente programa da un ejemplo ms ilustrativo:
.COMMENT
*
Programa: Loop.ASM
Descripcin: Este programa calcula la sucesin de Fibonacci para los 10 primeros trminos de la serie, utilizando para ello un
ciclo controlado por la instruccin Loop.
La sucesin est formada por nmeros, de modo tal que cada nmero es la suma de los dos anteriores-
Ejemplo:
1,1,2,3,5,8,13,21,34,55....
*
.MODEL tiny
.CODE
Inicio: ;Punto de entrada al programa
Mov AX,0 ;AX=0
Mov BX,1 ;BX=1 Estos son los dos primeros elementos 0+1=1
Mov CX,10 ;Repetir 10 veces
Repite:
Mov DX,AX ;DX=AX
Add DX,BX ;DX=AX+BX
Mov AX,BX ;Avanzar AX
Mov BX,DX ;Avanzar BX
Loop Repite ;siguiente nmero
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ;
END Inicio
END
Interrupciones
Una interrupcin es una instruccin que detiene la ejecucin de un programa para permitir el uso de la UCP a un
proceso prioritario. Una vez concluido ste ltimo proceso se devuelve el control a la aplicacin anterior.
Una interrupcin es un estado en el cual el microprocesador detiene la ejecucin de un programa para atender una
peticin especial solicitada por el propio programa o por un dispositivo fsico conectado al microprocesador
externamente. Las interrupciones fueron creadas para facilitar al programador el acceso a los diferentes dispositivos
de la computadora (puertos de comunicaciones, terminales, impresoras, etc.).
Por ejemplo, cuando estamos trabajando con un procesador de palabras y en ese momento llega un aviso de uno de
los puertos de comunicaciones, se detiene temporalmente la aplicacin que estbamos utilizando para permitir el uso
del procesador al manejo de la informacin que est llegando en ese momento. Una vez terminada la transferencia de
informacin se reanudan las funciones normales del procesador de palabras. A continuacin se muestra un ejemplo
utilizando la interrupcin para mostrar informacin en pantalla:
Utilizando Debug tecleamos:
- a100
2C1B:0100 JMP 011D
2C1B:0102 [ENTER]
- E 102 'Hola, como estas.' 0D 0A '$'
- A011D
2C1B:011D MOV DX,0102
2C1B:0120 MOV AH,09
2C1B:0122 INT 21
2C1B:0123 INT 20
En ste programa la interrupcin 21H manda al monitor la cadena localizada en la direccin a la que apunta el
registro DX.
El valor que se le da a AH determina cual de las opciones de la interrupcin 21H ser utilizada, ya que esta
interrupcin cuenta con varias opciones.
En lo directo de interrupciones es una de las partes ms fuertes del lenguaje ensamblador, ya que con ellas es posible
controlar eficientemente todos los dispositivos internos y externos de una computadora gracias al completo control
que se tiene sobre operaciones de entrada y salida.

Ejecucin de una interrupcin
Cuando durante la ejecucin de un programa se produce una interrupcin, el microprocesador realiza los siguientes
pasos:
1.- Detiene la ejecucin del programa
2.- Almacena los registros CS, IP y Banderas en la pila
3.- Modifica el CS y el IP para que apunten a la direccin donde se encuentra la rutina de interrupcin.
4.- Ejecuta las instrucciones de la rutina de interrupcin.
5.- Restablece usando la instruccin RETI los valores originales de los registros CS, IP y Banderas.
6.- Continua con la ejecucin del programa en el punto donde fue interrumpido.
Las rutinas se almacenan en la memoria de la computadora cada vez que sta es inicializada, a esto se le conoce como
vector de interrupciones.
Tipos de interrupciones
El microprocesador puede atender dos tipos de interrupciones: interrupciones por software e interrupciones por
hardware. Las interrupciones por software son llamadas desde los programas y son proporcionadas por el sistema
operativo (MS-DOS). Existen dos tipos de estas: las interrupciones del DOS y las interrupciones del BIOS (Basic Input
Output System o Sistema Bsico de Entrada/Salida). Estas interrupciones son invocadas con la instruccin INT del
ensamblador. Por otro lado, las interrupciones por Hardware son proporcionadas por el propio microprocesador y
tambin existen dos tipos: interrupciones por hardware internas y las interrupciones por hardware externas. Las
interrupciones internas son invocadas por el microprocesador cuando se produce alguna operacin incorrecta, como
por ejemplo, un intento de dividir por cero o una transferencia de datos entre registros de diferentes longitudes.
Las interrupciones externas son provocadas por los dispositivos perifricos conectados al microprocesador. Para
lograr esto, a cada dispositivo perifrico se le asigna una lnea fsica de interrupcin que lo comunica con el
microprocesador por medio de un circuito integrado auxiliar, el cual se conoce como controlador programable de
interrupciones (PIC). Las computadoras basadas en el microprocesador 8086/8088 cuentan solamente con un PIC,
con lo cual pueden proporcionar hasta 8 lneas de interrupcin (IRQ), las cuales son llamadas IRQ0 a IRQ7, por otro
lado, las computadoras basadas en el microprocesador 80286 y posteriores cuentan con dos chips controladores, con
los cuales pueden proporcionar hasta un mximo de 16 lneas IRQ, las cuales son llamadas IRQ0 a IRQ15.
La siguiente es una lista de las interrupciones por software disponibles por el sistema operativo.
Interrupciones del BIOS
Manejo de dispositivos perifricos
INT 10H Manejo de la pantalla.
INT 13H Manejo de unidades de disco.
INT 14H Manejo de los puertos de comunicaciones(RS232).
INT 15H Manejo de cinta magntica.
INT 16H Manejo del teclado.
INT 17H Manejo de la impresora.
Manejo del estado del equipo
INT 11H Servicios de la lista de elementos de la computadora.
INT 12H Servicios para el clculo del tamao de la memoria.
Servicios de fecha y hora
INT 1AH Manejo del reloj.
Impresin de pantalla
INT 5H Impresin de la informacin contenida en la pantalla.
Servicios especiales
INT 18H Activacin del lenguaje Interprete Basic de la ROM.
INT 19H Activacin de la rutina de arranque de la computadora.
Interrupciones del DOS
INT 20H Termina la ejecucin de un programa.
INT 22H Direccin de terminacin. Guarda la direccin donde se transfiere el control cuando termina la
ejecucin del programa.
INT 23H Direccin de la interrupcin que se ejecuta cuando se presiona Ctrl-Break.
INT 24H Manejo de errores crticos.
INT 25H Lectura directa de sectores del disco.
INT 26H Escritura directa de sectores del disco.
INT 27H Terminar un programa y devolver el control al DOS sin borrar el programa de la memoria.
INT 21H Esta interrupcin proporciona una gran cantidad de funciones, las cuales deben ser invocadas en
conjunto con el registro AH.
1. Terminacin de un programa.
2. Entrada de carcter con eco.
3. Salida a pantalla.
4. Entrada por el puerto serie.
5. Salida por el puerto serie.
6. Salida a la impresora.
7. E/S directa por pantalla.
8. Entrada directa de carcter sin eco.
9. Entrada de carcter sin eco.
10. Visualizar cadenas de caracteres.
11. Entrada desde el teclado.
12. Comprobacin del estado de entrada.
13. Borrar registro de entrada.
14. Inicializar unidad de disco.
A continuacin se mostrarn algunos programas que utilizan llamadas a diferentes interrupciones por software tanto
del BIOS como del DOS. El siguiente programa utiliza la funcin 09h de la interrupcin 21 del DOS para mostrar en
la pantalla un mensaje.
.COMMENT
*
Programa: ejem.ASM

Descripcin: Imprime una cadena de caracteres en la pantalla por medio de la funcin 09h de la interrupcin 21h del
DOS.
*
.MODEL tiny
.DATA
Mensaje db 'Interrupciones 21h del DOS',13,10,'$'
.CODE
Inicio:
Lea DX,Mensaje
Mov Ah,09h
Int 21h
Mov ax,4C00h
Int 21h
END Inicio
END
El siguiente programa exhibe dos cadenas de caracteres en la pantalla, pero a diferencia del anterior ste no regresa al
DOS inmediatamente, espera a que cualquier tecla sea presionada y entonces termina, para ello se utiliza la funcin
10h de la interrupcin 16h del BIOS.



.COMMENT
*
Programa: ejem1.ASM
Descripcin: Imprime dos cadenas de caracteres en la pantalla por medio de la funcin 09h de la interrupcin 21h
del DOS y despus espera a que una tecla sea presionada, esto por medio de la interrupcin 16h del BIOS con la
funcin 10h.
*
.MODEL tiny
.DATA
Mensaje db 'Mas interrupciones',13,10,'$'
Mensaje2 db 'Presione cualquier tecla...',13,10,'$'
.CODE
Inicio:
Lea DX,Mensaje
Mov Ah,09h
Int 21h
Lea DX,Mensaje2
Mov Ah,09h
Int 21h
Mov Ah,10h
Int 16h
Mov ax,4C00h
Int 21h
END Inicio
END
Como ltimo ejemplo de esta seccin, se mostrar un programa que utiliza otra funcin del BIOS, pero esta vez para
posicionar el cursor en diferentes coordenadas de la pantalla, esto con el fin de tener mejor control sobre el lugar en
el que los mensajes son visualizados.
.COMMENT
*
Programa: ejem3.ASM

Descripcin: Imprime dos cadenas de caracteres en la pantalla, controlando su posicin por medio de la funcin 02h
de la Int 10h del BIOS.
*
.MODEL tiny
.DATA
Mensaje db 'Mas interrupciones',13,10,'$'
Mensaje2 db 'Presione cualquier tecla...','$'
.CODE
Inicio:
Mov Bh,0 ;Pagina de video 0
Mov dl,30 ;X=30
Mov dh,5 ;Y=5
Mov Ah,02h ;Posicionar cursor
Int 10h ;
Lea DX,Mensaje ;
Mov Ah,09h ;Imprime Mensaje
Int 21h ;
Mov Bh,0 ;Pagina de video
Mov dl,40 ;X=40
Mov dh,24 ;Y=24
Mov Ah,02h ;Colocar cursor
Int 10h ;
Lea DX,Mensaje2 ;
Mov Ah,09h ;Imprimir Mensaje2
Int 21h ;
Mov Ah,10h ;Esperar tecla
Int 16h ;
Mov ax,4C00h ;Terminar programa y salir al DOS
Int 21h ;
END Inicio
END.
Sintaxis del lenguaje ensamblador Microprocesador AVR de ATMEL
Lenguaje de programacin Arduino
La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el lenguaje de programacin de
alto nivel Processing. Sin embargo, es posible utilizar otros lenguajes de programacin y aplicaciones populares en
Arduino,21 debido a que Arduino usa la transmisin serial de datos soportada por la mayora de los lenguajes
mencionados. Para los que no soportan el formato serie de forma nativa, es posible utilizar software intermediario que
traduzca los mensajes enviados por ambas partes para permitir una comunicacin fluida. Algunos ejemplos son:
3DVIA Virtools: aplicaciones interactivas y de tiempo real.
Adobe Director
BlitzMax (con acceso restringido)
C
C++ (mediante libSerial o en Windows)
C#
Cocoa/Objective-C (para Mac OS X)
Flash (mediante ActionScript)
Gambas
Isadora (Interactividad audiovisual en tiempo real)
Instant Reality (X3D)
Java
Liberlab (software de medicin y experimentacin)
Mathematica
Matlab
MaxMSP: Entorno grfico de programacin para aplicaciones musicales, de audio y multimedia
Minibloq: Entorno grfico de programacin, corre tambin en las computadoras OLPC
Perl
Php
Physical Etoys: Entorno grfico de programacin usado para proyectos de robtica educativa
Processing
Pure Data
Python
Ruby
Scratch for Arduino (S4A): Entorno grfico de programacin, modificacin del entorno para nios Scratch,
del MIT)
Squeak: Implementacin libre de Smalltalk
SuperCollider: Sntesis de audio en tiempo real
VBScript
Visual Basic .NET
VVVV: Sntesis de vdeo en tiempo real
Funciones bsicas y operadores
Arduino est basado en C y soporta todas las funciones del estndar C y algunas de C++.22 A continuacin se muestra
un resumen con la estructura y sintaxis del lenguaje Arduino:
Sintaxis Bsica
Delimitadores:;, {}
Comentarios: //, /* */
Cabeceras: #define, #include
Operadores aritmticos: +, -, *, /, %
Asignacin: =
Operadores de comparacin: ==, !=, <, >, <=, >=
Operadores Booleanos: &&, ||, !
Operadores de acceso a punteros: *, &
Operadores de bits: &, |, ^, ~, <<, >>
Operadores compuestos:
Incremento y decremento de variables: ++, --
Asignacin y operacin: +=, -=, *=, /=, &=, |=

Condicionales: if, if...else, switch case
Bucles: for, while, do... while
Bifurcaciones y saltos: break, continue, return, goto
Variables
En cuanto al tratamiento de las variables tambin comparte un gran parecido con el lenguaje C.
Constantes
HIGH/LOW: representan los niveles alto y bajo de las seales de entrada y salida. Los niveles altos son aquellos de
3 voltios o ms.
INPUT/OUTPUT: entrada o salida.
false (falso): Seal que representa al cero lgico. A diferencia de las seales HIGH/LOW, su nombre se escribe en
letra minscula.
true (verdadero): Seal cuya definicin es ms amplia que la de false. Cualquier nmero entero diferente de cero
es "verdadero", segn el lgebra de Boole, como en el caso de -200, -1 o 1. Si es cero, es "falso".
Tipos de datos
void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float, double, string, array.
Conversin entre tipos
Estas funciones reciben como argumento una variable de cualquier tipo y devuelven una variable convertida en el
tipo deseado.
char(), byte(), int(), word(), long(), float()
Cualificadores y mbito de las variables[editar]
static, volatile, const
Utilidades
sizeof()
Funciones Bsicas
E/S Digital
pinMode(pin, modo)
digitalWrite(pin, valor)
int digitalRead(pin)
E/S Analgica
analogReference(tipo)
int analogRead(pin)
analogWrite(pin, valor)
E/S Avanzada
shiftOut(dataPin, clockPin, bitOrder, valor)
unsigned long pulseIn(pin, valor)
Tiempo
unsigned long millis()
unsigned long micros()
delay(ms)
delayMicroseconds(microsegundos)
Matemticas
min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow, fromHigh, toLow, toHigh), pow(base,
exponente), sqrt(x)
Trigonometra
sin(rad), cos(rad), tan(rad)
Nmeros aleatorios
randomSeed(semilla), long random(mx), long random(mn, mx)
Bits y Bytes
lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit()
Interrupciones externas
attachInterrupt(interrupcin, funcin, modo)
detachInterrupt(interrupcin)
Interrupciones
interrupts(), noInterrupts()
Comunicacin por puerto serie
Las funciones de manejo del puerto serie deben ir precedidas de la palabra "Serial" aunque no necesitan ninguna
declaracin en la cabecera del programa. Por esto se consideran funciones base del lenguaje.23 Estas son las
funciones para transmisin serial:
begin(), available(), read(), flush(), print(), println(), write()
Manipulacin de puertos
Los registros de puertos permiten la manipulacin a ms bajo nivel y de forma ms rpida de los contactos de
entrada/salida del microcontrolador de las placas Arduino.24 Los contactos elctricos de las placas Arduino estn
repartidos entre los registros B(0-7), C (analgicos) y D(8-13). Mediante estas variables ser observado y modificado
su estado:
DDR[B/C/D]: Data Direction Register (o direccin del registro de datos) del puerto B, C D. Es una variable de
Lectura/Escritura que sirve para especificar cuales contactos sern usados como entrada y salida.
PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C D. Es una variable de Lectura/Escritura.
PIN[B/C/D]: Input Pins Register (o registro de pines de entrada) del puerto B, C D. Variable de slo lectura.
Por ejemplo, para especificar los contactos 9 a 13 como salidas y el 8 como entrada (puesto que el puerto D usa los
pines de la placa Arduino 8 al 13 digitales) bastara utilizar la siguiente asignacin:
DDRD = B11111110;
Como se ha podido comprobar, el conocimiento del lenguaje C, permite la programacin en Arduino debido a la
similitud entre ste y el lenguaje nativo del proyecto, lo que implica el aprendizaje de algunas funciones especficas de
que dispone el lenguaje del proyecto para manejar los diferentes parmetros. Se pueden construir aplicaciones de
cierta complejidad sin necesidad de muchos conceptos previos. Los programas compilados con Arduino (salvo en las
placas con CorteX M3) se enlazan contra AVR Libc22 por lo que tienen acceso a algunas de sus funciones. AVR Libc es
un proyecto de software libre con el objetivo de proporcionar una biblioteca C de alta calidad para utilizarse con el
compilador GCC sobre microcontroladores Atmel AVR. Se compone de 3 partes:
avr-binutils
avr-gcc
avr-libc
La mayora del lenguaje de programacin Arduino est escrita con constantes y funciones de AVR y ciertas
funcionalidades slo se pueden obtener haciendo uso de AVR.25
Interrupciones
Las seales de interrupcin son las siguientes:
cli(): desactiva las interrupciones globales
sei(): activa las interrupciones
Esto afectar al temporizador y a la comunicacin serial. La funcin delayMicroseconds() desactiva las interrupciones
cuando se ejecuta.
Temporizadores
La funcin delayMicroseconds() crea el menor retardo posible del lenguaje Arduino que ronda los 2s. Para retardos
ms pequeos se debe utilizar la llamada de ensamblador 'nop' (no operacin). Cada sentencia 'nop' se ejecutar en un
ciclo de mquina (16 MHz) de aproximadamente 62.5ns.
Manipulacin de puertos
La manipulacin de puertos con cdigo AVR es ms rpida que utilizar la funcin digitalWrite() de Arduino.
Establecer Bits en variables cbi y sbi son mecanismos estndar (AVR) para establecer o limpiar bits en PORT y otras
variables.
Diferencias con Processing
La sintaxis del lenguaje de programacin Arduino es una versin simplificada de C/C++ y tiene algunas diferencias
respecto de Processing.26 27 Debido a que Arduino est basado en C/C++ mientras que Processing se basa en Java,
existen varias diferencias en cuanto a la sintaxis de ambos lenguajes y el modo en que se programa:
Arreglos
Arduino Processing
int bar[8];
bar[0] = 1;
int[] bar = new int[8];
bar[0] = 1;
int foo[] = { 0, 1, 2 };
int foo[] = { 0, 1, 2 };
o bien
int[] foo = { 0, 1, 2 };
Impresin de cadenas
Arduino Processing
Serial.println("hello world"); println("hello world");
int i = 5;
Serial.println(i);
int i = 5;
println(i);
int i = 5;
Serial.print("i = ");
Serial.print(i);
Serial.println();
int i="5;"
println("i =" + i);
Ejemplo sencillo de programacin en Arduino
El primer paso antes de comprobar que la instalacin es correcta y empezar a trabajar con Arduino, es usar ejemplos
prcticos que vienen disponibles con el dispositivo. Se recomienda abrir el ejemplo led_blink el cual crea una
intermitencia por segundo en un led conectado en el pin 13. El cdigo necesario es el siguiente:
# define LED_PIN 13
void setup () {
// Activado del contacto 13 para salida digital
pinMode (LED_PIN, OUTPUT);
}
// Bucle infinito
void loop () {
// Encendido del diodo LED enviando una seal alta
digitalWrite (LED_PIN, HIGH);
// Tiempo de espera de 1 segundo (1000 ms)
delay (1000);
// Apagado del diodo LED enviando una seal baja.
digitalWrite (LED_PIN, LOW);
// Tiempo de espera de 1 segundo
delay (1000);
}
Envo y recepcin de datos sobre una red de dispositivos o sensores mediante Two Wire Interface (TWI/I2C).36
Las bibliotecas Matrix y Sprite de Wiring son totalmente compatibles con Arduino y sirven para manejo de matrices
de diodos LED. Tambin se ofrece informacin sobre diversas bibliotecas desarrolladas por diversos colaboradores que
permiten realizar muchas tareas.
Creacin de bibliotecas
Los usuarios de Arduino tienen la posibilidad de escribir sus propias bibliotecas.37 Ello permite disponer de cdigo
que puede reutilizarse en otros proyectos, mantener el cdigo fuente principal separado de las bibliotecas y la
organizacin de los programas construidos es ms clara.
Ejemplo de biblioteca
El siguiente ejemplo permite el envo de caracteres mediante el cdigo Morse:
Se crea el archivo Morse.h que incluye la definicin de la clase Morse que tiene 3 funciones: un constructor (Morse()),
una funcin para enviar 1 punto (dot()) y una funcin para enviar una raya (dash()). La variable _pin permite indicar
el contacto a usar.
/*
Morse.h - Biblioteca para el envo de Cdigo Morse.
Creado por David A. Mellis, el 2 de Noviembre de 2007.
Liberado al dominio pblico.
*/
# ifndef Morse_h
# define Morse_h
# include "WProgram.h"
class Morse
{
public:
Morse(int pin);
void dot();
void dash();
private:
int _pin;
};
# endif
Debe ser creado el archivo Morse.cpp con el cdigo, es decir con la implementacin de los mtodos declarados:
/*
Morse.cpp - Biblioteca para el envo de Cdigo Morse.
Creado por David A. Mellis, el 2 de Noviembre de 2007.
Liberado al dominio pblico.
*/


# include "WProgram.h"
# include "Morse.h"
Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}
void Morse::dot()
{
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}
La biblioteca creada as puede ser usada mediante el comando #include. Si se desea enviar una peticin de
quxilio SOS por el contacto 13 bastara con llamar a Morse(13) y ejecutar la siguiente secuencia:
morse.dot(); morse.dot(); morse.dot();
morse.dash(); morse.dash(); morse.dash();
morse.dot(); morse.dot(); morse.dot();
Bibliografia:
http://www.intel.com/support/sp/processors/sb/cs-031505.htm
http://www.clubse.com.ar/DIEGO/NOTAS/2/nota18.htm
http://www.cedip.edu.mx/tesinas/archivos_tesis/ISCEE/ISCEE_2029.doc
http://www.nuevaelectronica.com/pdf/productos/KM2107.pdf
http://es.wikipedia.org/wiki/Arduino

Vous aimerez peut-être aussi