![Page 1: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/1.jpg)
1
Guía de programaciónATMega328pa
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/
--------------------------------------------------------------------------
![Page 2: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/2.jpg)
2
Índice1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 3: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/3.jpg)
3
Índice
1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 4: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/4.jpg)
4
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
![Page 5: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/5.jpg)
5
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
![Page 6: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/6.jpg)
6
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
![Page 7: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/7.jpg)
7
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).
![Page 8: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/8.jpg)
8
Índice
1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 9: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/9.jpg)
9
Sentencias de asignación I
vble1 ← const
vble1 ← vble2
vble1 ← (vble2)
a[i] ← vble
¿Dónde se encuentran las variables?
Sólo para Operaciones
de ES
![Page 10: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/10.jpg)
10
Sentencias de asignación II(Inicialización)
vble1 ← const
Ej.: A ← 10
.def A = Rd ;d =[16,31]
.equ const = 10
LDI A, const
![Page 11: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/11.jpg)
11
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
![Page 12: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/12.jpg)
12
Sentencias de asignación IV
vble1 ← vble2
Ej.: A ← C
.def A = Rd1;
.def B = Rd2; d1,d2 = [0,31]
MOV A,B
![Page 13: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/13.jpg)
13
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)
![Page 14: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/14.jpg)
14
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
![Page 15: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/15.jpg)
15
Sentencias de asignación VII
vble1 ← (vble2)
Ej.: A ← (punt)
; (Registros X,Y,Z)
.def A = Rd ; d=[0,31]
LD A, Z
![Page 16: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/16.jpg)
16
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+
![Page 17: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/17.jpg)
17
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
![Page 18: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/18.jpg)
18
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
![Page 19: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/19.jpg)
19
Sentencias de asignación XI
Para inicializar un puntero
Z ← $0100
LDI ZL, low($0100)
LDI ZH, high($0100)
![Page 20: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/20.jpg)
20
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?
![Page 21: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/21.jpg)
21
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
![Page 22: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/22.jpg)
22
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
![Page 23: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/23.jpg)
23
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 = R0CLR R0LDI XL, low(Matriz)LDI XH,high(Matriz)ADD XL,iADC XH,ceroLD a, X
Dato0
Dato1
Dato2
Dato3
Dato4
...
Matriz
X
2
i
+
0
cero
![Page 24: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/24.jpg)
24
Sentencias de asignación XVI(acceso a matrices)
Acceso al elemento Matriz[const]
Ej.: Matriz[2] ← A.equ const = 2 ;[Entre 0 y 63].def A =R2LDI YL, low(Matriz)LDI YH,high(Matriz)STD Y+const,A
Dato0
Dato1
Dato2
Dato3
Dato4
...
Matriz
Y
+
const
![Page 25: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/25.jpg)
25
Índice
1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 26: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/26.jpg)
26
Sentencias de control (I)
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)
A < B (A menor que B)
A <= B (A menor o igual que B)
A(b) (consulta el bit b de la variable A)
si (condición)
…... ; cuerpo para condición ;cierta
sino
….... ; para condición falsa
fsi
A y B pueden ser:- ambas variables- una variable y una constanteA(b) es el bit de la variable A
![Page 27: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/27.jpg)
27
Sentencias de control (II)Si ( condición)
;{cuerpo cierto}
Sino
;{cuerpo falso}
fsi
CP A,BBrxx Si
Sino: ; {cuerpo falso}
JMP fsiSi: ;{cuerpo cierto}Fsi: ... ;Instrucción siguiente
Test (CP Rd,Rr) Booleana Mnemonico ComentarioRd ≥Rr (N ⊕ V) = 0 BRGE SignoRd < Rr (N ⊕ V) = 1 BRLT SignoRd = Rr Z = 1 BREQ Signo/Sin signoRd ≠ Rr Z = 0 BRNE Signo/Sin signoRd ≥ Rr C = 0 BRCC/BRSH Sin signoRd < Rr C = 1 BRCS/BRLO Sin signoCarry C=1 BRCS Simple
Sin carry C=0 BRCC SimpleNegativo N=1 BRMI SimplePositivo N=0 BRPL Simple
Overflow V=1 BRVS SimpleSin overflow V=0 BRVC Simple
Cero Z=1 BREQ SimpleNo cero Z=0 BRNE Simple
A = RdB = Rr
Si A o B son variables dela SRAM, deberemos moverlas a la zona de registros
ES IMPORTANTE TENER EN CUENTA SI LAS VARIABLES A COMPARAR SON CON SIGNO O SIN SIGNO
![Page 28: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/28.jpg)
28
Sentencias de control (III)Si ( condición)
;{cuerpo cierto}
Sino
;{cuerpo falso}
fsi
CPI A,cteBrxx Si
Sino: ; {cuerpo falso}
JMP fsiSi: ;{cuerpo cierto}Fsi: ... ;Instrucción siguiente
Test (CP Rd,Rr) Booleana Mnemonico ComentarioRd ≥Rr (N ⊕ V) = 0 BRGE SignoRd < Rr (N ⊕ V) = 1 BRLT SignoRd = Rr Z = 1 BREQ Signo/Sin signoRd ≠ Rr Z = 0 BRNE Signo/Sin signoRd ≥ Rr C = 0 BRCC/BRSH Sin signoRd < Rr C = 1 BRCS/BRLO Sin signoCarry C=1 BRCS Simple
Sin carry C=0 BRCC SimpleNegativo N=1 BRMI SimplePositivo N=0 BRPL Simple
Overflow V=1 BRVS SimpleSin overflow V=0 BRVC Simple
Cero Z=1 BREQ SimpleNo cero Z=0 BRNE Simple
A = Rd ;d=[16,31]B = Cte ;de 8 bits
ES IMPORTANTE TENER EN CUENTA SI LAS VARIABLES A COMPARAR SON CON SIGNO O SIN SIGNO
![Page 29: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/29.jpg)
29
Índice
1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 30: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/30.jpg)
30
Bucles (I)
Mientras (condición)
; { cuerpo bucle}
Fin mientras
Bucle: CP A,BBrxx FinBucle
; {cuerpo bucle}
JMP bucleFinBucle: ….;Instrucción siguiente
Test (CP Rd,Rr) Booleana Mnemonico ComentarioRd ≥Rr (N ⊕ V) = 0 BRGE SignoRd < Rr (N ⊕ V) = 1 BRLT SignoRd = Rr Z = 1 BREQ Signo/Sin signoRd ≠ Rr Z = 0 BRNE Signo/Sin signoRd ≥ Rr C = 0 BRCC/BRSH Sin signoRd < Rr C = 1 BRCS/BRLO Sin signoCarry C=1 BRCS Simple
Sin carry C=0 BRCC SimpleNegativo N=1 BRMI SimplePositivo N=0 BRPL Simple
Overflow V=1 BRVS SimpleSin overflow V=0 BRVC Simple
Cero Z=1 BREQ SimpleNo cero Z=0 BRNE Simple
A = RdB = Rr
Condición opuesta
EL CUERPO DEL BUCLE SE EJECUTASIEMPRE QUE LA CONDICIÓN SEA QUESE EVALÚA SEA CIERTA
![Page 31: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/31.jpg)
31
Bucles (II)
hacer
; { cuerpo bucle}
Mientras (condición)
Bucle:
; {cuerpo bucle}
CP A,BBrxx Bucle
FinBucle: ….;Instrucción siguiente
A = RdB = Rr
EL CUERPO DE UN HACER MIENTRAS SE EJECUTA AL MENOS UNA VEZY SE REPITE SIEMPRE QUE LA CONDICIÓN EVALUADA SEA CIERTA.
![Page 32: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/32.jpg)
32
Índice
1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 33: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/33.jpg)
33
Subrutinas (I)
Subr Nombre
;{cuerpo subrutina}
Fin Nombre
Nombre:
; {cuerpo subrutina}
FinNombre: RET
- EL PUNTERO SP ESTÁ INICIADO A RAMEND- EVITAR USAR LA ZONA ALTA DE LA SRAM PARA DATOS DEL PROGRAMA.
ZONA DE PILA
![Page 34: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/34.jpg)
34
Subrutinas (II)Llamada a una subrutina
Nombre ()
Subr Nombre
;Subrutina sin ;argumentos ; { cuerpo }
Fin Nombre
CALL Nombre
Nombre: ….{cuerpo}
RET
![Page 35: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/35.jpg)
35
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 LOSARGUMENTOS DE LA SUBRUTINA
![Page 36: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/36.jpg)
36
Subrutinas (IV)Llamada a una subrutina
A ← Nombre (B,C,..)
Subr Nombre PILA ← registros ; { cuerpo } Registros ← PILAFin Nombre
.DEF A = Rd1
.DEF B = Rd2
.DEF C = Rd3
CALL Nombre
Nombre: PUSH RNPUSH RM{cuerpo}POP RMPOP RNRET
CONVIENE GUARDAR EL CONTENIDO DE LOS REGISTROS QUE VAYAN
A SER MODIFICADOS POR LA SUBRUTINA. ¿DÓNDE? → EN LA PILA
Observe que el orden para extraer es el inverso al de introducir en la PILA
![Page 37: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/37.jpg)
37
Subrutinas (V)
A ← Nombre (B,C)
Subr Nombre PILA ← registros ; { cuerpo } Registros ← PILAFin Nombre
PUSH APUSH BPUSH C
CALL NombrePOP CPOP BPOP A
ES MÁS HABITUAL PASAR LOS ARGUMENTOS Y LA SALIDA DE UNA SUBRUTINA A TRAVÉS DE LA PILA
C
B
A
SRAM
SP
![Page 38: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/38.jpg)
38
Subrutinas (VI)
A ← Nombre (B,C)
Subr Nombre PILA ← registros ; { cuerpo } Registros ← PILAFin Nombre
Nombre:
RET
CUANDO SE EMPIEZA A EJECUTAR LA PRIMERA INSTRUCCIÓN DE LA SUBRUTINA, EL ESTADO DE LA PILA ES EL QUE SE MUESTRA
PCL
PCH
C
B
A
SRAMSP ᄎ
![Page 39: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/39.jpg)
39
Subrutinas (VI)
A ← Nombre (B,C)
Subr Nombre PILA ← registros ; { cuerpo } Registros ← PILAFin Nombre
Nombre: PUSH YHPUSH YLIN YL,SPLIN YH,SPH
POP YLPOP YHRET
COPIAMOS EL SP A UN REGISTRO Y, Z (PERO PREVIAMENTE SE GUARDA)
YL
YH
PCL
PCH
C
B
A
SRAM
SP
![Page 40: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/40.jpg)
40
Subrutinas (VI)
A ← Nombre (B,C)
Subr Nombre PILA ← registros ; { cuerpo } Registros ← PILAFin Nombre
Nombre: PUSH YHPUSH YLIN YL,SPLIN YH,SPH
;{cuerpo}
POP YLPOP YHRET
PARA LEER EL DATO C USAREMOS: LDD Y+5PARA LEER EL DATO B USAREMOS: LDD Y+6PARA MODIFICAR EL RESULTADO A: STD Y+7
YL
YH
PCL
PCH
C
B
A
SRAM
SP
+1
+2
+3
+4
+5
+6
+7
![Page 41: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/41.jpg)
41
Índice
1. Pseudocódigo / Lenguaje Ensamblador
2. Sentencias de asignación
3. Sentencias de control
4. Bucles
5. Subrutinas
6. Interrupciones
![Page 42: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/42.jpg)
42
Interrupciones (I)
Subr IntNombre PILA ← SREG ; { cuerpo } SREG ← PILAFin IntNombre
IntNombre: IN R16,SREGPUSH R16
;{cuerpo}
POP R16OUT SREG,R16RETI
IDÉNTICO FORMATO QUE PARA LAS SUBRUTINAS. EN ENSAMBLADOR SE ESCRIBE RETI AL FINAL EN LUGAR DE RET. NO OLVIDAR SALVAR EL SREG
![Page 43: Guía de programación ATMega328pa...Sentencias de control 4. Bucles 5. Subrutinas 6. Interrupciones. 3 Índice 1. Pseudocódigo / Lenguaje Ensamblador 2. Sentencias de asignación](https://reader033.vdocumento.com/reader033/viewer/2022051512/603755138d170342180f5346/html5/thumbnails/43.jpg)
43
Interrupciones (II)
Subr IntNombre PILA ← SREG ; { cuerpo } SREG ← PILAFin IntNombre
.CSEG
.ORG VectIntJMP IntNombre
…............IntNombre:
IN R16,SREGPUSH R16
;{cuerpo}
POP R16OUT SREG,R16RETI
LAS RUTINAS DE INTERRUPCIÓN TIENEN QUE ESTAR “INSTALADAS” EN SU RESPECTIVOS VECTORES DE INTERRUPCIÓN.