Está en la página 1de 24

Introducción a Sistemas Embebidos

EL6004

Saltos
Microcontroladores

Prof. Jimmy Tarrillo


2020-1
1
Objetivos del Curso
• Comprender el set de instrucciones de un
microcontorlador
• Comprender el camino de datos de un
microcontorlador
• Utilizar instrucciones de saltos condicionales e
incondicionales en programas básicos
• Plantear algoritmos usando saltos en
programación estructurada y no estructurada para
microcontroladores

2
Ejercicio
Escribir el diagrama de flujo que muestre
mediante 4 LEDs el valor de una cuenta que se
incrementa al presionar el pulsador P0 y se
decrementa al presionar y soltar el pulsador
P1. Considere que el valor inicial es 1, y que el
valor máximo es 15 y el menor 0

3
Set de instrucciones
Suma: ADD, ADC, ADIW, INC
Aritmético

Resta: SUB, SUBI, SBC, SBCI, SBIW, DEC


/ lógicas

Multi: MUL, MULS, MULSU, FMUL, FMULS, FMUSU


Op. lógicas: AND, ANDI, OR, ORI, EOR, COM, NEG,
Otros: SBR, CBR, TST, CLR, SER

Condicionales: CPSE, SBRC, SBRS, SBIC, SBIS, BRBS, BRBC, BREQ, BRNE,
BRCS, BRCC, BRSH, BRLO, BRMI, BRPL, BRGE, BRLT, BRHS, BRHC, BRTS,
Saltos

BRTC, BRVS, BRVC, BRIE, BRID


Incondicionales : RJMP, IJMP, JMP, RCALL, ICALL, EICALL, CALL, RET, RETI,
Otros: CP, CPC, CPI

Registros: MOV, MOVW


Lectura : LDI, LDS, LD, LDD, IN, LPM, ELPM
Datos

Escritura: STS, ST, STD, OUT


Pila: PUSH, POP
Desplazamiento: LSL, LSR, ROL, ROR, ASR, SWAP
Bit a
Bit

Lectura : BSET, BCLR, SBI, CBI, BST, BLD, SEC, CLC, SEN, CLN, SEN, SEZ,
CLZ, SEI, CLI, SES, CLS, SEV, CLV, SET, CLT, SEH, CLH
Otros NOP, SLEEP, WDR 4
Saltos
• Condicionales:
• Depende del estado de las banderas del registro de
estado/estado de bits
• Número de ciclos depende del resultado de la
condición

• Incondicionales:
• Considere el rango de salto, número de ciclos
usados, posición de memoria

5
Saltos incondicionales

• Rangos de salto diferentes


• No modifican las banderas
• EIJMP no está implementado en el Atmega328

6
Saltos no condicionales

7
Saltos no condicionales

8
Ejercicio: muestre el contenido de la memoria de
programa del siguiente código

start:
INC r16
JMP etiqueta_1; salto positivo

.CSEG
.ORG 0x0100
etiqueta_1:
DEC R16
RJMP etiqueta_2; salto relativo positivo

.ORG 0x0105
etiqueta_3:
JMP start; salto negativo

.ORG 0x0110
etiqueta_2:
RJMP etiqueta_3; salto relativo negativo

9
Ejercicio: muestre el contenido de la memoria de
programa del siguiente código

start:
000000 9503 INC r16
000001 940c 0100 JMP etiqueta_1; salto positivo

.CSEG
.ORG 0x0100
etiqueta_1:
000100 950a DEC R16
000101 c00e RJMP etiqueta_2; salto relativo positivo

.ORG 0x0105
etiqueta_3:
000105 940c 0000 JMP start; salto negativo

.ORG 0x0110
etiqueta_2:
000110 cff4 RJMP etiqueta_3; salto relativo negativo

10
Ejercicio: muestre el contenido de la memoria de
programa del siguiente código

start:
000000 9503 INC r16 0x0100
000001 940c 0100 JMP etiqueta_1; salto positivo
1001 0100 0000 1100 0000 0001 0000 0000
.CSEG
.ORG 0x0100
etiqueta_1:
000100 950a DEC R16 0x0110
000101 c00e RJMP etiqueta_2; salto relativo positivo
1100 0000 0000 1110
.ORG 0x0105
etiqueta_3: 0x0000
000105 940c 0000 JMP start; salto negativo
1001 0100 0000 1100 0000 0000 0000 0000
.ORG 0x0110
etiqueta_2: 0x0105
000110 cff4 RJMP etiqueta_3; salto relativo negativo
1100 1111 1111 0100

11
Ejercicio: muestre el contenido de la memoria de
programa del siguiente código

start:
000000 9503 INC r16
000001 940c 0100 JMP etiqueta_1; salto positivo

.CSEG
.ORG 0x0100
etiqueta_1:
000100 950a DEC R16
000101 c00e RJMP etiqueta_2; salto relativo positivo

.ORG 0x0105
etiqueta_3:
000105 940c 0000 JMP start; salto negativo

.ORG 0x0110
etiqueta_2:
000110 cff4 RJMP etiqueta_3; salto relativo negativo

12
Saltos condicionales

• H: Half Carry Flag. The Half Carry Flag H indicates a Half Carry in some
arithmetic operations. Half Carry Is useful in BCD arithmetic.
• S: Sign Bit, S = N V. The S-bit is always an exclusive or between the
Negative Flag N and the Two’s Complement Overflow Flag V.
• V: Two’s Complement Overflow Flag. The Two’s Complement Overflow Flag
V supports two’s complement arithmetic
• N: Negative Flag. The Negative Flag N indicates a negative result in an
arithmetic or logic operation.
• Z: Zero Flag. The Zero Flag Z indicates a zero result in an arithmetic or logic
operation.
• C: Carry Flag. The Carry Flag C indicates a carry in an arithmetic or logic
operation. detailed information

13
Saltos condicionales

CPSE: compara y si son iguales, no ejecuta la siguiente


instrucción. Semejante a los saltos en uC PIC

14
Saltos condicionales

15
Saltos condicionales

16
Saltos condicionales
Saltos condicionales
Saltos condicionales
Ejercicio: Codifique los siguientes DFs en
Assembler y C
Ejercicio
Escribir el programa (C y Assembler) que
muestre mediante 4 LEDs el valor de una
cuenta que se incrementa al presionar el
pulsador P0 y se decrementa al presionar y
soltar el pulsador P0. Considere que el valor
inicial es 1, y que el valor máximo es 15 y el
menor 0

21
Ejercicio
Escribir el diagrama de flujo y programa (C y
Assembler) que muestre mediante 4 LEDs la
posición del pulsador presionado más 3. Si
son presionados más de un pulsador,
considere el de mayor valor. Para ello
considere 4 pulsadores conectados a los 4
LSB del puerto B (PB3..0). Por ejemplo, si se
presiona el pulsador PB2, debe mostrarse por
LEDs el valor “1001”

22
Analice
• ¿Cuál es el criterio de selección del tipo
de instrucción de salto?
• ¿Es posible implementar cualquier
diagrama de flujo en C/Assembler?
• ¿Cuál es el impacto de usar variables
locales o globales en C?
• ¿Cuáles serían las peores consecuencias
de un error en la ejecución de un salto?
23
Referencias
1. AVR Instruction Set Manual
2. ATMEL 8-BIT MICROCONTROLLER WITH 4/8/16/32KBYTES IN-SYSTEM
PROGRAMMABLE FLASH DATASHE
3. Beginners Introduction to the Assembly Language of ATMELAVR-
Microprocessors

24

También podría gustarte