Programación en ensamblador y en alto nivel (C)



Documentos relacionados
Guía de práctica. Dispositivo

Grado Ingeniería Informática. Tecnologías Informáticas. Estructura de Computadores. Examen final. 1ª Convocatoria. Junio 2011.

Grado en Ingeniería Informática - Ingeniería del Software Estructura de Computadores - Prueba 2 - Junio de 2011

Tema 4: Microcontrolador AT90S2313

3. PROGRAMACIÓN Microcontroladores

Valores iniciales para datos en memoria y en registros internos de CS2010 y AVR

Microcontroladores de Atmel

OPERACIONES BÁSICAS Y DIRECCIONAMIENTO

Arquitectura intel Preámbulo de OSO para alumnos formados en el procesador MIPS. Asignatura Sistemas Operativos Murcia abril de 2005

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

6-REGISTROS DEL 8086 Y DEL 80286

Lector de códigos de barras con microcontrolador Motorola HC11

ISA (Instruction Set Architecture) Arquitectura del conjunto de instrucciones

Circuitos Digitales II y Laboratorio Electrónica Digital II y Laboratorio

Entrada/Salida. Polling e Interrupciones. Verano de Mariano Moscato. Organización del Computador 1

Apellidos Nombre DNI

Práctica 8 - DMA y Almacenamiento Masivo

Análisis general de un Microprocesador

Arquitectura de Computadores

Práctica 4 - Arquitectura CPU

Tema 2: Arquitectura del repertorio de instrucciones. Visión del computador que tiene el programador en bajo nivel.


EXAMEN ORDINARIO DE ORGANIZACIÓN DE COMPUTADORES

Entorno de Ejecución del Procesador Intel Pentium

Programación de Microcontroladores

Ejemplo del uso de las subrutinas

Control Digital en PC con MS-DOS

ESTRUCTURA Y TECNOLOGÍA A DE COMPUTADORES

Guía de programación ATMega328pa

Fundamentos de Computadores I

Examen de Arquitectura de Computadores 2 22 de febrero del 2011

PRACTICA #1. Aprender a programar una interrupción software empleando C y/o Ensamblador.

La arquitectura del 8086/8088

Ensamblador. Interrupciones. Dentro de una computadora existen dos clases de interrupciones:

"Programación en Ensamblador del microprocesador Pentium (I)"

Programación de dispositivos Arduino Asignatura Sistemas Digitales!

ESTRUCTURA Y TECNOLOGÍA A DE COMPUTADORES

INTERRUPCIONES. Existen 256 interrupciones En el modo real cada una tiene un vector asociado Vectores de 4 bytes: segmento + offset 32 F0 50 8A

BUS I2C. IES Los Viveros Sevilla Dpto. Electrónica. 1

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Funciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina.

Tema 14. Interrupciones. Las. C. F. G.S. D.P.E. Módulo de Proyectos 1

INSTRUCCIONES CONDICIONALES

Guía resumida para utilizar el microcontrolador CY7C68013

Estructura de Computadores

Arquitectura de Computadores

MODOS DE DIRECCIONAMIENTO DEL µc51

PRÁCTICA N 5 LABORATORIO DE SISTEMAS MICROPROCESADOS

Conmutación de Tareas

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES.

Tema 4: Ejemplo de un computador real: ATmegaX8pa. 8-bit Microcontroller

Estructura y Tecnología de Computadores (ITIG) Luis Rincón Córcoles Ángel Serrano Sánchez de León

Estructura de Computadores

INSTITUTO TECNOLÓGICO SUPERIOR DE PÁNUCO APUNTES DE LA MATERIA DE: MICROPROCESADORES Y MICROCONTROLADORES I

Boletín 3 - Estructura de computadores Microcontrolador AVR 1. Dirección Contenido Registro Contenido $200 $08 R0 $00 $201 $03 R1 $FF $202 $01 YH $02

Se guardan en archivos con extencion c y los cabezales con extension h

CONJUNTO DE INSTRUCCIONES µp8086

Práctica 4. Introducción a la programación en lenguaje ensamblador

2.4. Modos de direccionamiento Distintas formas que tiene la arquitectura para especificar la ubicación de los operandos.

PRÁCTICA N 5 LABORATORIO DE SISTEMAS MICROPROCESADOS

TUTORIAL PARA PROGRAMAR UN ATMEGA8

2 Sea una unidad de disco duro de brazo móvil con las siguientes características:

Usando los Codificadores Cuadráticos

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

Boletín 3 - Estructura de computadores Microcontrolador AVR 1. Dirección Contenido Registro Contenido $200 $08 R0 $00 $201 $03 R1 $FF $202 $01 YH $02

SISTEMAS BASADOS EN MICROPROCESADOR 2º Grado Ingeniería Informática (EPS UAM) EXAMEN FINAL EXTRAORDINARIO JULIO 2013 ENUNCIADO DEL PROBLEMA

Estructura de Computadores: Tema 1. Introducción. Índice. Arquitectura del i8086

Lo que definimos como CPU (Central Process Unit) o Unidad Central de Proceso, está estructurado por tres unidades operativamente diferentes:

Introducción al NASM. Convenciones de colores

La Unidad Procesadora.

Concurrencia: Exclusión mutua y Sincronización

MICROCONTROLADORES PIC EEPROM. Memoria de programa Características

La memoria principal. Los subsistemas de E/S. Los buses del sistema

Contenidos. Archivos en C++ Archivos en C++ Introducción

Práctica 3: Programación con subrutinas

GUIA GENERAL PARA LA PROGRAMACIÓN DEL SISTEMA EB88 BOOTLOADER: TINY INDICE

Instrucciones de Comunicaciones

Tema 4: Ejemplo de un computador real: ATmegaX8pa. 8-bit Microcontroller

SOLUCION Examen final IC parte B

Qué es un Microcontrolador?

La arquitectura CISCA

Tema 2: Programación de PLCs

2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 5 ENTRADA/SALIDA. JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ Tema 5.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Contenido. Sistemas de Entrada/Salida. Categorias de los Dispositivos de Entrada/Salida. Categorias de los Dispositivos de Entrada/Salida

Lógica Binaria. Arquitectura de Ordenadores. Codificación de la Información. Abelardo Pardo Universidad Carlos III de Madrid

Conceptos de Arquitectura de Computadoras Curso 2015

Laboratorio de Sistemas Embebidos Conceptos generales (2009)

Pregunta correcta= 0,3 Pregunta no contestada= 0 Pregunta incorrecta (tipo test)= -0,15

Clase 20: Arquitectura Von Neuman

Arquitectura basica de un computador

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Winide y Kit EVALQTY CDM 2011

Una máquina automática de cómputos de propósito general debe contener los siguientes componentes básicos:

Guía Laboratorio Número 1

GUIA GENERAL PARA LA PROGRAMACIÓN DEL SISTEMA PICCITO 16F88 INDICE

SISTEMAS DE ENTRADA/SALIDA

Organización Básica de un Computador y Lenguaje de Máquina

Problemario: Memoria / Entrada Salida / Buses / Interrupciones

ESPACIO DE DIRECCIONES

Transcripción:

Programación en ensamblador y en alto nivel (C) Taller de Microcontroladores año 2012 Optativa de grado y Curso de Posgrado

El ISAdel AVR Preliminares 32 registros de 8 bits: R0 a R31 Los registros pueden ser usados por su nombre genérico (Rx) o renombrados mediante una directiva.def.def registrotemporal = r16 Las instrucciones son en general- de 16 bits, con cero, uno o dos operandos para instrucciones diádicas, el resultado es el primer operando Add r5, r4 ; r5 = r5 + r4 en las instrucciones con operandos inmediatos el destino sólo puede ser un registro del segundo grupo (r16..r31) Addi r5, 4 Addi r20, 4 ; INVALIDO!!! ; VALIDO!!!

El ISAdel AVR Los pares de registros r26:r27, r28:r29 y r30:r31 actúan como los registros de 16 bits X, Y y Z respectivamente. X, Y y Z se usan para acceder a la SRAM y Z para acceso a la memoria de programa Las partes alta y baja de los registros indice (X, Y y Z) se acceden como XH, XL; YH, YL y ZH, ZL respectivamente. Los puertos (A, B, C y D) tienen siempre una dirección fija independientemente del modelo de procesador. La SRAM no se accede directamente por al ALU de la CPU. El acceso a la SRAM se realiza a través de dos instrucciones específicas: STS y LDS. STS 0x0060, r1 LDS r1, 0x0060 ; M[0x0060] = r1 ; r1 = M[0x0060] El AVR soporta pila de hardware apuntada por un registro de 16 bits SPH:SPL.

El ISAdel AVR La pila crece hacia zonas bajas de memoria. La variable (de ensamblador) RAMEND aporta el valor de la dirección mas alta de la memoria SRAM (la cual debe ser cargada en el SP) Ldi r16, HIGH(RAMEND) Out SPH, r16 Ldi r16, LOW(RAMEND) Out SPL, r16 Las instrucciones PUSH y POP escriben y leen directamente de la pila

El ISAdel AVR Diseño optimizado para ejecución eficiente de código C. Las estructuras mas frecuentes de C se ensamblan en pocas (1, 2 ó 3) instrucciones del procesador. Aritméticas y lógicas Salto Grupos de instrucciones Transferencia de datos Bit y bit-test Control de CPU

Instrucciones aritmético-lógicas Add rd, rs ; rd = rd + rs Adiw rdl, W ; rdh:rdl = rdh:rdl + W Inc rd ; rd = rd + 1 Mul rd, rs ; R1:R0 = rd * rs Fmul rd, rs ; R1:R0 = (rd * rs) << 1 Mulsu rd, rs ; R1:R0 = rd * rs Tst rd ; rd = rd rd..

Instrucciones de salto Rjmp k ; PC = PC + k + 1 Ijmp Jmp k ; PC = PC + Z ; PC = k Cpse rd, rs ; if (rd==rs) PC = PC + (2 else 3) Sbrc rs, b ; if (rs(b)==0) PC = PC + (2 else 3) Sbrs rs, b ; if (rs(b)==1) PC = PC + (2 else 3) Breq k ; if (Z==1) PC = PC + k + 1 Call k ; push PC, PC = k Ret ; pop PC

Instrucciones de transferencia de datos Mov rd, rs ; rd = rs Movw rd, rs ; rd+1:rd = rs+1:rs Ldi rd, k ; rd = k Ld rd, X ; rd = (X) ; St X, rs Ld rd, X+ ; rd = (X), X = X + 1 ; St X+, rs Ld rd, -X ; X = X 1, rd = (X) ; St -X, rs Ldd rd, Y+q; rd = (Y+q) ; Std Y+q, rs Lds rd, k ; rd = (k) ; Sts k, rs Lpm ; R0 = (Z) Lpm rd, Z ; rd = (Z) Spm ; (Z) = R1:R0 Spm k, rs ; (Z) = rs+1:rs In rd, P ; rd = P ; Out P, rs

Tratamiento de bits Sbi P, b ; IO(P,b) = 1 ; Cbi P, b Bset s ; SREG(s) = 1 ; Bclr s Bst rd, b ; T = rd(b) ; Bld rd, s Sec ; C = 1 ; Clc Sei ; I = 1 ; Cli Lsl rd ; rd(n+1) = rd(n), rd(0) = 0 Clt ; T = 0 ; Set.

Control del procesador Nop Sleep Wdr ; no operation ; sleep processor ; watch dog reset

Estructura de un programa en ensamblador Posee los siguientes elementos: Archivos a incluir (.include).include "8515def.inc.include Uart.asm ; Incluye el archivo completo en este punto del archivo actual Reserva de espacio de memoria (.DB).DB 123,56,34,1.DB Esto es un texto.dw 13454 ; lista de 4 bytes ; lista de bytes, cadena de caracteres. ; una palabra Definición de símbolos (.def).def registrotemporal=r16 ldi registrotemporal, 150

Estructura de un programa en ensamblador Definición de constantes (.EQU).EQU bitcambiado = 5 sbi PortB, bitcambiado cbi PortB, bitcambiado Modificación de dirección por defecto (.org).org 0x0000 rjmp reset.org 0x0016 ldi r1, 54.org 0x0010.DB 1,2,3,4,5,6

Estructura de un programa en ensamblador Inicio de código ejecutable (.CODE) Asignación a memoria SRAM (.DSEG) Definición de sección de eeprom (.ESEG) Definición de macros (.MACRO).MACRO Delay nop nop nop.endmacro

Programando en C Hints importantes en un código C: Archivos include importantes: #include <avr/io.h> ; Definiciones de IO específicas para el dispositivo en uso El archivo incluye: avr\common.h ; descripción de registros comunes a todos los AVR avr\sfr_defs.h ; definición de registros especiales avr\portpins.h avr\version.h

Programando en C Hints importantes en un código C: La rutina principal //Función principal int main(void) { //Declaración e inicializaciones } //Ciclo infinito while(1){ //Código del programa prinicpal } Acá inicializo y activo interrupciones En el ciclo infinito se realiza el programa y/o se hace pooling a los dispositivos NOTAR QUE: Un programa C siempre arranca ejecutando la rutina main Un programa en assembler siempre arranca ejecutando la interrupción 0 [Reset]

Programando en C La rutina principal #include <avr\io.h> #include <util\delay.h> int main(void) { //Puerto D como salida DDRD = 0xFF; } while (1){ _delay_ms(150); } portd(0xe4); portd(0xe8); portd(0xd8); portd(0xd4);.include "m8def.inc".org.def.def.def.def 0x0000 rjmp RESET ;Reset Handle Temp1 = r16 Temp2 = r17 Temp3 = r18 Step = r20 ; genera un delay de 256*256 unidades de tiempo Delay: Loop1: ldi Temp2,0 Loop2: inc Temp2 breq Loop1End rjmp Loop2 Loop1End: inc Temp1 breq Loop1End rjmp Loop1 Loop1End: ret RESET: ldi Temp1, low(ramend) out SPL, Temp1 ldi Temp1, high(ramend) out SPH, Temp1 ldi Temp1, 0xff out DDRD, Temp1 ldi Temp1, 0 Loop0: ldi Temp3, 55

Programando en C Las interrupciones #include <avr/io.h> #include <avr/interrupt.h> unsigned int incomingbyte = 0x00; #define CALC_BAUDRATE(baudrate) F_CPU/16/((baudrate)-1) #define USART_BAUDRATE 51 void USART_Init(){ //Set baud rate UBRRL=(unsigned char)usart_baudrate; //low byte UBRRH=(unsigned char)(usart_baudrate>>8); //high byte //Data format: asynchronous,no parity, 1 stop bit, 8 bit size UCSRC=(1<<URSEL) (0<<UMSEL) (0<<UPM1) (0<<UPM0) (0<<USBS) (0<<UCSZ2) (1<<UCSZ1) (1<<UCSZ0); //Enable Receiver and Interrupt on receive complete UCSRB=(1<<RXEN) (1<<RXCIE); }

Programando en C Las interrupciones void USART_Tx( unsigned int data ){ /* Wait for empty transmit buffer */ while (!( UCSRA & (1<<UDRE)) ){} /* Put data into buffer, sends the data */ UDR = data; } ISR(USART_RXC_vect) { incomingbyte = UDR; } int main(void){ USART_Init(); ENABLE_IRQ; USART_Tx('O'); USART_Tx('K'); USART_Tx(':'); } for(;;){}