Você está na página 1de 26

Electrónica Industrial Tema 11.

Introducción a los Microprocesadores y Microcontroladores

Unidad 11

Introducción a los microprocesadores y


microcontroladores
Andres.Iborra@upct.es
Juan.Suardiaz@upct.es

Septiembre 2002

⋅1⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

CONTENIDO

Unidad 11. Introducción a los microprocesadores y


microcontroladores.

11.1 Elementos básicos de un sistema microprocesador.


11.2 Microprocesadores frente a microcontroladores.
11.3 Arquitectura del PIC16F84.
11.4 Fundamentos de programación del PIC16F84.
11.5 Ejemplos de programación del PIC16F84.

OBJETIVOS ESPECÍFICOS

! Estudiar los bloques básicos de un microprocesador.


! Comprender la diferencia entre lenguaje máquina y lenguaje
ensamblador.
! Comprender el funcionamiento básico de una CPU.
! Estudiar la arquitectura básica del microcontrolador PIC 16F84
! Distinguir entre puerto de E/S dedicado y puerto de E/S “mapeado” en
memoria.
! Estudiar la E/S por sondeo (“polling”), la E/S controlada por
interrupción, y las interrupciones software.
! Saber programar aplicaciones sencillas en un PIC16F84.

⋅2⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

1. ELEMENTOS BÁSICOS DE UN SISTEMA


MICROPROCESADOR

El microprocesador

El microprocesador es un circuito integrado digital que puede


programarse con una serie de instrucciones, para realizar
funciones específicas con los datos. Cuando un
microprocesador se conecta a un dispositivo de memoria y se
provee de dispositivos de entrada salida, pasa a ser un sistema
microprocesador.

⋅3⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

1. ELEMENTOS BÁSICOS DE UN SISTEMA


MICROPROCESADOR

Bus de direcciones

Bus de datos
CPU
Bus de
(µP) control

Memoria Puerto de Puerto de salida


entrada

Periférico Periférico
(Teclado, (Impresora,
ratón, monitor)
monitor)

• Existen tres bloques funcionales básicos: CPU, memoria y puertos.


• Los tres se encuentran conectados mediante buses.
• Los dispositivos de entrada y salida se conectan mediante puertos.
• Un puerto es una interfaz física de una computadora a través del la cual
pasan los datos hacía y desde los periféricos.
• Los programas son un conjunto de instrucciones que entiende la CPU y que
se ejecutan para resolver un problema específico. El programa se almacena
en memoria.
• Cada posición de memoria tiene asignada una dirección exclusiva.
• Las instrucciones son leídas por la CPU a través del bus de datos cuando
ésta las solicita.
• La CPU las interpreta, y las ejecuta secuencialmente. Con frecuencia las
instrucciones vienen acompañadas de datos o direcciones, con objeto de
modificarlos.
• La CPU genera señales de control para coordinar las transacciones.

⋅4⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

1. ELEMENTOS BÁSICOS DE UN SISTEMA


MICROPROCESADOR

Unidad central de proceso(CPU) (I). Unidades funcionales

Es un circuito de gran escala de integración que contiene la CPU completa de una


computadora en un único circuito integrado. Los microprocesadores contienen
diversas unidades funcionales que realizan trabajos específicos. El modo de
relacionarse entre ellas establece la arquitectura interna del µP, el conjunto de
instrucciones disponibles y el modo de ejecutarse cada una de ellas.

6800 de Motorola

Unidad aritmético lógica (ALU)

Es el elemento clave de procesamiento del µP. Esta gobernada por la unidad de


control. Se utiliza para realizar operaciones aritméticas y lógicas. Los datos de la
ALU se obtienen de la matriz de registros.

Matriz de registros

Es la colección de registros disponibles pro el programador dentro del


microprocesador. Existen también, registros invisibles no disponibles por el
programador.

Unidad de control

Proporciona las señales de temporización y control.

⋅5⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

1. ELEMENTOS BÁSICOS DE UN SISTEMA


MICROPROCESADOR

Unidad central de proceso(CPU) (II). Buses

Bus de direcciones

Es un bus de un solo sentido a través del cual el microprocesador envía un código


de dirección a una memoria o dispositivo externo.

16 líneas = 216= 65.536 posisiones = 64 K (8080)

20, 24 bits

32 líneas = 232= 4.294.467.296 = 4 Gigas (Pentium)

Bus de datos

Es un bus de dos sentidos (8, 16, 32 o 64 bits).

Bus de control

Señales para ciclos de lectura / escritura, ciclos de espera, interrupciones, etc.

⋅6⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

1. ELEMENTOS BÁSICOS DE UN SISTEMA


MICROPROCESADOR

Unidad central de proceso(CPU) (III)Programación.

Todos los µP disponen de un conjunto básico de instrucciones que se pueden


agrupar según su funcionalidad. En el Pentium se pueden distinguir siete grupos
básicos:

• Transferencia de datos.
• Aritmética.
• Manipulación de bits.
• Bucles y saltos.
• Cadenas de caracteres.
• Subrutinas e interrupciones.
• Control del procesador.

Las instrucciones son decodificadas antes de que sean ejecutadas. A las


instrucciones en código binario se denomina lenguaje máquina.

Con objeto de no escribir los programas en lenguaje máquina se utilizan


nemónicos que constituyen lo que se conoce como lenguaje ensamblador. Los
programas ensambladores se encargan de traducir los nemónicos en código
máquina. También incluyen pseudo-instrucciones necesarias para facilitar la
programación (reserva de zonas de datos, código, stack, variables, etc.).

Un compilador traduce las instrucciones de un lenguaje de alto nivel máquina.

⋅7⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

2. MICROPROCESADORES VS MICROCONTROLADORES.

Concepto general de microcontrolador.

" Es un C.I. que contiene todos los componentes de un computador.

Aplicaciones
1. Periféricos y dispositivos auxiliares de los computadores.
2. Electrodomésticos.
3. Aparatos portátiles y de bolsillo (tarjetas, monederos, teléfonos..)
4. Máquinas expendedoras y juguetería.
5. Instrumentación.
6. Industria de automoción.
7. Control industrial y robótica.
8. Electromedicina.
9. Sistema de navegación espacial.
10. Sistemas de seguridad y alarma.
11. Domótica en general.

Panel de instrumentos
Control de velocidad
Sistema de navegación
Control climatización

Control del motor

Sistema antirrobo
Antideslizamiento

⋅8⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

2. MICROPROCESADORES VS MICROCONTROLADORES.

Arquitectura Von Newman VS Harvard

Algunos microcontroladores optimizan su operatividad mediante una arquitectura


Harvard.

Procesador
Memoria (CPU) Entrada/Salida

Bus de

Bus de direcciones

Bus de control

Memoria datos Procesador Memoria


programa

Bus de datos

Bus de direcciones

Bus de control

Bus de datosBus de datos


de memoria (instrucciones)
de programa

Bus de direcciones de memoria de programa

⋅9⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

2. MICROPROCESADORES VS MICROCONTROLADORES.

Implantación en el mercado
Algunos fabricantes de µC con algunos modelos.
Fabricante Modelos de µC
INTEL 8048, 8051, 80C196, 80186, 80188, 80386EX
MOTOROLA 6805, 68HC11, 68HC12, 68HC16, 683XX
HITACHI HD64180
PHILIPS Gama completa de clónicos del 8051
SGS-THOMSON (ST) ST-62XX
MICROCHIP PICs
NATIONAL SEMICONDUCTOR COP8
ZILOG Z8, Z80
TEXAS INSTRUMENTS TMS370
TOSHIBA TLCS-870
INFINEON C500
DALLAS DS5000
NEC 78K

Ranking europeo de ventas de MCU de 8 bits (año 1999).

⋅10⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Microcontroladores PIC de Microchip

En la actualidad se emplean cada vez más debido a:


# Velocidad
# Precio
# Facilidad de uso
# Información y herramientas de apoyo.
Gamas
# PIC12C5X, gama baja o clásica ( palabra de programa de 12 bits).
# PIC16CXXX, gama media (palabra de programa de 14 bits).
# PIC17CXXX, PIC18XXX, gama alta (palabra de programa de 16 bits).
Familia Descripción
PIC12C5XX 8-Pin, 8-Bit CMOS
PIC12C67X 8-Pin, 8-Bit CMOS con Convertidor A/D
PIC12F6XX 8-Pin, 8-Bit Flash con EEPROM y A/D
PIC16C5X EPROM/ROM 8-Bit CMOS
PIC16C55X EPROM-Based 8-Bit CMOS
PIC16C6X 8-Bit CMOS
PIC16X62X 8-Pin EPROM-Based 8-Bit CMOS con Comparador
PIC16C64X 8-Bit EPROM con Comparador analógico
PIC16C7X 8-Bit CMOS con convertidor A/D.
PIC16C71X 18 Pin, 8-Bit CMOS con convertidor A/D.
PIC16C43X 18/20 Pin, 8-Bit CMOS con bus LIN.
PIC16C78X Convertidor A/D, D/A, amplificador operacional, comparadores y PSMC.
PIC16C7X5 8-Bit CMOS, A/D , para aplicaciones de USB, PS/2 y dispositivo serie.
PIC16C77X 20-pin, 28-pin y 40-Pin, 8-Bit CMOS con convertidor A/D 12-bit.
PIC16F87X 28/40-Pin, 8-Bit CMOS FLASH con convertidor A/D 10-bit .
PIC16X8X 18-Pin, 8-Bit CMOS FLASH/EEPROM Microcontrollers
PIC16F7X 28/40-pin 8-bit CMOS FLASH
PIC16C9XX LCD, convertidor A/D 8 y 10-bit .
PIC17C4X 8-Bit CMOS EPROM/ROM, alto rendimiento.
PIC17C75X 8-Bit CMOS EPROM, alto rendimiento
PIC18CXXX 8-Bit, arquitectura mejorada.
PIC18F0XX 8-Pin, 8-Bit FLASH con EEPROM, PLVD, BOR y PWM.
PIC18FXX2 Protección de código, 256 EEPROM, LVD, PLL, SLEEP ,multiplicador 8x8 , PSP.
PIC18FXX31 28/40-Pin FLASH con EEPROM, PLVD, PBOR, A/D 10-bit PWM.

⋅11⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Arquitectura general

Características generales.

# Consta de una ALU, decodificador de instrucciones, y una matriz de


registros.
# Incluye también un módulo de memoria para programa y una memoria
auxiliar para datos del tipo EEPROM, por si falla la alimentación.
# Arquitectura Harvard.
# Bus de datos de 8 bits, bus de instrucciones de 14 bits.
# Conjunto de instrucciones reducido, RISC (35 instrucciones).
# Las instrucciones se ejecutan en 1 ciclo, excepto los saltos (2 ciclos).
# Dispone de dos puertos de entrada salida.
# Entradas multiplexadas para interrupciones y el contador/temporizador.
# Dispone de un perro guardian o watchdog.

⋅12⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Memoria de programa

# Tipo Flash integrada en el propio chip.

# Memoria de 1K x 14 (000h – 3FFh).

# En la posición 000h está el Vector de Reset.


o Conexión alimentación
o Al aplicar 0V al terminal MCLR
o Desbordamiento perro guardián (watchdog).

# En la posición 04h está el Vector de


Interrupción.
o Activación del pin INT
o Desbordamiento del temporizador TMR0
o Cambio de estado en pines RB4 - RB7
o Final de escritura en la EEPROM de datos.

# Todo lo grabado (datos y programa) se puede


modificar sobre el circuito por las antradas series RB6(clk)/RB7(datos)

⋅13⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Memoria de datos

Tipo SRAM

Dos bancos o páginas de 128 registros de 8 bits.

o Página ‘0’ ⇒ 80 registros: 12 especiales


(SFR) y 68 generales (GPR).
o Página ‘1’ ⇒ 12 registros de funciones
específicas (SFR).

Tipo EEPROM

• 64 registros de 8 bits cada uno. La información puede permanecer hasta 40


años.
• No se puede acceder a los mismos de una manera directa, sino que hay
que hacerlo por medio del los Registros de Función Específica (SFR).

⋅14⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Puertos de entrada /salida

PUERTO RA0-RA4

Puerto bidireccional de Entrada/Salida.

RA4/T0CKL puede comportarse como una Entrada/Salida normal, o bien como una
entrada de reloj del contador/temporizador TMR0.

PUERTO RB0-RB7

Puerto bidireccional de Entrada/Salida.

RB0/INT puede ser utilizado como una entrada de interrupciones.

RB4/RB7 pueden ser utilizados para generar interrupciones ante un cambio de


nivel.

RB6/RB7 pueden ser utilizados para programa el PIC.

⋅15⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Recursos auxiliares (I)

Oscilador

# Mediante los condensadores y el oscilador se puede seleccionar la


frecuencia del reloj: 455KHz, 2 MHz, 4MHz, 8MHz y 10 MHz.

# Ciclo de instrucción = 4 · Periodo de reloj

Ejemplo: Frecuencia de reloj = 4MHz ⇒ Periodo de reloj =


250ns.

Ciclo de instrucción = 1/Fosc x 4 = 250 ns x 4 = 1 µs.

Estado de reposo (SLEEP)

# Consumo < 3µA

⋅16⋅
Electrónica Industrial Tema 11. Introducción a los Microprocesadores y Microcontroladores

3. ARQUITECTURA DEL PIC16F84

Recursos auxiliares (II)

Temporizador/Contador

Consiste en un contador cíclico de 00h a FFh. Cuando se llega a FF se


produce un desbordamiento. Dos modos de trabajo:

# Temporizador: determinar intervalos concretos de tiempo. Se


incrementa con cada ciclo de instrucción o divisor.
# Contador: contar impulsos producidos en el exterior del sistema.

Perro guardián (watchdog)

# Temporizador independiente del reloj principal. Tiene su propio


oscilador, luego sigue funcionando en modo de bajo consumo.
# Permite detectar cuando se ha “colgado” el programa. Cuando
llega a FFh, se produce el desbordamiento y se provoca el RESET
del PIC.
# El tempo típico de un ciclo es de 18 ms. pero se puede ampliar a
2,5 seg.

⋅17⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

3. ARQUITECTURA DEL PIC16F84

Distribución de los terminales

# VDD y VSS : Alimentación (2 V - 6 V).

# MCLR (Master Clear): Reset cuando la tensión < 1,7V .


# RA0- RA4: Entradas/salidas del puerto A.
o IO = 20mA; ∑ IO = 50mA
o II = 25mA; ∑ II = 80mA
o RA4/T0CK1 puede ser contador/temporizador externo TMR0.
# RB0-RB7: Entradas/salidas del puerto B.
o IO = 20mA; ∑ IO = 100mA
o II = 25mA; ∑ II = 150mA
o RB0/INT puede ser interrupción externa.
# OSC1/CLKIN OSC2/CLKOUT : conexión del oscilador del reloj
principal.

VDD
PIC16F84
RA2 RA1
10K Cristal 4MHz 27pF
RA3 RA0
100 RA4/T0CKI OSC1
27pF
MCLR / Vpp OSC2
VSS VDD +5V
RB0/INT RB7
RB1 RB6
RB2 RB5
RB3 RB4

⋅18⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

3. ARQUITECTURA DEL PIC16F84

Periféricos de entrada/salida
Pulsadores

Rebotes

Pulsación

Interruptores

R
IN

Diodos LED

Relés

⋅19⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

4. FUNDAMENTOS DE PROGRAMACIÓN PIC16F84

Conceptos generales

Un programa es un conjunto ordenado de instrucciones cuya ejecución determina


el procesado de los datos y la obtención de resultados.

EL PIC16F84 entiende un juego de 35 instrucciones (14 bits).

Estructura del programa

Modelo de procesador y sistema de numeración


List p=16F84 ;Se utiliza el microcontrolador PIC16F84
Radix hex ; Se usará el sistema hexadecimal

Variables
ESTADO equ 0x03 ;La etiqueta “ESTADO” está asociada a la dirección 0x03
PUERTAA equ 0x05 ;La etiqueta “PUERTAA” está asociada a la dirección 0x05

Origen del programa


org 0x00 ;Inicio de programa

org 0x00 ;La siguiente instrucción estará al inicio de la memoria


goto INICIO ;Salta a la dirección etiquetada con INICIO
org 0x05 ;La siguiente instrucción estará en la dirección 0x05

INICIO
-------
-------
end
Cuerpo del programa y final

.......
......
end

⋅20⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

5. EJEMPLOS DE PROGRAMACIÓN

Ejemplo 1 - Sumar el contenido de dos posiciones de


memoria (I)

Banco 0
00h
Registros
especiales
0Bh
5 0Ch OPERANDO1
2 0Dh OPERANDO2
¿?? 0Eh RESULTADO

4Fh

# Instrucción mov.
Permite transferir el contenido de un registro fuente f a un registro destino d.
En los PIC todos los datos residen en posiciones de la memoria de datos a
excepción del registro W. La instrucción mov puede mover tres tipos
fundamentales de operandos:

1. El contenido del registro W.


2. El contenido de una posición de memoria de datos.
3. Un literal o valor.

# movf f,d : mueve el contenido del operando fuente f (posición de la memoria


de datos) al destino d (puede ser W o la propia fuente).
# movwf f : mueve el contenido del registro W a la posición de memoria
especificada por f.
# movlw k : mueve el valor k al registro W.
# addwf f,d : suma el contenido del registro W con el de f y deposita el
resultado en W si d = 0 (o W), o en f si d = 1.
# addlw k : suma al contenido del registro W el valor k y deposita el resultado
en W.

⋅21⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

5. EJEMPLOS DE PROGRAMACIÓN

Ejemplo 1 - Sumar el contenido de dos posiciones de


memoria (II)

INICIO

Declaración de variables

OPERANDO1 ← ‘5’
OPERANDO2 ← ‘2’

RESULTADO = OPERANDO1 + OPERANDO2

END

List p=16f84
OPERANDO1 equ 0x0C
OPERANDO2 equ 0x0D
RESULTADO equ 0x0E

org 0x00 ;origen


INICIO
movlw 0x05 ;W ← ‘5’
movwf OPERANDO1 ;OPERANDO1←W
movlw 0x02 ;W ← ‘2’
movwf OPERANDO2 ;OPERANDO2←W
addwf OPERANDO1,W ;OPERANDO1+W →W
movwf RESULTADO ;RESULTADO ←W
end

⋅22⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

5. EJEMPLOS DE PROGRAMACIÓN

Ejemplo 2 - Leer y sacar datos por los puertos (I)


VDD VDD

VDD 10K 2 x 10K


PIC16F84

RA2 RA1
10K
RA3 RA0
RA4/T0CKI OSC1 27pF
100
4MHz
MCLR / Vpp OSC2
VSS VDD 27pF
+5V
RB0/INT RB7

RB1 RB6
RB2 RB5
RB3 RB4

3x 680

Banco 0 Banco 1 Registro STATUS (dirección 03h)


00h 80h RP1 RP0
bit7 bit0
03h STATUS 83h # bit 6 – 5: RP0-RP1 Selección del banco de registros
00 = Banco 0
05h PORTA TRISA 85h 01 = Banco 1
06h PORTB TRISB 86h

0BH

Registro PORTA (dirección 05h Banco 0)


-- - - RA4/T0CKI RA3 RA2 RA1 RA0
- -
bit7 bit0
-- : los tres primeros bits de PORTA siempren se leerán como ‘0’
Registro TRISA (dirección 05h Banco 1)
-- - - TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
- -
bit7 bit0

⋅23⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

5. EJEMPLOS DE PROGRAMACIÓN

Ejemplo 2 - Leer y sacar datos por los puertos (II)


Aparecen en este ejemplo algunas instrucciones nuevas:
# bsf f,d : pone a ‘1’ el bit d del registro f .
# bcf f,d : pone a ‘0’ el bit d del registro f .
# goto etiqueta : salta hasta la instrucción que va precedida por la etiqueta.

INICIO

Declaración de variables

Configuración de E/S

PORTB ← PORTA

List p=16f84
STATUS equ 0x03
PORTA equ 0x05
PORTB equ 0x06
org 0x00
goto INICIO
org 0x05 ;salta el vector de interrupción
INICIO
bsf STATUS,5 ;cambia al banco1
movlw b’00000000’ ;W ← ‘00’
movwf PORTB ;TRISB←W (PORTB salidas)
movlw b’00011111’ ;W ← ‘FF’
movwf PORTA ;TRISA←W (PORTA entradas)
bcf STATUS,5 ;cambia al banco0

BUCLE
movf PORTA,W ;W ← PORTA
movwf PORTB ;PORTB ← W
goto BUCLE
end

⋅24⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

5. EJEMPLOS DE PROGRAMACIÓN

Ejemplo 3 - Leer y sacar datos por los puertos, condiciones


(I)
VDD
VDD
PIC16F84
10K
RA2 RA1
10K
RA3 RA0

RA4/T0CKI OSC1 27pF


100
4MHz
MCLR / Vpp OSC2

VSS VDD 27pF


+5V
RB0/INT RB7

RB1 RB6

RB2 RB5
680
RB3 RB4

El LED se ilumina cuando se cierra el interruptor.

Este ejemplo incorpora las instrucciones:

# btfsc f,d : salta una instrucción si el bit d del registro f es ‘0’, si no, sigue por la
siguiente instrucción.
# clrf f : borra el contenido del registro f.

⋅25⋅
Electrónica Industrial Tema 9. Introducción a los Microprocesadores y Microconytroladores

5. EJEMPLOS DE PROGRAMACIÓN

Ejemplo 3-Leer y sacar datos por los puertos, condiciones (II)

INICIO

Declaración de variables

Configuración de E/S

Apagar led NO
RB0 =’0’ RA0 ON
RA0=’0’

SI

Encender led
RB0 =’1’

List p=16f84
STATUS equ 0x03
PORTA equ 0x05
PORTB equ 0x06
org 0x00
goto INICIO
org 0x05 ;salta el vector de interrupción
INICIO
bsf STATUS,5 ;cambia al banco1
clrf PORTB ;Puerto B configurado como salidas
movlw b’00011111’ ;Puerto A configurado como entradas
movwf PORTA
bcf STATUS,5 ;cambia al banco0
BUCLE
btfsc PORTA,0 ;¿RA0=0? salta si RA0 es ‘0’
goto RA0_es_1
bsf PORTB,0 ;pone a ‘1’ RB0, enciende el led
goto BUCLE
RA0_es_1
bcf PORTB,0 ;pone a ‘0’ RB0, apaga el led
goto BUCLE
end

⋅26⋅

Você também pode gostar