Está en la página 1de 57

LENGUAJE ENSAMBLADOR PARA

MICROPROCESADORES
DISPLAY
CONVERSOR A/D PROCESAMIENTO DE
MUESTREO Y INFORMACIÓN
RETENCIÓN CONVERSOR D/A

ACTUADORES
SENSORES
ENTORNO
TOMA DATOS DEL ENTORNO
 Sensores
 Sirvenpara Visualizar una Cantidad Física.
 Su función:

Peso
Velocidad Voltaje
Aceleración
SENSOR
Lluvia
Imágenes Corriente
Temperatura Conjunto de
valores continuo.
Voltaje/Corriente
UNIDAD DE PROCESAMIENTO
CPU
CONTROL
 Aporta la inteligencia al S.E.
 Con/sin memoria interna. DATAPATH

 Usar/no memoria externa. Unidad de Procesamiento

 Arquitectura específica. CPU Memoria

 Periféricos de E/S. Memoria


UNIDAD DE PROCESAMIENTO
 ASICs: Application Specified Integrated Circuit.
 Lógica Reconfigurable: FPGA, CPLD, ...

Dificultad de Reprogramación
 Procesadores: MPUs, MCUs, DSPs, …

Eficiencia Energía
Mops/mW

Flexibilidad
100
ASICs
10
Reconfigurable
1
Procesadores
0.1
0.01

0.5um 0.25um 0.130um 70nm Tecnología


UNIDAD DE PROCESAMIENTO
 ASICs (Hardwired).
 Aplicaciones de alto desempeño y muy específicas.
 Mercado grande para el desarrollo.

 Costo del diseño y manufacturación muy elevado.

 Lógica Reconfigurable.
 Prototipos rápido. Plataforma de prueba de grandes
diseños.
 Expectativas de venta baja.

 FPGAs: Field Programmable Gate Arrays.


UNIDAD DE PROCESAMIENTO
 Microprocesador, Microcontrolador, DSPs
Unidad de procesamiento Cerebro

RAM P1 CONTROL
CONTROL
P2
DATAPATH
ROM Pn DATAPATH

Periféricos de Entrada Periféricos de Salida


10110100101 CPU10110100101
11111010101 11111010101
10110001011 10110001011
11001001111 11001001111
00010100011
MEMORIA 00010100011
10100000000 10100000000
00000011010
10100111010
P1 P2 Pn 00000011010
10100111010
UNIDAD DE PROCESAMIENTO
 Eficiencia, consumo de potencia:
 Administración dinámica de potencia (DPM).
 RUN: Ejecución normal.

 IDLE: Esperando por INT, rápida respuesta.

 SLEEP: Algunos eventos Wake-Up, lenta respuesta.

RUN
10s 400mW 90s
10s 160ms
90s
50mW IDLE SLEEP 160 W

StrongARM SA 1100
 Microcontroladores

Integra los diferentes componentes de un PC


MOTOR DC
ADC PWM
CPU

P IRQ 0 1 0 0 1 1
UART
IRQ

Frecuencia?
Realmente esMemoria
TIM I2C
un “Embedded Chip”
ORGANIZACIÓN DE MEMORIAS
HARDWARE COMPLETO
http://www.microchip.com/stellent/images/mchpsiteimages/en537986.jpg
EASY PIC
THE PIC 16 SERIES
Device Pins Clock Memory Features

16F84A 18 ≤ 20 MHz 1 K ROM 1 8-bit timer


68 B RAM 1 5-bit port
64 B EEPROM 1 8-bit port

16LF84A Extended supply


voltage range
16F84A-04 ≤ 4 MHz

14
THE PIC 16 SERIES
Device Pins Clock Memory Features

16F873A 28 ≤ 20 MHz 4 K ROM 3 parallel ports,


192 B RAM 3 counter/timers,
128 B EEPROM 2 capture/compare/PWM,
2 serial,
5 10-bit ADC,
2 comparators

16F874A 40 ≤ 20 MHz 4 K ROM 5 parallel ports,


192 B RAM 3 counter/timers,
128 B EEPROM 2 capture/compare/PWM,
2 serial,
8 10-bit ADC,
2 comparators
15
THE PIC 16 SERIES
Device Pins Clock Memory Features

16F876A 28 ≤ 20 MHz 8 K ROM 3 parallel ports,


368 B RAM 3 counter/timers,
256 B EEPROM 2 capture/compare/PWM,
2 serial,
5 10-bit ADC,
2 comparators

16F877A 40 ≤ 20 MHz 8 K ROM 5 parallel ports,


368 B RAM 3 counter/timers,
256 B EEPROM 2 capture/compare/PWM,
2 serial,
8 10-bit ADC,
2 comparators
16
PIC16F84A
PIC16F84
PIC16F84
PIC16F84A
PIC
PIC
MASTER CLEAR
PIC16F84A
a) Circuito de reloj, encargado de generar los impulsos que sincronizan el
funcionamiento de todo el sistema.
b) Temporizadores, orientados a controlar tiempos.
c) Perro Guardián («watchdog»), destinado a provocar un reinicio cuando el programa
queda bloqueado.
d) Conversores AD y DA, para poder recibir y enviar señales analógicas.
e) Comparadores analógicos, para verificar el valor de una señal analógica.
f) Sistema de protección ante fallos de la alimentación.
g) Estado de Reposo, en el que el sistema queda «congelado» y el consumo de energía
se reduce al mínimo.
PIC16F84A

Vector de reset. Cuando ocurre un reset al microcontrolador, el


contador de programa se pone en ceros (000H).

Vector de interrupción. Cuando el microcontrolador recibe una


señal de interrupción, el contador de programa apunta a la
dirección 04H de la memoria de programa.
PIC16F84A
LENGUAJE C

Algoritmo

Código

Comp Comp Comp Comp


Código de x86 ARMv9 m68k PPC
máquina
INTEL Power
ARMv9 m68k
x86 PC
LENGUAJE ENSAMBLADOR

Algoritmo

Código Código Código Código

Código de
máquina
ASM ASM ASM
ASM x86
ARMv9 m68k PPC

INTEL Power
ARMv9 m68k
x86 PC
SISTEMA NUMÉRICO

Tipo Sintaxis
Decimal D’<valor>’ d’<valor>’ .<valor>
Hexadecimal H’<valor>’ h’<valor>’ 0x<valor>
Octal O’<valor>’ o’<valor>’
Binario B’<valor>’ b’<valor>’
ASCII A’<carácter>’ a’<carácter>’ ‘<carácter>’
Cadena “<cadena>”
RISC
 35 instrucciones 18 orientadas al byte, 4 al bit y 13
al control y literales

movf f,d move f


movwf f move w to f
movlw k move literal to w
clrf f clear f
clrw clear w
swapf f,d swap nibbles in f
RISC
addwf f,d add w and f
addlw k add literal to w
subwf f,d substract w from f
sublw k substract w from literal
incf f,d increment f
incfsz f,d increment f, skip if 0
decf f,d decrement f
decfsz f,d decrement f, skip if 0
RISC
andwf f,d and w and f
andlw k and literal to w
iorwf f,d inclusive or w and f
iorlw k inclusive or literal to w
xorwf f,d exclusive or w and f
xorlw k exclusive or literal to w
comf f,d complement f
rlf f,d rotate left f, through carry
rrf f,d rotate right f, through carry
RISC
BIT GROUP
bcf f,b bit clear in f
bsf f,b bit set in f
btfsc f,b bit test in f, skip if clear
btfss f,b bit test in f, skip if set

CONTROL GROUP
clrwdt clear watchdog timer
sleep go into sleep mode
nop no operation
RISC

BRANCH GROUP
goto k goto address
call k call soubrutine
return return from subrutine
retlw k return with literal in w
retfie return from interrupt
incfsz f,d increment f, skip if 0
decfsz f,d decrement f, skip if 0
btfsc f,b bit test in f, skip if clear
btfss f,b bit test in f, skip if set
OPERANDOS
f : designa alguna localidad de memoria (file register), de alguno de los 2 bancos de los
llamados “registros especiales”, o bien, alguna de las localidades de memoria RAM.

w. designa el acumulador del microcontrolador.

b. designa alguno de los 8 bits del registro especial o localidad de memoria elegido.

k. designa una constante ó una dirección.

d. designa el destino en donde se almacenará el resultado de la operación. Si d=0, el destino


es el registro w. Si d=1, entonces el destino es el registro ó localidad de memoria f.
INSTRUCCIONES
 Byte-Oriented operation (Byte-Orientando a la
operación)
 Bit-Oriented operation (Bit-Orientando a la operación)

 Literal and Control operation (Control y Literal de la


operación
Campo Descripción
f Posición de memoria de datos (Register file address) (0x00 to 0x7F)
W Registro de trabajo(acumulador)
b nº Bit dentro de una posición de memoria (0-7)
k Valor literal, constante o etiqueta (puede de 8 o 11 bits)
x No importa el valor (0 ó 1) L -ensamblador genera código con x=0.
d Selección de destino:
d = 0: almacena el resultado en W,
d = 1: almacena el resultado en una posición de la memoria de datos f.
dest Destino es el registro W o la posicición de memoria de datos especificada
label nombre de etiqueta
TOS Cima de la pila
PC Contador de programa
PCLATH Latch de la parte alta del contador de programa
GIE Bit de habilitación de interrupción global
WDT Temporizador Watchdog
TO Time-out bit
PD Power-down bit
BYTE ORIENTED OPERATION
 OPCODE (Código) bit 13-8
 DESTINATION (Destino) bit 7

 FILE REGISTER ADDRESS (Dirección del archivo de


registro) 6-0
BIT ORIENTED OPERATION
 OPCODE (Código) bits 13-10
 BIT ADDRESS (Bit de dirección) bits 9-7

 FILE REGISTER ADDRESS (Dirección del archivo de


registro) bits 6 -0
LITERAL AND CONTROL
 Opcode bits 13- 8 (call y goto bit 13-11)
 Literal bits 7-0 (call y got bit 10-0)
Microprocesadores PIC16Fxx

Tipos de
Memoria

Memoria Memoria
de
programa de datos
MAPA DE MEMORIA DE PROGRAMA

Memoria tipo FLASH de 8k x 14

PIC16F84 tiene un contador de programa de 13


bits, con capacidad de direccionamiento de 8k x
14, pero sólo está disponible 1k x14 (0000h a
03FFh)
REGISTROS (RAM)
Puede direccionar 128 posiciones de memoria RAM.
12 registros son de PE.
68 registros son de PG.
DESCRIPCIÓN
00h o INDO: Registro para direccionamiento indirecto de datos. FSR y bit RP0 del registro
STATUS.
01h o TMR0. Temporizador/contador de 8 bits. Preescalador, localizado en el registro OPTION.
02h o PCL: Contador de programa.

En una instrucción CALL o GOTO, los bits


PC<10:0> se cargan desde el código de
operación de la instrucción, mientras que los
bits PC<11:12> lo hacen desde el
PCLATH<4:3>
DESCRIPCIÓN
03h o STATUS: Registro de estados.

IRP: Selector DI de página o como un bit de propósito general.


RP1,0: Selectores DD de página, RP1 bit de propósito general.
T0: Time Out o Bit de finalización del temporizador. Se coloca en 0 cuando el Watchdog finaliza la
temporización.
PD: Power Down o Bit de bajo consumo. Se coloca en 0 por la instrucción SLEEP.
Z: Zero o Bit de cero. Se coloca en 1 cuando el resultado de una operación lógica o aritmética es cero.
DC: Digit Carry de dígito. En operaciones aritméticas se activa cuando hay acarreo entre el bit 3 y el 4.
C: Carry o Bit de acarrreo. En instrucciones aritméticas se activa cuando se presenta acarreo desde
el bit más significativo del resultado.
DESCRIPCIÓN
04h o FSR: Registro selector de registros. Junto con el registro IND0, se utiliza para
seleccionar indirectamente los otros registros disponibles.

05h o PORTA: Puerto de Entrada/Salida de 5 bits. El registro que controla el sentido


(entrada o salida) de los pines de este puerto está localizado en la página 1 (banco 1),
en la posición 85h y se llama TRISA.

06h o PORTB: Puerto de entrada/salida de 8 bits. El registro de control para la


configuración de la función de sus pines se localiza en la página 1 (banco 1), en la
dirección 86h y se llama TRISB.
DESCRIPCIÓN
08h o EEDATA: Registro de datos de la EEPROM.

09h o EEADR: Registro de dirección de la EEPROM.

0Ah o PCLATH: Registro para la parte alta de la dirección. Este contiene la parte alta del
contador de programa y no se puede acceder directamente.

0Bh o INTCON: Registro para el control de interrupciones. Es el encargado del


manejo de las interrupciones.
DESCRIPCIÓN
GIE: Habilitador general de interrupciones. 0: deshabilita, 1: habilita
EEIE: Habilitación de interrupción por escritura de EEPROM 0: la deshabilita, 1: la habilita
TOIE: Habilitación de interrupción del temporizador TMRO. 0: la deshabilita, 1: la habilita
INTE: INT Interrupt Enable o Habilitación de la interrupción. 0: la deshabilita, 1: la habilita
RBIE: Habilitación de la interrupción 0: la deshabilita, 1: la habilita
TOIF: Bandera de la interrupción por sobrefujo del TMR0. Se coloca en 1 cuando el TMR0 pasa de 0FFh
a 00h; ésta debe ser puesta a 0 por programa.
INTF: Bandera de interrupción INT. Se coloca en 1 cuando la interrupción INT (RB<0>) ocurre; ésta debe
ser puesta a 0 por programa.
RBIF: Bandera de interrupción por cambio en el puerto B. Se coloca en 1 cuando una de las entradas
RB<7:4> cambia; ésta debe ser puesta a 0 por programa.
DESCRIPCIÓN
81h u OPTION: Registro de configuración múltiple.

RBPU: Habilitación de pull-up del puerto B. 0: habilita pull-ups internas, 1: las deshabilita
INTEDG: Selector de flanco de la interrupción INT 0: flanco de bajada, 1: flanco de subida
RTS: Fuente de señal de TMR0. 0: ciclo de instrucciones interno (Temporizador)
1: transición en el pin RA4/TOCK (Contador)

RTE: Flanco de la señal TMR0 0: incremento de LH, 1: incremento en HL.

PSA: Asignación del preescalador 0: TRM0 (Contador/Temporizador)


1: WDT (Circuito de vigilancia)

PS2,1,0: Valores del preescalador.


DESCRIPCIÓN
85h o TRISA: Registro de configuración del puerto A. 0 como salida, 1 entrada.
86h o TRISB: Registro de configuración del puerto B.
88h o EECON1: Registro para el control de la memoria EEPROM de datos.

U: Unimplemented No implementadas.
EEIF: Bandera de finalización de escritura. 1 cuando finaliza con éxito la escritura en la EEPROM de
datos; se debe colocar en 0 por programa. El bit de habilitación correspondiente es el EEIE,
localizado en el registro INTCON (0B<6>).
WRERR:Bandera de error de escritura. Se coloca en 1 cuando la operación de escritura termina
prematuramente, debido a cualquier condición de reset.
WREN: habilitación de escritura. Si se coloca en 0 no permite las operaciones de escritura; en “1” las
habilita.
WR: Control de escritura. Al colocarse en “1” inicia un ciclo de escritura. Este bit sólo es puesto a “0”
por hardware, una vez la escritura termina.
RD: Control de lectura. Al colocarse en “1” se inicia una lectura de la EEPROM de datos.
DESCRIPCIÓN
89h o EECON2: Registro auxiliar para control de la memoria EEPROM de datos. Registro que no
está implementado físicamente en el microcontrolador.

0Ch a 4Fh: Registros de propósito general. Estas 68 posiciones están implementadas


en la memoria RAM estática, se accede cuando en la página 1 se direccionan las posiciones
8Ch a CFh.

Registro de trabajo W. Este es el registro de trabajo principal.

Pila (Stack). El PIC16F84 tiene una pila de 8 niveles, esto significa que se pueden anidar 8
llamados a subrutina sin tener problemas.
DESCRIPCIÓN
Watchdog timer (18ms y 2 segundos)
CLRWDT

Temporizador de encendido (72 ms)

SLEEP
EQU

w EQU H'0000' PORTA EQU H’0005’


f EQU H'0001' PORTB EQU H’0006’
STATUS EQU H'0003' TRISA EQU H’0085’
RP1 EQU H'0006' TRISB EQU H’0086’
RP0 EQU H'0005' PCLATH EQU H’000A’
LENGUAJE ENSAMBLADOR
 Estructura
 Etiqueta.

 Instrucción (se le indica al CP)

 Operando (operando de una instrucción)

 Comentario (Van después de ; comentarios)


SCRIPT 1
; este script realiza la suma se dos números
; by FLH
LIST P=16F84 ; Modelo de PIC
#include <p16f84.inc>

VAR EQU 0X20;


RESUL EQU 0X0E ;

ORG 0X000;

clrf VAR;
clrf RESUL;
Principal

movlw 0X02 ;
movwf VAR ;
movlw 0X05;
addwf VAR;
movwf RESUL ;

END ; FIN DE PROGRAMA


SCRIPT 2
; este script realiza la suma se dos números
; 01 by FLH
LIST P=16F84 ; Modelo de PIC
#include <p16f84.inc>
VAR1 EQU 0X0C ; DIRECCION HEXADECIMAL DEL OPERANDO 1
VAR2 EQU 0X0D ; DIRECCION HEXADECIMAL DEL OPERANDO 2
RESUL EQU 0X0E ; DIRECCION DEL RESULTADO
; --------------------------------------------------
; Se han definido 3 variables VAR1,VAR2 y RESUL
; en diferentes posiciones de la memoria de datos
; en el REGISTER FILE MAP
; --------------------------------------------------
ORG 0X000; Vector de reset del micro
; ---------------------------------------------------
; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilación
; ----------------------------------------------------
clrf VAR1; VAR1=0
clrf VAR2; VAR2=0
clrf RESUL; RESUL=0
movlw 0X05 ; PONEMOS 05 en hexadecimal EN W
movwf VAR1 ; PASAMOS W A LA MEMORIA VAR1
movlw 0X02 ; PONEMOS 02 Hex EN W
movwf VAR2 ; PASAMOS W A LA MEMORIA VAR2
movfw VAR1 ; PONEMOS EN W VAR1 = 05
addwf VAR2 , 0 ; SUMAMOS W+VAR2 Y EL RESULTADOEN W
movwf RESUL ; PONEMOS VALOR ACUMULADOR EN RESUL
END ; FIN DE PROGRAMA
SCRIPT 3
; este script realiza la suma se dos números
; by FLH
LIST P=16F84 ; Modelo de PIC
#include <p16f84.inc>
SUMA1 EQU 0X0C ; DIRECCION HEXADECIMAL DEL OPERANDO 1
RESUL EQU 0X0E ; DIRECCION DEL RESULTADO
; --------------------------------------------------
; Se han definido 2 variables SUMA1,y RESUL
; en diferentes posiciones de la memoria de datos
; en el REGISTER FILE MAP
; --------------------------------------------------
ORG 0X000; Vector de reset del micro
; ---------------------------------------------------
; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilación
; ----------------------------------------------------
clrf SUMA1; VAR1=0
clrf RESUL; RESUL=0
movlw b'0001' ; PONEMOS 0001 EN W
movwf SUMA1 ; PASAMOS W A LA MEMORIA SUMA1
movlw b'0010' ; PONEMOS 0010 EN W
addwf SUMA1 , 0 ; SUMA W A LA MEMORIA SUMA1 RESULTADO EN W
movwf RESUL ; MOVER W A RESUL
END ; FIN DE PROGRAMA

También podría gustarte