ensamblador - webnode · 2013-01-14 · directivas del ensamblador banksel se coloca en el banco de...
TRANSCRIPT
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