Guía de programación ATMega328pa

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

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

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

Organización del Computador I 1er. Parcial 17-Mayo Turno:

8.4. El software en los μprocesadores

Construyendo Programas más Complejos

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

Tema 5: La pila, las macros y los procedimientos

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

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

Práctica 4. Organización del Computador 1 12 de septiembre de Algunas consideraciones preliminares:

Ciclos de máquina. Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP) DCX rp

Conceptos de Arquitectura de Computadoras Curso 2015

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

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

Práctica 4 - Arquitectura CPU

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

Programación de Sistemas. Unidad 1. Programación de Sistemas y Arquitectura de una Computadora

Ejercicios del tema 4. El procesador

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Funcionamiento de la Pila (o stack)

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

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Paso de parámetros y gestión del marco de pila

Relación de Problemas I

Arquitectura (Procesador familia 80 x 86 )

CONSTITUCIONES MISIONEROS CLARETIANOS

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

El nivel ISA (II)! Conjunto de Instrucciones

GUÍA BÁSICA DE SCHEME v.4

Tema 2 Introducción a la Programación en C.

3. PROGRAMACIÓN Microcontroladores

FUNDAMENTOS DE INFORMÁTICA

: Algorítmica y Estructura de Datos I

Tema 4. Lenguaje máquina y lenguaje ensamblador

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

3 - Arquitectura interna de un up

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Ejemplo del uso de las subrutinas

Arquitectura de Computadores II Clase #3

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

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

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Resumen de las instrucciones del 8086/8088

Trabajo Práctico Nro 3: Assembler

LENGUAJE. Tema 2 Elementos de un programa

El Diseño de un Lenguaje Máquina

Programación. Test Autoevaluación Tema 3

TEMA 4. ARQUITECTURA IA-64

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

La arquitectura CISCA

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

Guía de práctica. Dispositivo

4. Operadores Operador asignación

Comparaciones en lenguaje ensamblador

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

Instrucciones de Control de Flujo y Usos de la Pila

Java para no Programadores

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Práctica 3: El teclado del PC

Agosto de 2012 TUTORIAL PSEINT. Servicio Nacional de Aprendizaje SENA Jordan Angulo Canabal

Intel 8086 modelo básico (primera parte) Registros:

J E F A D E L D E P A R T A M E N T O D E M E D I C I N A V E T E R I N A R I A

Unidad II: Análisis semántico

El microprocesador de 8 bits Z80

UNIDAD 3 ARQUITECTURA DEL Z80. Microprocesadores Otoño 2011

Fundamentos de Programación Visual Basic

CS2010: Software de programación y depuración

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

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

Tema 2: Lenguaje máquina. La interfaz entre el hardware y el software

Tema 2. El lenguaje JAVA

El lenguaje C. 1. Identificadores, constantes y variables

Objetivos. Objetivos. Arquitectura de Computadores. R.Mitnik

PRÁCTICA Nº3. 1. TEMA : Conocimiento del software de desarrollo ATMEL Studio

Técnicas de Programación

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

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

SISTEMAS BASADOS EN MICROPROCESADORES

Arquitectura de Computadores II 8086 Parte II

Introducción a la programación

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

Microprocesadores, Tema 2:

Tema 4: Lenguaje máquina - Lenguaje ensamblador

Guía rápida para gestionar el puerto paralelo del PC

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Tema 7. Generación de código

Tema 4. Lenguaje máquina y lenguaje ensamblador

P L A N I F I C A C I O N

Entorno de Ejecución del Procesador Intel Pentium

LECCIÓN 14: DISEÑO DE COMPUTADORES MEDIANTE MICROPROGRAMACION

Introducción a la arquitectura de computadores

Intel Arquitectura. Programación en Ensamblador Ing. Marcelo Tosini

Práctica 2: Sector de arranque

Tema 6. Gestión dinámica de memoria

Transcripción:

Guía de programación ATMega328pa Autor: Alberto J. Molina Última modificación: 6/05/13 Usted es libre de copiar, distribuir y comunicar públicamente la obra y de hacer obras derivadas siempre que se cite la fuente y se respeten las condiciones de la licencia Attribution-Share alike de Creative Commons. Texto completo de la licencia: http://creativecommons.org/licenses/by-nc-sa/3.0/es/ -------------------------------------------------------------------------- 1

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 2

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 3

Pseudocódigo / Lenguaje Ensamblador - La programación en bajo nivel es compleja. Requiere el conocimiento de: - La arquitectura del procesador. - La organización de datos en la memoria y de los modos de direccionamiento. - El amplio juego de instrucciones. - Y precisa que el programador tenga en cuenta la notación numérica de los datos, a la hora de realizar operaciones con ellos (comparaciones, detección de overflows, etc.). NADA DE ESTO SERÍA NECESARIO EN LENGUAJES DE ALTO NIVEL 4

Pseudocódigo / Lenguaje Ensamblador - Sin embargo, la programación en bajo nivel permite al programador el control pleno de los recursos de la máquina (p.e: rutina de retardo temporal) - El programador de bajo nivel requiere realizar dos tareas: - Determinar el algoritmo - Expresarlo en bajo nivel 5

Pseudocódigo / Lenguaje Ensamblador - Intentar realizar esas dos tareas a la vez dificulta enormemente la programación y reduce la probabilidad de éxito. - Hagamos las dos tareas por separado. DIVIDE Y VENCERÁS 6

Pseudocódigo / Lenguaje Ensamblador - Procedimiento a seguir pasaría: 1) Describir el algoritmo en lenguaje de alto nivel (pseudocódigo). 2) Traducir dicho pseudocódigo a ensamblador (procedimiento que siguen los compiladores). 7

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 8

Sentencias de asignación I vble1 const vble1 vble2 vble1 (vble2) Dónde se encuentran las variables? Sólo para Operaciones de ES a[i] vble 9

Sentencias de asignación II (Inicialización) vble1 const Ej.: A 10.def A = Rd ;d =[16,31].equ const = 10 LDI A, const 10

Sentencias de asignación III (inicialización) vble1 const Ej.: A 10.def temp = R16;.def A = dir; dir =[$100,RAMEND].equ const = 10 LDI temp, const STS A, temp 11

Sentencias de asignación IV vble1 vble2 Ej.: A C.def A = Rd1;.def B = Rd2; d1,d2 = [0,31] MOV A,B 12

Sentencias de asignación V vble1 vble2 (tamaño W) Ej.:A B.def AH = R1.def AL = R0.def BH = R3.def BL = R2 MOVW AH:AL,BH:BL (Recordad notación little-endian) 13

Sentencias de asignación VI vble1 vble2 Ej.: A C.equ A = dir1;.equ B = dir2; dir1,2 = [$100,RAMEND].def temp = R16 LDS temp, B STS A,temp 14

Sentencias de asignación VII vble1 (vble2) Ej.: A (punt) ; (Registros X,Y,Z).def A = Rd ; d=[0,31] LD A, Z 15

Sentencias de asignación VIII vble1 (vble2) vble2 vble2+1 Ej.: A (punt) punt punt+1 ; (Registros X,Y,Z).def A = Rd ; d=[0,31] LD A, Z+ 16

Sentencias de asignación IX vble2 vble2-1 vble1 (vble2) Ej.: punt punt-1 A (punt) ; (Registros X,Y,Z).def A = Rd ; d=[0,31] LD A, -Z 17

Sentencias de asignación X vble1 (vble2+d) Ej.: A (punt+2) ; (Registros Y,Z).def A = Rd ; d=[0,31] LDD A, Y+2 18

Sentencias de asignación XI Para inicializar un puntero Z $0100 LDI ZL, low($0100) LDI ZH, high($0100) 19

Sentencias de asignación XII (acceso a matrices) vble1 Matriz[vble2] Vble1 Matriz[const] Matriz[const] Vble1 Matriz[vble2] Vble1 Ej.: A B[C], A B[2]; Dónde se guardan las matrices de datos? 20

Sentencias de asignación XIII (acceso a matrices) Procedimiento de creación de una matriz (I).equ tam =... ;tamaño de la matriz.dseg.org $100 ;A partir de esta dirección Matriz:.byte(tam) ;Reserva #tam bytes de la SRAM interna a partir de la dirección Matriz que es igual a $100 21

Sentencias de asignación XIV (acceso a matrices) Procedimiento de creación de una matriz (II) ;Ahora hay que rellenar la matriz con datos (procedimiento manual) LDI R16, dato0 STS Matriz, R16 LDI R16, dato1 STS Matriz+1,R16 El ensamblador substituye Matriz por $100 El ensamblador substituye Matriz+1 por $101 22

Sentencias de asignación XV (acceso a matrices) Acceso al elemento Matriz[vble1] Ej.: a Matriz[i].def i = R3.def a = R1.def cero = R0 CLR R0 LDI XL, low(matriz) LDI XH,high(Matriz) ADD XL,i ADC XH,cero LD a, X 0 cero X + 2 i Matriz Dato0 Dato1 Dato2 Dato3 Dato4... 23

Sentencias de asignación XVI (acceso a matrices) Acceso al elemento Matriz[const] Y Ej.: Matriz[2] A.equ const = 2 ;[Entre 0 y 63].def A =R2 LDI YL, low(matriz) LDI YH,high(Matriz) STD Y+const,A + const Matriz Dato0 Dato1 Dato2 Dato3 Dato4... 24

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 25

Sentencias de control (I) si (condición) sino... ; cuerpo para condición ;cierta Tipos de condiciones: A == B (igualdad) A!= B ó A <> B (desigualdad) A > B (A mayor que B) A >= B (A mayor o igual que B) fsi... ; para condición falsa A < B (A menor que B) A <= B (A menor o igual que B) A(b) (consulta el bit b de la variable A) A y B pueden ser: - ambas variables - una variable y una constante A(b) es el bit de la variable A 26

Si ( condición) Sino fsi Sentencias de control (II) ;{cuerpo cierto} ;{cuerpo falso} ES IMPORTANTE TENER EN CUENTA SI LAS VARIABLES A COMPARAR SON CON SIGNO O SIN SIGNO CP A,B Brxx Si Sino: ; {cuerpo falso} JMP fsi Si: ;{cuerpo cierto} Fsi:... ;Instrucción siguiente A = Rd B = Rr Si A o B son variables de la SRAM, deberemos moverlas a la zona de registros Test (CP Rd,Rr) Booleana Mnemonico Comentario Rd Rr (N V) = 0 BRGE Signo Rd < Rr (N V) = 1 BRLT Signo Rd = Rr Z = 1 BREQ Signo/Sin signo Rd Rr Z = 0 BRNE Signo/Sin signo Rd Rr C = 0 BRCC/BRSH Sin signo Rd < Rr C = 1 BRCS/BRLO Sin signo Carry C=1 BRCS Simple Sin carry C=0 BRCC Simple Negativo N=1 BRMI Simple Positivo N=0 BRPL Simple Overflow V=1 BRVS Simple Sin overflow V=0 BRVC Simple Cero Z=1 BREQ Simple No cero Z=0 BRNE Simple 27

Si ( condición) Sino fsi Sentencias de control (III) ;{cuerpo cierto} ;{cuerpo falso} ES IMPORTANTE TENER EN CUENTA SI LAS VARIABLES A COMPARAR SON CON SIGNO O SIN SIGNO CPI A,cte Brxx Si Sino: ; {cuerpo falso} JMP fsi Si: ;{cuerpo cierto} Fsi:... ;Instrucción siguiente A = Rd ;d=[16,31] B = Cte ;de 8 bits Test (CP Rd,Rr) Booleana Mnemonico Comentario Rd Rr (N V) = 0 BRGE Signo Rd < Rr (N V) = 1 BRLT Signo Rd = Rr Z = 1 BREQ Signo/Sin signo Rd Rr Z = 0 BRNE Signo/Sin signo Rd Rr C = 0 BRCC/BRSH Sin signo Rd < Rr C = 1 BRCS/BRLO Sin signo Carry C=1 BRCS Simple Sin carry C=0 BRCC Simple Negativo N=1 BRMI Simple Positivo N=0 BRPL Simple Overflow V=1 BRVS Simple Sin overflow V=0 BRVC Simple Cero Z=1 BREQ Simple No cero Z=0 BRNE Simple 28

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 29

Bucles (I) Mientras (condición) ; { cuerpo bucle} Bucle: CP A,B Brxx FinBucle Condición opuesta ; {cuerpo bucle} JMP bucle FinBucle:.;Instrucción siguiente A = Rd B = Rr Fin mientras EL CUERPO DEL BUCLE SE EJECUTA SIEMPRE QUE LA CONDICIÓN SEA QUE SE EVALÚA SEA CIERTA Test (CP Rd,Rr) Booleana Mnemonico Comentario Rd Rr (N V) = 0 BRGE Signo Rd < Rr (N V) = 1 BRLT Signo Rd = Rr Z = 1 BREQ Signo/Sin signo Rd Rr Z = 0 BRNE Signo/Sin signo Rd Rr C = 0 BRCC/BRSH Sin signo Rd < Rr C = 1 BRCS/BRLO Sin signo Carry C=1 BRCS Simple Sin carry C=0 BRCC Simple Negativo N=1 BRMI Simple Positivo N=0 BRPL Simple Overflow V=1 BRVS Simple Sin overflow V=0 BRVC Simple Cero Z=1 BREQ Simple No cero Z=0 BRNE Simple 30

Bucles (II) hacer ; { cuerpo bucle} Mientras (condición) Bucle: ; {cuerpo bucle} CP A,B Brxx Bucle FinBucle:.;Instrucción siguiente A = Rd B = Rr EL CUERPO DE UN HACER MIENTRAS SE EJECUTA AL MENOS UNA VEZ Y SE REPITE SIEMPRE QUE LA CONDICIÓN EVALUADA SEA CIERTA. 31

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 32

Subrutinas (I) Nombre: Subr Nombre ;{cuerpo subrutina} ; {cuerpo subrutina} FinNombre: RET Fin Nombre - EL PUNTERO SP ESTÁ INICIADO A RAMEND - EVITAR USAR LA ZONA ALTA DE LA SRAM PARA DATOS DEL PROGRAMA. ZONA DE PILA 33

Subrutinas (II) Llamada a una subrutina Nombre () CALL Nombre Subr Nombre ;Subrutina sin ;argumentos ; { cuerpo } Nombre:. {cuerpo} RET Fin Nombre 34

Subrutinas (III) Llamada a una subrutina A Nombre (B,C,..) Subr Nombre ;Subrutina con ;argumentos ; { cuerpo } Fin Nombre.DEF A = Rd1.DEF B = Rd2.DEF C = Rd3 CALL Nombre Nombre:. {cuerpo} RET UTILIZAMOS REGISTROS PARA ALMACENAR LOS RESULTADOS Y LOS ARGUMENTOS DE LA SUBRUTINA 35

Subrutinas (IV) Llamada a una subrutina A Nombre (B,C,..) Subr Nombre PILA registros ; { cuerpo } Registros PILA Fin Nombre.DEF A = Rd1.DEF B = Rd2.DEF C = Rd3 CALL Nombre Nombre: PUSH RN PUSH RM {cuerpo} POP RM POP RN RET Observe que el orden para extraer es el inverso al de introducir en la PILA CONVIENE GUARDAR EL CONTENIDO DE LOS REGISTROS QUE VAYAN A SER MODIFICADOS POR LA SUBRUTINA. DÓNDE? EN LA PILA 36

Subrutinas (V) A Nombre (B,C) Subr Nombre PILA registros ; { cuerpo } Registros PILA Fin Nombre PUSH A PUSH B PUSH C CALL Nombre POP C POP B POP A SRAM ES MÁS HABITUAL PASAR LOS ARGUMENTOS Y LA SALIDA DE UNA SUBRUTINA A TRAVÉS DE LA PILA SP C B A 37

Subrutinas (VI) A Nombre (B,C) Nombre: Subr Nombre PILA registros ; { cuerpo } Registros PILA Fin Nombre RET SP ᄎ SRAM PCL PCH CUANDO SE EMPIEZA A EJECUTAR LA PRIMERA INSTRUCCIÓN DE LA SUBRUTINA, EL ESTADO DE LA PILA ES EL QUE SE MUESTRA C B A 38

Subrutinas (VI) A Nombre (B,C) Subr Nombre PILA registros ; { cuerpo } Registros PILA Fin Nombre Nombre: PUSH YH PUSH YL IN YL,SPL IN YH,SPH POP YL POP YH RET SP SRAM YL YH PCL PCH COPIAMOS EL SP A UN REGISTRO Y, Z (PERO PREVIAMENTE SE GUARDA) C B A 39

Subrutinas (VI) A Nombre (B,C) Subr Nombre PILA registros ; { cuerpo } Registros PILA Fin Nombre Nombre: PUSH YH PUSH YL IN YL,SPL IN YH,SPH ;{cuerpo} POP YL POP YH RET SP +1 +2 +3 +4 SRAM YL YH PCL PCH +5 C PARA LEER EL DATO C USAREMOS: LDD Y+5 PARA LEER EL DATO B USAREMOS: LDD Y+6 PARA MODIFICAR EL RESULTADO A: STD Y+7 +6 +7 B A 40

Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación 3. Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones 41

Interrupciones (I) Subr IntNombre PILA SREG ; { cuerpo } SREG PILA Fin IntNombre IntNombre: IN R16,SREG PUSH R16 ;{cuerpo} POP R16 OUT SREG,R16 RETI IDÉNTICO FORMATO QUE PARA LAS SUBRUTINAS. EN ENSAMBLADOR SE ESCRIBE RETI AL FINAL EN LUGAR DE RET. NO OLVIDAR SALVAR EL SREG 42

Interrupciones (II) Subr IntNombre PILA SREG ; { cuerpo } SREG PILA Fin IntNombre.CSEG.ORG VectInt JMP IntNombre... IntNombre: IN R16,SREG PUSH R16 ;{cuerpo} POP R16 OUT SREG,R16 RETI LAS RUTINAS DE INTERRUPCIÓN TIENEN QUE ESTAR INSTALADAS EN SU RESPECTIVOS VECTORES DE INTERRUPCIÓN. 43