40
Ensamblador Archivo Fuente Ensamblador UNEXPO – Pto. Ordaz. MICROPROCESADORES Código Máquina Ensamblador

Ensamblador - files.unexpo-microprocesadores1.webnode.esfiles.unexpo-microprocesadores1.webnode.es/.../Ensamblador.pdf · Realizar un Proyecto con MPLAB Programa1.asm MPASM Programa2.asm

Embed Size (px)

Citation preview

Ensamblador

ArchivoFuente

CódigoMáquina

Ensamblador

UNEXPO – Pto. Ordaz. MICROPROCESADORES

ArchivoFuente

CódigoMáquina

Ensamblador

Ensamblador de la Microchip MPLAB

Programa.asm

MPASM

Programa.HEX

Archivos Fuente

Ensamblador

Archivo final .HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Programa.asm

MPASM

Programa.HEX

Archivos Fuente

Ensamblador

Archivo final .HEX

Realizar un Proyecto con MPLAB

Programa1.asm

MPASM

Programa2.asm

MPASM

Programa1.o Programa2.o

16F877.lkr

MPLINK

Programa.HEX

Archivos Fuente

Ensamblador

Archivos ObjetoRelocalizables

Archivoslocalizador deDir.

Enlazador

Archivo final.HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Programa1.asm

MPASM

Programa2.asm

MPASM

Programa1.o Programa2.o

16F877.lkr

MPLINK

Programa.HEX

Archivos Fuente

Ensamblador

Archivos ObjetoRelocalizables

Archivoslocalizador deDir.

Enlazador

Archivo final.HEX

Instrucciones en el EnsambladorETIQUETA NEMÓNICO U

OPERACIÓNOPERANDO COMENTARIO

PRUEBA MOVLW 0xA0 ;Se carga al registro W el;dato A0hh

COMENTARIOS : describe el significado dela instrucción para dar una ideade lo que hace el programa. Esopcional

UNEXPO – Pto. Ordaz. MICROPROCESADORES

ETIQUETA : Debe empezar en la columna 1, puede estarseguida de dos puntos (:), un espacio,una tabulación o fin de línea.

NEMÓNICO u OPERACIÓN : específica la operación arealizar, ya sea una instrucción delmicrocontrolador o una directiva delensamblador.

OPERANDO(S): proporciona la información requerida por laoperación.

Instrucciones en el Ensamblador

Tipo Sintaxis Ejemplo

Representación Numérica

Decimal D’<dígitos>’.<dígitos>

D’250’.250

Hexadecimal H’<díg_Hex>’0x<díg_Hex>

H’8B’0x8B

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Hexadecimal H’<díg_Hex>’0x<díg_Hex>

H’8B’0x8B

Octal O’<díg_Oct>’ O’777’Binario B’<díg_Bin>’ B’10011111’ASCII ’<Carácter>’

A’<Carácter>’’M’A’M’

Directivas del Ensamblador

CBLOCKCBLOCK Define un bloque de constantes.Sintáxis.CBLOCK [<expr>]

<etiq>[:<incremento>] [,<etiq>[:<incremento>]]ENDC

Ejemplo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

CBLOCK 0x20Nombre1, Nombre2 ;La primera etiqueta (Nombre1)Nombre3, Nomnre4 ;se le asignara la Dir. 20h y de allí

;Dir. Consecutivas a las otras etiq.ENDC ;El bloque de constante debe

;finalizarse con ENDC

Ejemplo

Directivas del Ensamblador

CODECODE Inicia la sesión de un programa. Se utiliza para programasrelocalizables

Sintáxis[<Etiq>] CODE [<Dirección ROM>]

Ejemplo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

RESET CODE H’0000’ ;La instrucción GOTO seGOTO START ;almacenara en la Dir. 0000h

Ejemplo

Directivas del Ensamblador

DBDB Declara dato de un Byte

Sintáxis[<Etiq>] DB <expr> [, <expr >, …, <expr >]

Ejemplo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

DB ‘p’, “Prueba”, 0x0F, 00 ;Se almacena una tabla en la;memoria de Programa en formato;de 8 bits en el orden que aparece;en la tabla

Ejemplo

Directivas del Ensamblador

DEDE Declara dato de un Byte en la memoria EEPROM

Sintáxis[<Etiq>] DE <expr> [, <expr >, …, <expr >]

Ejemplo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

DE 00,01,02,03,04,05 ;Se almacena una tabla en la;memoria de datos EEPROM en;formato de 8 bits en el orden que;aparece en la tabla

Ejemplo

Directivas del Ensamblador

ORGORG Define el origen donde debe comenzar el Programa

Sintáxis[<Etiq>] ORG <expr>

Ejemplo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

RESET ORG 0x0000movlw 01 ;Esta instrucción comienza en la diraddlw 01 ;0000h de la memora de Prog, y las

;demás se incrementa la dir

Ejemplo

Directivas del Ensamblador

ENDEND Le indica al ensamblador que es el fin del programa.

SintáxisEND

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Directivas del Ensamblador

EQUEQU Define una constante en el ensamblador

Sintáxis[<Etiq>] EQU <expr>

Ejemplo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

STATUS EQU 0x03 ;le asigna el valor 03h a la etiqueta;STATUS

Ejemplo

Directivas del Ensamblador

BANKSELBANKSEL Se coloca en el banco de la memoria RAM interna

SintáxisBANKSEL <Etiq>

Descripción: Se utiliza para generar las instrucciones quepermiten colocarse en el banco de la RAM interna de ladirección <Etiq>

UNEXPO – Pto. Ordaz. MICROPROCESADORES

NUMERO1 EQU 0x0A ;le asigna el valor 0Ah a la etiqueta;NUMERO1

BANKSEL NUMERO1 ;Genera las instrucciones para;colocarse en el Banco 1; BSF STATUS,RP0; BCF STATUS,RP1

Ejemplo

Directivas del Ensamblador

EXTERNEXTERN Declara una etiqueta definida como externa.

SintaxisEXTERN <Etiq> [, <Etiq>, ...]

Descripción: Se utiliza para generar archivos relocalizables, lasetiquetas definidas como externas pueden ser llamadas desdeel programa en curso así se encuentre en otro archivo

UNEXPO – Pto. Ordaz. MICROPROCESADORES

EXTERN SubRutina....CALL SubRutina

Ejemplo

Directivas del Ensamblador

GLOBALGLOBAL Exporta a otros archivos etiquetas

SintáxisGLOBAL <Etiq> [, <Etiq>, ...]

Descripción: Si se desea que una etiqueta sea compartida porotros archivos debe definirse como global, seguido de laetiqueta. En el otro archivo debe definirse como EXTRN

UNEXPO – Pto. Ordaz. MICROPROCESADORES

SubRutinaGLOBAL SubRutinaaddwl 0xFFreturn

Ejemplo

Directivas del Ensamblador

UDATAUDATA Inicia un conjunto de datos sin condiciones iniciales

Sintaxis<Etiq> UDATA [<DIR. RAM>]

Descripción: Esta directiva es utilizada para programasrelocalizables, generalmente es utilizada para reservar unaserie de datos que estará en el archivo de registros y podránser utilizados por otros archivos.

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Inicia un conjunto de datos sin condiciones iniciales

Sintaxis<Etiq> UDATA [<DIR. RAM>]

Descripción: Esta directiva es utilizada para programasrelocalizables, generalmente es utilizada para reservar unaserie de datos que estará en el archivo de registros y podránser utilizados por otros archivos.

UDATADato1 RES 1Dato2 RES 2

Ejemplo

Directivas del Ensamblador

RESRES Reserva espacio de memoria

Sintaxis[<Etiq>] RES <res_mem>

Descripción:Esta directiva reserva la cantidad de memoria especificadas por<res_mem>, los datos en la memoria se pueden accederapuntado por <Etiq>.

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Reserva espacio de memoria

Sintaxis[<Etiq>] RES <res_mem>

Descripción:Esta directiva reserva la cantidad de memoria especificadas por<res_mem>, los datos en la memoria se pueden accederapuntado por <Etiq>.

UDATADato1 RES 1 ;Reserva un byte en la MEM RAM (sin cond. Ini.)Dato2 RES 2 ;Reserva dos byte en la MEM RAM (sin cond. Ini.)

Ejemplo

Directivas del Ensamblador

RADIXRADIX Le indica al ensamblador el sistema de numeración con la quese colocan los números

SintaxisRADIX <Base>

Descripción: Con esta directiva se le indica al ensamblador labase con la cual se encuentran los números colocados en elprograma. Los valores validos son: hex, dec, oct

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Le indica al ensamblador el sistema de numeración con la quese colocan los números

SintaxisRADIX <Base>

Descripción: Con esta directiva se le indica al ensamblador labase con la cual se encuentran los números colocados en elprograma. Los valores validos son: hex, dec, oct

RADIX dec

Ejemplo

Directivas del Ensamblador

#INCLUDE#INCLUDE Se inserta un archivo en el programa fuente actual

Sintaxis#INCLUDE <<Archivo_Incluir>>#INCLUDE <“Archivo_Incluir”>

Descripción: Tiene el mismo efecto que incluir el archivo detexto <<Archivo_Incluir>> en el programa fuente actual

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Se inserta un archivo en el programa fuente actual

Sintaxis#INCLUDE <<Archivo_Incluir>>#INCLUDE <“Archivo_Incluir”>

Descripción: Tiene el mismo efecto que incluir el archivo detexto <<Archivo_Incluir>> en el programa fuente actual

#INCLUDE “P16F877.inc”

#INCLUDE “c:\Programas\ASM\reg.h”

Ejemplo

Directivas del Ensamblador

LISTLIST Mediante esta directiva se puede configurar la apariencia ycontrol del ensamblador

SintaxisLIST [<Opción_List>, …, <Opción_List>]

<Opción_List>p=<type> Tipo de C.r=<base> Base del Número a utilizar

UNEXPO – Pto. Ordaz. MICROPROCESADORES

Mediante esta directiva se puede configurar la apariencia ycontrol del ensamblador

SintaxisLIST [<Opción_List>, …, <Opción_List>]

<Opción_List>p=<type> Tipo de C.r=<base> Base del Número a utilizar

LIST p=16F877, r=HEX

Ejemplo

Ejemplo 1LIST P=16F877

;Suma de dos números cada uno de 16 Bits;Suma: N1(16) + N2(16) -> N2(16); N1 <- N1_H:N1_L; N2 <- N2_H:N2_L;STATUS EQU 0x03C EQU 0x00W EQU 0x00F EQU 0x01N1_L EQU 0x20N1_H EQU 0x21N2_L EQU 0x22N2_H EQU 0x23;

ORG 0x0goto INICIO

ORG 0x5INICIO BANKSEL N1_L

movf N1_L,Waddwf N2_L,Fbtfsc STATUS,Cincf N2_H,Fmovf N1_H,Waddwf N2_H,Fgoto INICIOEND

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

LIST P=16F877;Suma de dos números cada uno de 16 Bits;Suma: N1(16) + N2(16) -> N2(16); N1 <- N1_H:N1_L; N2 <- N2_H:N2_L;STATUS EQU 0x03C EQU 0x00W EQU 0x00F EQU 0x01N1_L EQU 0x20N1_H EQU 0x21N2_L EQU 0x22N2_H EQU 0x23;

ORG 0x0goto INICIO

ORG 0x5INICIO BANKSEL N1_L

movf N1_L,Waddwf N2_L,Fbtfsc STATUS,Cincf N2_H,Fmovf N1_H,Waddwf N2_H,Fgoto INICIOEND

LIST P=16F877RADIX HEX#INCLUDE "P16F877.inc"

;;Suma de dos números cada uno de 16 Bits;Suma: N1(16) + N2(16) -> N2(16); N1 <- N1_H:N1_L; N2 <- N2_H:N2_L;N1_L EQU 20N1_H EQU 21N2_L EQU 22N2_H EQU 23;

ORG 0x0goto INICIO

ORG 0x5INICIO movf N1_L,W

addwf N2_L,Fbtfsc STATUS,Cincf N2_H,Fmovf N1_H,Waddwf N2_H,Fgoto INICIOEND

Ejemplo 2LIST P=16F877RADIX HEX#INCLUDE "P16F877.inc"

;;Suma de dos números cada uno de 16 Bits;Suma: N1(16) + N2(16) -> N2(16); N1 <- N1_H:N1_L; N2 <- N2_H:N2_L;N1_L EQU 20N1_H EQU 21N2_L EQU 22N2_H EQU 23;

ORG 0x0goto INICIO

ORG 0x5INICIO movf N1_L,W

addwf N2_L,Fbtfsc STATUS,Cincf N2_H,Fmovf N1_H,Waddwf N2_H,Fgoto INICIOEND

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

EnlazadorProg1.asm

MPASM

Prog2.asm

MPASM

Prog1.o Prog2.o

16F877.lkr

MPLINK

Programa.HEX

Archivos Fuente

Ensamblador

Archivos ObjetoRelocalizables

Archivoslocalizador deDir.

Enlazador

Archivo final.HEX

Programa.CODPrograma.OUT Programa.LST

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Prog1.asm

MPASM

Prog2.asm

MPASM

Prog1.o Prog2.o

16F877.lkr

MPLINK

Programa.HEX

Archivos Fuente

Ensamblador

Archivos ObjetoRelocalizables

Archivoslocalizador deDir.

Enlazador

Archivo final.HEX

Programa.CODPrograma.OUT Programa.LST

Archivos de Entrada del Enlazador

Archivo Objeto (.o)Archivo Objeto (.o)

Son archivos cuyo código son relocalizables, o sea que lasdirecciones de los datos a usarse y la localización del programano están definidos en este archivo, y se genera a partir delensamblador

Archivo para Localización de Código y Datos (.lkr)Archivo para Localización de Código y Datos (.lkr)

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Archivo para Localización de Código y Datos (.lkr)Archivo para Localización de Código y Datos (.lkr)

En este archivo se debe indicar las direcciones en donde sedebe localizar el programa y los datos que no se especificaronen los archivos (.o)

Archivos de Salida del Enlazador

Archivo COFF (.out, .cof)Archivo COFF (.out, .cof)

Este es un archivo generado por MPLINK para generar losarchivos .HEX y el LST

Archivo COD (.cod):Archivo COD (.cod):

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

archivo usado durante la depuración por MPLAB, puede serusado durante la simulación

Archivos de Salida del Enlazador

Archivo HEX (.hex):Archivo HEX (.hex):

Archivo guardado en formato Intel HEX, este archivo esutilizado para grabar el programa en el microcontrolador o parala depuración en el simulador

Archivo de Referencias Cruzadas LST (.LST):Archivo de Referencias Cruzadas LST (.LST):

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Archivo de Referencias Cruzadas LST (.LST):Archivo de Referencias Cruzadas LST (.LST):

Este archivo muestra el programa en mnemónico y en códigomaquina

Directivas para el archivo lkr

CODEPAGCODEPAG Esta directiva es utilizada para definir la memoria de programaa usarse

Sintaxis:CODEPAGE NAME=memName START=addr END=addr [PROTECTED] [FILL=fillvalue]

Para definir Regiones de memoria ROMPara definir Regiones de memoria ROM

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Sintaxis:CODEPAGE NAME=memName START=addr END=addr [PROTECTED] [FILL=fillvalue]

Directivas para el archivo lkr

RESET0000H

Vector Interrupción0004H0005H

07FFH0800H

0FFFH1000H

17FFH

1FFFH

1800H

Página 02 K

Página 12 K

Página 22 K

Página 32 K

CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FFCODEPAGE NAME=page1 START=0x800 END=0xFFFCODEPAGE NAME=page2 START=0x1000 END=0x17FFCODEPAGE NAME=page3 START=0x1800 END=0x1FFF

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

RESET0000H

Vector Interrupción0004H0005H

07FFH0800H

0FFFH1000H

17FFH

1FFFH

1800H

Página 02 K

Página 12 K

Página 22 K

Página 32 K

Directivas para el archivo lkr

Registros mapeados en BancosRegistros mapeados en Bancos

DATABANK NAME=memName START=addr END=addr [PROTECTED]

Para definir Regiones de memoria RAMPara definir Regiones de memoria RAM

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Registro que se encuentran en los cuatro bancosRegistro que se encuentran en los cuatro bancos

SHAREBANK NAME=memName START=addr END=addr [PROTECTED]

INDFTMR0PCL

STATUSFSR

PORTA

PORTCPORTB

PORTD

PCLATH

PIR1INTCON

PIR2TMR1L

T1CONTMR1H

TMR2T2CON

SSPBUFSSPCONCCPR1LCCPR1H

CCP1CONRCSTATXREGRCREGCCPR2LCCPR2H

CCP2CONADRESHADCON0

Banco 0

00h

RegistrosPropocitoGeneral(GPR)

96 Bytes

01h02h03h04h05h06h07h08h09h0Ah0Bh0Ch0Dh0Eh0Fh10h11h12h13h14h15h16h17h18h19h1Ah1Bh1Ch1Dh1Eh1Fh

7Fh

PORTE

20h

INDFOPTION_REG

PCLSTATUS

FSRTRISA

TRISCTRISB

TRISD

PCLATH

PIE1INTCON

PIE2

SSPCON2

PCON

PR2SSPADDSSPSTAT

TXSTASPBRG

ADRESLADCON1

Banco 1

80h

RegistrosPropocitoGeneral(GPR)

80 Bytes

81h82h83h84h85h86h87h88h89h8Ah8Bh8Ch8Dh8Eh8Fh90h91h92h93h94h95h96h97h98h99h9Ah9Bh9Ch9Dh9Eh9Fh

FFh

TRISE

A0h

F0hAcceso70h-7Fh

EFh

INDFTMR0PCL

STATUSFSR

PORTB

PCLATH

EEDATAINTCON

EEADREEDATHEEADRH

Banco 2

100h

RegistrosPropocitoGeneral(GPR)

80 Bytes

101h102h103h104h105h106h107h108h109h10Ah10Bh10Ch10Dh10Eh10Fh110h111h112h113h114h115h116h117h118h119h11Ah11Bh11Ch11Dh11Eh11Fh

17Fh

120h

Acceso70h-7Fh

170h16Fh

RegistrosPropocitoGeneral(GPR)

16 Bytes

INDFOPTION_REG

PCLSTATUS

FSR

TRISB

PCLATH

EECON1INTCON

EECON2ReservadoReservado

Banco 3

180h

RegistrosPropocitoGeneral(GPR)

80 Bytes

181h182h183h184h185h186h187h188h189h18Ah18Bh18Ch18Dh18Eh18Fh190h191h192h193h194h195h196h197h198h199h19Ah19Bh19Ch19Dh19Eh19Fh

1FFh

1A0h

Acceso70h-7Fh

1F0h1EFh

RegistrosPropocitoGeneral(GPR)

16 Bytes

Dir. Dir. Dir. Dir.

Directivas para el archivo lkrINDFTMR0PCL

STATUSFSR

PORTA

PORTCPORTB

PORTD

PCLATH

PIR1INTCON

PIR2TMR1L

T1CONTMR1H

TMR2T2CON

SSPBUFSSPCONCCPR1LCCPR1H

CCP1CONRCSTATXREGRCREGCCPR2LCCPR2H

CCP2CONADRESHADCON0

Banco 0

00h

RegistrosPropocitoGeneral(GPR)

96 Bytes

01h02h03h04h05h06h07h08h09h0Ah0Bh0Ch0Dh0Eh0Fh10h11h12h13h14h15h16h17h18h19h1Ah1Bh1Ch1Dh1Eh1Fh

7Fh

PORTE

20h

INDFOPTION_REG

PCLSTATUS

FSRTRISA

TRISCTRISB

TRISD

PCLATH

PIE1INTCON

PIE2

SSPCON2

PCON

PR2SSPADDSSPSTAT

TXSTASPBRG

ADRESLADCON1

Banco 1

80h

RegistrosPropocitoGeneral(GPR)

80 Bytes

81h82h83h84h85h86h87h88h89h8Ah8Bh8Ch8Dh8Eh8Fh90h91h92h93h94h95h96h97h98h99h9Ah9Bh9Ch9Dh9Eh9Fh

FFh

TRISE

A0h

F0hAcceso70h-7Fh

EFh

INDFTMR0PCL

STATUSFSR

PORTB

PCLATH

EEDATAINTCON

EEADREEDATHEEADRH

Banco 2

100h

RegistrosPropocitoGeneral(GPR)

80 Bytes

101h102h103h104h105h106h107h108h109h10Ah10Bh10Ch10Dh10Eh10Fh110h111h112h113h114h115h116h117h118h119h11Ah11Bh11Ch11Dh11Eh11Fh

17Fh

120h

Acceso70h-7Fh

170h16Fh

RegistrosPropocitoGeneral(GPR)

16 Bytes

INDFOPTION_REG

PCLSTATUS

FSR

TRISB

PCLATH

EECON1INTCON

EECON2ReservadoReservado

Banco 3

180h

RegistrosPropocitoGeneral(GPR)

80 Bytes

181h182h183h184h185h186h187h188h189h18Ah18Bh18Ch18Dh18Eh18Fh190h191h192h193h194h195h196h197h198h199h19Ah19Bh19Ch19Dh19Eh19Fh

1FFh

1A0h

Acceso70h-7Fh

1F0h1EFh

RegistrosPropocitoGeneral(GPR)

16 Bytes

Dir. Dir. Dir. Dir.

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Directivas para el archivo lkr

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

Directivas para el archivo lkr

SECTIONSECTION La directiva SECTION define la sección de bloque de programa(ROM), o de datos (RAM) que contendrá la sección

Sintaxis:SECTION NAME=’NomSecc’{ ROM=’NomMEM’ | RAM=’NomMEM’ }

Para definir la localización de memoria ROM y RAMPara definir la localización de memoria ROM y RAM

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Sintaxis:SECTION NAME=’NomSecc’{ ROM=’NomMEM’ | RAM=’NomMEM’ }

Directivas para el archivo lkrD_Main UDATA

Num1_16H RES 1Num1_16L RES 1Num2_16H RES 1Num2_16L RES 1RES_16H RES 1RES_16L RES 1

RESET CODEgoto INICIO

ProgMain CODEINICIO

BANKSEL Num1_16Hmovf Num1_16H,Wmovwf N1_Hmovf Num1_16L,W

movwf N1_Lmovf Num2_16H,Wmovwf N2_Hmovf Num2_16L,Wmovwf N2_Lcall Suma16x16movf N2_H,Wmovwf RES_16Hmovf N2_L,Wmovwf RES_16Lgoto INICIO

EjemploEjemplo

CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=RESET ROM=STARTUP // Vector de ResetSECTION NAME=ProgMain ROM=page0 // page0

SECTION NAME=D_Main RAM=gpr2 // Se colocan los datos// Main.asm// gpr2 **110h-16Fh**

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

D_Main UDATANum1_16H RES 1Num1_16L RES 1Num2_16H RES 1Num2_16L RES 1RES_16H RES 1RES_16L RES 1

RESET CODEgoto INICIO

ProgMain CODEINICIO

BANKSEL Num1_16Hmovf Num1_16H,Wmovwf N1_Hmovf Num1_16L,W

movwf N1_Lmovf Num2_16H,Wmovwf N2_Hmovf Num2_16L,Wmovwf N2_Lcall Suma16x16movf N2_H,Wmovwf RES_16Hmovf N2_L,Wmovwf RES_16Lgoto INICIO

CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=RESET ROM=STARTUP // Vector de ResetSECTION NAME=ProgMain ROM=page0 // page0

SECTION NAME=D_Main RAM=gpr2 // Se colocan los datos// Main.asm// gpr2 **110h-16Fh**

LIST P=16F877#INCLUDE "P16F877.inc"

;;Suma de dos números cada uno de 16 Bits; Suma: N1(16) + N2(16) -> N2(16); N1 <- N1_H:N1_L; N2 <- N2_H:N2_L;

D_Main UDATAN1_L RES 1N1_H RES 1N2_L RES 1N2_H RES 1;RESET CODE

goto INICIOProgMain CODEINICIO movf N1_L,W

addwf N2_L,Fbtfsc STATUS,Cincf N2_H,Fmovf N1_H,Waddwf N2_H,Fgoto INICIOEND

Directivas para el archivo lkr

CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=RESET ROM=STARTUP // Vector de ResetSECTION NAME=ProgMain ROM=page0 // page0

SECTION NAME=D_Main RAM=gpr2 // Se colocan los datos// Main.asm// gpr2 **110h-16Fh**

16F877.lkr

LIST P=16F877#INCLUDE "P16F877.inc"

;;Suma de dos números cada uno de 16 Bits; Suma: N1(16) + N2(16) -> N2(16); N1 <- N1_H:N1_L; N2 <- N2_H:N2_L;

D_Main UDATAN1_L RES 1N1_H RES 1N2_L RES 1N2_H RES 1;RESET CODE

goto INICIOProgMain CODEINICIO movf N1_L,W

addwf N2_L,Fbtfsc STATUS,Cincf N2_H,Fmovf N1_H,Waddwf N2_H,Fgoto INICIOEND

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=RESET ROM=STARTUP // Vector de ResetSECTION NAME=ProgMain ROM=page0 // page0

SECTION NAME=D_Main RAM=gpr2 // Se colocan los datos// Main.asm// gpr2 **110h-16Fh**

EjemplosEjemplo 1Ejemplo 1

Se desea sumar dos números, cada uno de 8 bits, uno de losnúmeros se encuentra en la dirección A0h y otro en la 120h.

Suma.ASM

Suma.HEX

MPASM

Archivo Fuente

Ensamblador

Archivo deSalida .HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Suma.ASM

Suma.HEX

MPASM

Archivo Fuente

Ensamblador

Archivo deSalida .HEX

Ejemplos

EjemploEjemplo

Se debe convertir un numero binario de 16 bits en su respectivocódigo BCD:

BIN (21:20)h

BCD (1A2:1A1:1A0)h

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

Se debe convertir un numero binario de 16 bits en su respectivocódigo BCD:

BIN (21:20)h

BCD (1A2:1A1:1A0)h

Ejemplo

Top_BB.asm

MPASM

Bin2BCD.asm

MPASM

16F877.lkr

Archivos Fuente

Ensamblador

Archivos ObjetoRelocalizables

Archivos

Top_BB.o Bin2BCD.o

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

16F877.lkr

MPLINK

Bin16BCD.HEX

Archivoslocalizador deDir.

Enlazador

Archivo final.HEX

LIST p='16f877'include "p16f877.inc"

EXTERN H_byte, L_byte, R0, R1, R2, B2_BCD;Datos_Bi UDATABIN_L RES 1BIN_H RES 1;Datos_BCD UDATABCD_L RES 1BCD_M RES 1BCD_H RES 1;STARTUP CODE

goto INICIO;Prog1 CODE;INICIO

movf BIN_L,Wmovwf L_bytemovf BIN_H,Wmovwf H_byte

;call B2_BCD

;BANKSEL BCD_Lmovf R2,Wmovwf BCD_Lmovf R1,Wmovwf BCD_Mmovf R0,Wmovwf BCD_H

;goto INICIOEND

EjemploTop_BB.asm

CODEPAGE NAME=vec_res START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=STARTUP ROM=vec_res // Vector de ResetSECTION NAME=PROG1 ROM=page0 // page0

SECTION NAME=Datos_Bi RAM=gpr0 // N1 y N2 -> GPR0SECTION NAME=Datos_BCD RAM=gpr3 // Num_1 y Num_2 -> NoBank

16F877.lkr

Etiquetas definidasEn otro archivo(Bin2BCD.asm)

LIST p='16f877'include "p16f877.inc"

EXTERN H_byte, L_byte, R0, R1, R2, B2_BCD;Datos_Bi UDATABIN_L RES 1BIN_H RES 1;Datos_BCD UDATABCD_L RES 1BCD_M RES 1BCD_H RES 1;STARTUP CODE

goto INICIO;Prog1 CODE;INICIO

movf BIN_L,Wmovwf L_bytemovf BIN_H,Wmovwf H_byte

;call B2_BCD

;BANKSEL BCD_Lmovf R2,Wmovwf BCD_Lmovf R1,Wmovwf BCD_Mmovf R0,Wmovwf BCD_H

;goto INICIOEND

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

CODEPAGE NAME=vec_res START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=STARTUP ROM=vec_res // Vector de ResetSECTION NAME=PROG1 ROM=page0 // page0

SECTION NAME=Datos_Bi RAM=gpr0 // N1 y N2 -> GPR0SECTION NAME=Datos_BCD RAM=gpr3 // Num_1 y Num_2 -> NoBank

;Se Definen los DatosDATOS_BB UDATA

L_byte RES 1H_byte RES 1;;Se definen las etiquetas Globales

GLOBAL L_byte, H_byte;PROG1 CODE ;Codigo Pagina 0B2BCD

GLOBAL B2BCD.. ;Código de la. ;Sub-Rutina..RETURN

;END

ADD_BCD8.asm

Ejemplo

CODEPAGE NAME=vec_res START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=STARTUP ROM=vec_res // Vector de ResetSECTION NAME=PROG1 ROM=page0 // page0

SECTION NAME=DATOS RAM=gpr0 // N1 y N2 -> GPR0SECTION NAME=DATOS_BCD RAM=NoBank // Num_1 y Num_2 -> NoBank

16F877.lkr

Etiquetas definidasPara ser utilizadasPor otro archivo

;Se Definen los DatosDATOS_BB UDATA

L_byte RES 1H_byte RES 1;;Se definen las etiquetas Globales

GLOBAL L_byte, H_byte;PROG1 CODE ;Codigo Pagina 0B2BCD

GLOBAL B2BCD.. ;Código de la. ;Sub-Rutina..RETURN

;END

UNEXPO – Pto. Ordaz. MICROPROCESADORESUNEXPO – Pto. Ordaz. MICROPROCESADORES

CODEPAGE NAME=vec_res START=0x0 END=0x3 PROTECTEDCODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTEDCODEPAGE NAME=page0 START=0x5 END=0x7FF

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTEDDATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTEDDATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTEDDATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6FDATABANK NAME=gpr1 START=0xA0 END=0xEFDATABANK NAME=gpr2 START=0x110 END=0x16FDATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7FSHAREBANK NAME=NoBank START=0xF0 END=0xFFSHAREBANK NAME=NoBank START=0x170 END=0x17FSHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=STARTUP ROM=vec_res // Vector de ResetSECTION NAME=PROG1 ROM=page0 // page0

SECTION NAME=DATOS RAM=gpr0 // N1 y N2 -> GPR0SECTION NAME=DATOS_BCD RAM=NoBank // Num_1 y Num_2 -> NoBank

FINFIN