ejercicio - instrucciones de transferencia

Upload: gusti072

Post on 07-Feb-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    1/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 1

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    EJERCICIO PARA PRACTICAR EL USO DE LAS

    INSTRUCCIONES DE TRANSFERENCIA

    Desarrollar un programa para el microcontrolador ATmega164P, quepermita llenar las doce primeras localidades de la memoria de datos, conlos cdigos ASCII del nmero 1, de la letra A mayscula y de la letra aminscula en forma alternada, tal como se muestra en la siguiente figura;donde 0x31 es el ASCII del 1, 0x41 es el ASCII de la A y 0x61 es elASCII de la a:

    PRIMERA SOLUCIN

    Esta solucin utiliza direccionamiento directo y valores numricos hexadecimales.

    LDI R16,0x31LDI R17,0x41LDI R18,0x61STS 0x100,R16STS 0x101,R17

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    2/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 2

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    STS 0x102,R18STS 0x103,R16STS 0x104,R17STS 0x105,R18STS 0x106,R16

    STS 0x107,R17STS 0x108,R18STS 0x109,R16STS 0x10A,R17STS 0x10B,R18

    El Mdulo Fuente contenido en el archivo .ASM es el que muestra a continuacin:

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1,; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.

    ; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y VALORES NUMRICOS HEXADECIMALES;.DEVICE ATMEGA164P;.CSEG

    LDI R16,0x31LDI R17,0x41LDI R18,0x61STS 0x100,R16STS 0x101,R17STS 0x102,R18STS 0x103,R16STS 0x104,R17STS 0x105,R18

    STS 0x106,R16STS 0x107,R17STS 0x108,R18STS 0x109,R16STS 0x10A,R17STS 0x10B,R18

    ;FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE

    El resultado del ensamblado contenido en el archivo .LST es:

    AVRASM ver. 2.1.12 C:\Documents_and_Settings\Administrador\Mis_documentos\AVRfiles\Llenar\ATmega164\Llenar01\Llenar01.asm Sun Mar 22 10:35:41 2009

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1,; DE LA LETRA A MAYSCULA Y DE LA LETRA A MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y VALORES NUMRICOS HEXADECIMALES;.DEVICE ATMEGA164P;.CSEG

    000000 e301 LDI R16,0x31000001 e411 LDI R17,0x41

    000002 e621 LDI R18,0x61000003 9300 0100 STS 0x100,R16000005 9310 0101 STS 0x101,R17

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    3/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 3

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    000007 9320 0102 STS 0x102,R18000009 9300 0103 STS 0x103,R1600000b 9310 0104 STS 0x104,R1700000d 9320 0105 STS 0x105,R1800000f 9300 0106 STS 0x106,R16000011 9310 0107 STS 0x107,R17000013 9320 0108 STS 0x108,R18

    000015 9300 0109 STS 0x109,R16000017 9310 010a STS 0x10A,R17000019 9320 010b STS 0x10B,R18

    ;00001b cfff FIN: RJMP FIN

    ;

    RESOURCE USE INFORMATION------------------------

    Notice:The register and instruction counts are symbol table hit counts,and hence implicitly used resources are not counted, eg, the'lpm' instruction without operands implicitly uses r0 and z,none of which are counted.

    x,y,z are separate entities in the symbol table and arecounted separately from r26..r31 here.

    .dseg memory usage only counts static data declared with .byte

    ATMEGA164P register use summary:r0 : 0 r1 : 0 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0 r13: 0 r14: 0 r15: 0r16: 5 r17: 5 r18: 5 r19: 0 r20: 0 r21: 0 r22: 0 r23: 0r24: 0 r25: 0 r26: 0 r27: 0 r28: 0 r29: 0 r30: 0 r31: 0x : 0 y : 0 z : 0Registers used: 3 out of 35 (8.6%)

    ATMEGA164P instruction use summary:adc : 0 add : 0 adiw : 0 and : 0 andi : 0 asr : 0bclr : 0 bld : 0 brbc : 0 brbs : 0 brcc : 0 brcs : 0break : 0 breq : 0 brge : 0 brhc : 0 brhs : 0 brid : 0brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 0 brpl : 0brsh : 0 brtc : 0 brts : 0 brvc : 0 brvs : 0 bset : 0bst : 0 call : 0 cbi : 0 cbr : 0 clc : 0 clh : 0cli : 0 cln : 0 clr : 0 cls : 0 clt : 0 clv : 0clz : 0 com : 0 cp : 0 cpc : 0 cpi : 0 cpse : 0dec : 0 eicall: 0 eijmp : 0 elpm : 0 eor : 0 fmul : 0fmuls : 0 fmulsu: 0 icall : 0 ijmp : 0 in : 0 inc : 0jmp : 0 ld : 0 ldd : 0 ldi : 3 lds : 0 lpm : 0lsl : 0 lsr : 0 mov : 0 movw : 0 mul : 0 muls : 0mulsu : 0 neg : 0 nop : 0 or : 0 ori : 0 out : 0pop : 0 push : 0 rcall : 0 ret : 0 reti : 0 rjmp : 1

    rol : 0 ror : 0 sbc : 0 sbci : 0 sbi : 0 sbic : 0sbis : 0 sbiw : 0 sbr : 0 sbrc : 0 sbrs : 0 sec : 0seh : 0 sei : 0 sen : 0 ser : 0 ses : 0 set : 0sev : 0 sez : 0 sleep : 0 spm : 0 st : 0 std : 0sts : 12 sub : 0 subi : 0 swap : 0 tst : 0 wdr : 0

    Instructions used: 3 out of 114 (2.6%)

    ATMEGA164P memory use summary [bytes]:Segment Begin End Code Data Used Size Use%---------------------------------------------------------------[.cseg] 0x000000 0x000038 56 0 56 9999999 0.0%[.dseg] 0x000060 0x000060 0 0 0 9999999 0.0%[.eseg] 0x000000 0x000000 0 0 0 9999999 0.0%

    Assembly complete, 0 errors, 0 warnings

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    4/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 4

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    El cdigo de mquina contenido en el archivo .HEX es:

    :020000020000FC:1000000001E311E421E60093000110930101209324:100010000201009303011093040120930501009352:100020000601109307012093080100930901109322:080030000A0120930B01FFCF30:00000001FF

    VARIACIN DE LA PRIMERA SOLUCIN

    Esta solucin utiliza direccionamiento directo y expresiones con valores numricos.

    LDI R16,0x31LDI R17,0x41LDI R18,0x61STS 0x100+0,R16

    STS 0x100+1,R17STS 0x100+2,R18STS 0x100+3,R16STS 0x100+4,R17STS 0x100+5,R18STS 0x100+6,R16STS 0x100+7,R17STS 0x100+8,R18STS 0x100+9,R16STS 0x100+10,R17STS 0x100+11,R18

    VARIACIN DE LA PRIMERA SOLUCIN, PEROQUE NO CUMPLE LO SOLICITADO

    Esta solucin utiliza tambin direccionamiento directo y expresiones con valoresnumricos. ATENCIN: esta solucin llena otras localidades, con otros valores.

    LDI R16,31LDI R17,41LDI R18,61STS 100+0,R16STS 100+1,R17STS 100+2,R18STS 100+3,R16STS 100+4,R17STS 100+5,R18STS 100+6,R16STS 100+7,R17STS 100+8,R18STS 100+9,R16

    STS 100+10,R17STS 100+11,R18

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    5/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 5

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    NUEVA VARIACIN DE LA PRIMERA SOLUCIN

    Esta solucin utiliza direccionamiento directo y expresiones con etiquetas.

    LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCSTS BLOQUE+0,R16STS BLOQUE+1,R17STS BLOQUE+2,R18STS BLOQUE+3,R16STS BLOQUE+4,R17STS BLOQUE+5,R18STS BLOQUE+6,R16STS BLOQUE+7,R17

    STS BLOQUE+8,R18STS BLOQUE+9,R16STS BLOQUE+10,R17STS BLOQUE+11,R18

    El Mdulo Fuente contenido en el archivo .ASM es el que muestra a continuacin:

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y EXPRESIONES CON ETIQUETAS

    ;.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = 0x31.EQU MAYUSC = 0x41.EQU MINUSC = 0x61;.DSEG.ORG 0x100BLOQUE: .BYTE NLOC;.CSEG

    LDI R16,NUMERO

    LDI R17,MAYUSCLDI R18,MINUSCSTS BLOQUE+0,R16STS BLOQUE+1,R17STS BLOQUE+2,R18STS BLOQUE+3,R16STS BLOQUE+4,R17STS BLOQUE+5,R18STS BLOQUE+6,R16STS BLOQUE+7,R17STS BLOQUE+8,R18STS BLOQUE+9,R16STS BLOQUE+10,R17STS BLOQUE+11,R18

    ;

    FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    6/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 6

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    Para asignar los valores numricos a las etiquetas, se utiliza la Directiva deEQUIVALENCIA (.EQU)

    Para asignar los valores de las direcciones de la SRAM a las etiquetas, se utilizan: laDirectiva de Reservacin de zonas de memoria SRAM (.BYTE) y la Directiva de

    Reubicacin (.ORG), que permite establecer el origen del bloque de localidades de laSRAM. Esta misma directiva, sirve para reubicar los programas cuando es necesario.

    De esta manera se facilita al programador la actualizacin de los programas, porque esms comprensible el algoritmo implementado y es ms rpido de modificarlo, como seve en el siguiente Mdulo Fuente.

    ; PROGRAMA PARA LLENAR LAS QUINCE LOCALIDADES A PARTIR DE LA 200 HEXADECIMAL; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 0; DE LA LETRA Z MAYSCULA Y DE LA LETRA t MINSCULA,; ALTERNADAMENTE.

    ; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y EXPRESIONES CON ETIQUETAS;.DEVICE ATMEGA164P;.EQU NLOC = 15.EQU NUMERO = '0'.EQU MAYUSC = 'Z'.EQU MINUSC = 't';.DSEG.ORG 0x200BLOQUE: .BYTE NLOC;.CSEG

    LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCSTS BLOQUE+0,R16STS BLOQUE+1,R17STS BLOQUE+2,R18STS BLOQUE+3,R16STS BLOQUE+4,R17STS BLOQUE+5,R18STS BLOQUE+6,R16STS BLOQUE+7,R17STS BLOQUE+8,R18STS BLOQUE+9,R16STS BLOQUE+10,R17

    STS BLOQUE+11,R18STS BLOQUE+12,R16STS BLOQUE+13,R17STS BLOQUE+14,R18

    ;FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE

    En esta solucin, se ha incorporado la ayuda del ensamblador para obtener los cdigosASCII de los smbolos, nicamente colocando al smbolo entre apstrofes.

    Tambin, se ha utilizado de Directiva de Reubicacin (.ORG)

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    7/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 7

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    SEGUNDA SOLUCIN

    La solucin utiliza direccionamiento indirecto, incrementos del puntero y etiquetas. Elpuntero que se utiliza es el puntero X, que est conformado por los Registros R26 yR27. Por lo que hace falta inicializar el puntero antes de utilizarlo.

    LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)ST X,R16INC R26ST X,R17INC R26

    ST X,R18INC R26ST X,R16INC R26ST X,R17INC R26ST X,R18INC R26ST X,R16INC R26ST X,R17

    INC R26ST X,R18INC R26ST X,R16INC R26ST X,R17INC R26ST X,R18INC R26

    Esta solucin para inicializar el Puntero X de 16 bits, utiliza dos instrucciones de carga

    inmediata de 8 bits a los registro R26 y R27 (LDI); donde el operando de origen queutiliza direccionamiento inmediato es el resultado de las funciones LOW y HIGH, que

    posee este ensamblador, para separar un nmero de 16 bits en dos bytes el menossignificativo con LOW y el ms significativo con HIGH.

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    8/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 8

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    TERCERA SOLUCIN

    Esta solucin utiliza direccionamiento indirecto con post incremento, funciones yetiquetas

    LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)ST X+,R16ST X+,R17ST X+,R18ST X+,R16ST X+,R17

    ST X+,R18ST X+,R16ST X+,R17ST X+,R18ST X+,R16ST X+,R17ST X+,R18

    La ventaja de esta solucin, radica en que el cdigo de mquina de todas lasinstrucciones que llenan las localidades de la SRAM, es el mismo.

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES

    ; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, FUNCIONES Y ETIQUETAS;.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = '1'.EQU MAYUSC = 'A'.EQU MINUSC = 'a';.DSEG

    .ORG 0x100000100 BLOQUE: .BYTE NLOC;.CSEG

    000000 e301 LDI R16,NUMERO000001 e411 LDI R17,MAYUSC000002 e621 LDI R18,MINUSC000003 e0a0 LDI R26,LOW(BLOQUE)000004 e0b1 LDI R27,HIGH(BLOQUE)000005 930d ST X+,R16000006 931d ST X+,R17000007 932d ST X+,R18000008 930d ST X+,R16000009 931d ST X+,R1700000a 932d ST X+,R18

    00000b 930d ST X+,R1600000c 931d ST X+,R1700000d 932d ST X+,R18

    Cdigos de Mquinaiguales

    Cdigos de Mquinaiguales

    Cdigos de Mquinaiguales

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    9/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 9

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    00000e 930d ST X+,R1600000f 931d ST X+,R17000010 932d ST X+,R18

    ;000011 cfff FIN: RJMP FIN

    ;.EXIT ; FIN DEL MODULO FUENTE

    Por lo tanto, con este modo de direccionamiento se puede conseguir una solucineficiente mediante el uso de LAZOS DE REPETICIN

    CUARTA SOLUCIN

    Esta solucin utiliza direccionamiento indirecto con post incremento, expresiones confunciones, etiquetas y un lazo de repeticin controlado por el valor del puntero

    LDI R16,NUMERO

    LDI R17,MAYUSCLDI R18,MINUSCLDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)

    REPITA: ST X+,R16ST X+,R17ST X+,R18CPI R26,LOW(BLOQUE)+11BRNE REPITA

    Resultado del ensamblado de este Mdulo Fuente:

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y; UN LAZO DE REPETICIN CONTROLADO POR EL VALOR DEL PUNTERO;.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = '1'.EQU MAYUSC = 'A'

    .EQU MINUSC = 'a';

    .DSEG

    .ORG 0x100000100 BLOQUE: .BYTE NLOC

    ;.CSEG

    000000 e301 LDI R16,NUMERO000001 e411 LDI R17,MAYUSC000002 e621 LDI R18,MINUSC000003 e0a0 LDI R26,LOW(BLOQUE)000004 e0b1 LDI R27,HIGH(BLOQUE)000005 930d REPITA: ST X+,R16000006 931d ST X+,R17000007 932d ST X+,R18

    000008 30ab CPI R26,LOW(BLOQUE)+11000009 f7d9 BRNE REPITA

    ;

    Cdigos de Mquinaiguales

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    10/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 10

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    00000a cfff FIN: RJMP FIN;

    Lamentablemente esta solucin no cumple con lo solicitado, Llenar doce localidades;porque, el programa sigue llenando ms localidades debido a una falla en el control dellazo de repeticin tal como se puede ver en la siguiente prueba de escritorio.

    R16 R17 R18 R26 R27 Localidades de la SRAM Comparacin Salto0x31 0x41 0x61 0x00 0x01 (0x0100) = 0x31

    0x01 0x01(0x0101) = 0x41

    0x02 0x01(0x0102) = 0x61

    0x03 0x01 0x030x0B Si(0x0103) = 0x31

    0x04 0x01(0x0104) = 0x41

    0x05 0x01

    (0x0105) = 0x610x06 0x01 0x060x0B Si

    (0x0106) = 0x310x07 0x01

    (0x0107) = 0x410x08 0x01

    (0x0108) = 0x610x09 0x01 0x090x0B Si

    (0x0109) = 0x310x0A 0x01

    (0x010A) = 0x410x0B 0x01

    (0x010B) = 0x610x0C 0x01 0x0C0x0B Si

    (0x010C) = 0x310x0D 0x01

    (0x010D) = 0x410x0E 0x01

    (0x010E) = 0x610x0F 0x01 0x0F0x0B Si

    (0x010F) = 0x310x10 0x01

    (0x0110) = 0x410x11 0x01

    (0x0111) = 0x610x12 0x01 0x120x0B Si

    La solucin es modificar la instruccin de comparacin por:

    CPI R26,LOW(BLOQUE)+12

    O, mejor:

    CPI R26,LOW(BLOQUE)+NLOC

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    11/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 11

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    QUINTA SOLUCIN

    Esta solucin utiliza direccionamiento indirecto con post incremento, expresiones confunciones, etiquetas y un lazo de repeticin controlado por un contador descendente.

    LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI R19,NLOC/3LDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)

    REPITA: ST X+,R16ST X+,R17ST X+,R18DEC R19

    BRNE REPITA

    VARIACIN A LA QUINTA SOLUCIN

    Esta variacin permite visualizar mejor el algoritmo, cuando al registro contador seetiqueta precisamente como CONTADOR, mediante la Directiva que Define un

    Nombre Simblico para un Registro (.DEF)

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.

    ; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y; UN LAZO DE REPETICIN CONTROLADO POR UN CONTADOR DESCENDENTE; EL REGISTRO CONTADOR ESTA ETIQUETADO PRECISAMENTE COMO "CONTADOR";.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = '1'.EQU MAYUSC = 'A'.EQU MINUSC = 'a';.DEF CONTADOR = R19;

    .DSEG.ORG 0x100BLOQUE: .BYTE NLOC;.CSEG

    LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI CONTADOR,NLOC/3LDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)

    REPITA: ST X+,R16ST X+,R17ST X+,R18DEC CONTADOR

    BRNE REPITA;FIN: RJMP FIN

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    12/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 12

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    ;.EXIT ; FIN DEL MODULO FUENTE

    La ventaja de elaborar lazos de repeticin bajo este esquema, es que se pueden observaren forma clara las tres partes que conforman el lazo de repeticin:

    La inicializacin de los registros, del contador de repeticiones y del o de lospunteros, que intervienen en el lazo.

    El cuerpo del lazo de repeticin, que realiza la tarea repetitiva, y La disminucin del contador y el correspondiente chequeo para determinar el

    final de las repeticiones, mediante la instruccin de bifurcacin.

    A continuacin se muestra el Mdulo Fuente en el que se ha unido la solucin a los dosproblemas que se resolvieron antes, en forma individual.

    ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1

    ; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; TAMBIN, DEBE LLENAR QUINCE LOCALIDADES A PARTIR DE 200 HEXADECIMAL; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 0; DE LA LETRA Z MAYSCULA Y DE LA LETRA t MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y; DOS LAZOS DE REPETICIN CONTROLADO POR UN CONTADOR DESCENDENTE; EL REGISTRO CONTADOR ESTA ETIQUETADO PRECISAMENTE COMO "CONTADOR";.DEVICE ATMEGA164P;.EQU NLOC1 = 12.EQU NUMERO1 = '1'.EQU MAYUSC1 = 'A'.EQU MINUSC1 = 'a'.EQU NLOC2 = 15.EQU NUMERO2 = '0'.EQU MAYUSC2 = 'Z'.EQU MINUSC2 = 't';.DEF CONTADOR = R19;.DSEG.ORG 0x100BLQ1: .BYTE NLOC1.ORG 0x200BLQ2: .BYTE NLOC2

    ;.CSEG

    LDI R16,NUMERO1LDI R17,MAYUSC1LDI R18,MINUSC1LDI CONTADOR,NLOC1/3LDI R26,LOW(BLQ1)LDI R27,HIGH(BLQ1)

    LAZO1: ST X+,R16ST X+,R17ST X+,R18DEC CONTADORBRNE LAZO1

    ;LDI R16,NUMERO2LDI R17,MAYUSC2LDI R18,MINUSC2

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    13/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 13

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    LDI CONTADOR,NLOC2/3LDI R26,LOW(BLQ2)LDI R27,HIGH(BLQ2)

    LAZO2: ST X+,R16ST X+,R17ST X+,R18DEC CONTADOR

    BRNE LAZO2;FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE

    Esta ltima solucin al problema, permite al programador crear sus propiasMACROINSTRUCCIONES, que le faciliten an ms la elaboracin de los programas.

    INCLUSIN DE MACROINSTRUCCIONES EN LA

    QUINTA SOLUCINLa creacin de Macroinstrucciones consiste en agrupar un bloque de instrucciones queforman la nueva instruccin. La condicin que deben cumplir es que se diferenciennicamente en ciertos operandos como registros, localidades o valores entre lasinstrucciones de los diferentes bloques.

    Para construir la nueva instruccin: Se empieza por la Directiva de Encabezado de lasMacroinstrucciones (:MACRO), donde se define el nombre que le corresponde a lanueva instruccin. A continuacin sigue el bloque de instrucciones, donde los elementosque cambian son reemplazados por @0, @1, @2 hasta @9 y que constituyen los

    parmetros que se especifican cuando se invoca a la nueva instruccin, dentro delprograma. Se termina la construccin de la nueva instruccin con la Directiva deFinalizacin de las Macroinstrucciones (:ENDMACRO)

    La invocacin de la nueva instruccin se realiza utilizando el nombre que se establecien la construccin, seguido de los parmetros separados por comas y en el orden que selos numer.

    A continuacin esta ilustrado la creacin de la Macroinstruccin para inicializar losregistros que se utilizan en los lazos de repeticin de la solucin, a la que se le nombracomo INICIAR.

    .LISTMAC

    .MACRO INICIARLDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2LDI R26,LOW(@4)LDI R27,HIGH(@4)

    .ENDMACRO

    ;.CSEG

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    14/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 14

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1LAZO1: ST X+,R16

    ST X+,R17ST X+,R18DEC CONTADOR

    BRNE LAZO1;INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2

    LAZO2: ST X+,R16ST X+,R17ST X+,R18DEC CONTADORBRNE LAZO2

    El uso de Macroinstrucciones no ahorra cdigo de mquina, como se puede ver en elresultado del ensamblado, que a continuacin se muestra:

    .DEVICE ATMEGA164P;.EQU NLOC1 = 12.EQU NUMERO1 = '1'.EQU MAYUSC1 = 'A'.EQU MINUSC1 = 'a'.EQU NLOC2 = 15.EQU NUMERO2 = '0'.EQU MAYUSC2 = 'Z'.EQU MINUSC2 = 't';.DEF CONTADOR = R19;

    .DSEG.ORG 0x100000100 BLQ1: .BYTE NLOC1

    .ORG 0x200000200 BLQ2: .BYTE NLOC2

    ;.LISTMAC.MACRO INICIAR

    LDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2LDI R26,LOW(@4)LDI R27,HIGH(@4)

    .ENDMACRO

    ;.CSEG+

    000000 e301 +LDI R16 , NUMERO1000001 e411 +LDI R17 , MAYUSC1000002 e621 +LDI R18 , MINUSC1000003 e036 +LDI CONTADOR , NLOC1 / 2000004 e0a0 +LDI R26 , LOW ( BLQ1 )000005 e0b1 +LDI R27 , HIGH ( BLQ1 )

    INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1000006 930d LAZO1: ST X+,R16000007 931d ST X+,R17000008 932d ST X+,R18000009 953a DEC CONTADOR

    00000a f7d9 BRNE LAZO1;+

    Cdigos de Mquinaiguales

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    15/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 15

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    00000b e300 +LDI R16 , NUMERO200000c e51a +LDI R17 , MAYUSC200000d e724 +LDI R18 , MINUSC200000e e037 +LDI CONTADOR , NLOC2 / 200000f e0a0 +LDI R26 , LOW ( BLQ2 )000010 e0b2 +LDI R27 , HIGH ( BLQ2 )

    INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2

    000011 930d LAZO2: ST X+,R16000012 931d ST X+,R17000013 932d ST X+,R18000014 953a DEC CONTADOR000015 f7d9 BRNE LAZO2

    ;000016 cfff FIN: RJMP FIN

    ; ;

    Analizando el listado anterior, se puede observar que las instrucciones de los lazos derepeticin tienen el mismo cdigo de mquina, lo que permite convertirles enSubrutinas, como lo que si indica a continuacin:

    INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1CALL LAZOINICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2CALL LAZO

    INCLUSIN DE MACROINSTRUCCIONES YSUBRUTINAS EN LA QUINTA SOLUCIN

    Cuando se utilizan Subrutinas es necesario inicializar el Puntero del Stack (SP) quegeneralmente se lo ubica al final de la SRAM. Adems se ha eliminado la directiva quelista completamente las macroinstrucciones.

    .DEVICE ATMEGA164P;.EQU NLOC1 = 12.EQU NUMERO1 = '1'.EQU MAYUSC1 = 'A'.EQU MINUSC1 = 'a'.EQU NLOC2 = 15.EQU NUMERO2 = '0'.EQU MAYUSC2 = 'Z'.EQU MINUSC2 = 't';.DEF CONTADOR = R19;.DSEG.ORG 0x100

    000100 BLQ1: .BYTE NLOC1.ORG 0x200

    000200 BLQ2: .BYTE NLOC2;;.LISTMAC.MACRO INICIAR

    LDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2LDI R26,LOW(@4)

    LDI R27,HIGH(@4).ENDMACRO;

    Cdigos de Mquinaiguales

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    16/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 16

    Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

    .CSEG000000 ef0f LDI R16,LOW(0x04FF)000001 9300 005e STS $5E,R16000003 e004 LDI R16,HIGH(0x04FF)000004 9300 005d STS $5D,R16

    ;000006 e301

    000007 e411000008 e621000009 e03600000a e0a000000b e0b1 INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ100000c 940e 0017 CALL LAZO

    ;00000e e30000000f e51a000010 e724000011 e037000012 e0a0000013 e0b2 INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2000014 940e 0017 CALL LAZO

    ;

    000016 cfff FIN: RJMP FIN;

    000017 930d LAZO: ST X+,R16000018 931d ST X+,R17000019 932d ST X+,R1800001a 953a DEC CONTADOR00001b f7d9 BRNE LAZO00001c 9508 RET

    ;

    INCLUSIN DEL ARCHIVO DE DEFINICIONESPROPORCIONADO POR EL FABRICANTE

    El fabricante proporciona el archivo m164pdef.inc, para facilitar la elaboracin de losprogramas; a fin de, reemplazar los valores numricos de las direcciones de memoriapor las Etiquetas que se utilizan en las hojas de datos. En el siguiente listado se hareemplazado la definicin del dispositivo (.DEVICE ATMEGA164P) por la inclusindel archivo de definiciones y se han utilizado las directivas .NOLIST y .LIST para queen el archivo de resultado del ensamblado no se listen las lneas que contiene el archivode definiciones.

    .NOLIST

    .INCLUDE "m164pdef.inc"

    .LIST;

    .EQU NLOC1 = 12

    .EQU NUMERO1 = '1'

    .EQU MAYUSC1 = 'A'

    .EQU MINUSC1 = 'a'

    .EQU NLOC2 = 15

    .EQU NUMERO2 = '0'

    .EQU MAYUSC2 = 'Z'

    .EQU MINUSC2 = 't';.DEF CONTADOR = R19;.DSEG.ORG 0x100

    BLQ1: .BYTE NLOC1.ORG 0x200BLQ2: .BYTE NLOC2

    Inicializacin delStack Pointer

  • 7/21/2019 Ejercicio - Instrucciones de Transferencia

    17/17

    SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 17

    Ing Jaime E Velarde Departamento de Electrnica Telecomunicaciones y Redes de Informacin

    ;;.LISTMAC.MACRO INICIAR

    LDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2

    LDI R26,LOW(@4)LDI R27,HIGH(@4).ENDMACRO;.CSEG

    LDI R16,LOW(RAMEND)OUT SPH,R16LDI R16,HIGH(RAMEND)OUT SPL,R16

    ;INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1CALL LAZO

    ;INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2CALL LAZO

    ;FIN: RJMP FIN;LAZO: ST X+,R16

    ST X+,R17ST X+,R18DEC CONTADORBRNE LAZORET

    ;.EXIT ; FIN DEL MODULO FUENTE

    La utilizacin de este archivo de definiciones permite escoger rpidamente elmicrocontrolador con el cual se va ha trabajar, grabado el cdigo de mquina queresulta del proceso de ensamblado. As por ejemplo, el ltimo programa en una ocasinse desea utilizarlo con el ATmega164P y en otra con el ATmega16; una de lasdiferencias entre estos microcontroladores es la direccin final de la SRAM. en el

    primer caso esta direccin es 0x04FF y en el segundo caso es 0x045F. nicamentecambiando el archivo de definiciones m164pdef.inc por m16def.inc y sin modificarninguna otra lnea, se obtiene para cada caso los cdigos de mquina correspondientes.

    Para el ATmega164P

    :020000020000FC:100000000FEF0EBF04E00DBF01E311E421E636E07F

    :10001000A0E0B1E00E94150000E31AE524E737E014:10002000A0E0B2E00E941500FFCF0D931D932D9329:060030003A95D9F708958E:00000001FF

    Para el ATmega16

    :020000020000FC:100000000FE50EBF04E00DBF01E311E421E636E089:10001000A0E0B1E00E94150000E31AE524E737E014:10002000A0E0B2E00E941500FFCF0D931D932D9329:060030003A95D9F708958E:00000001FF

    Etiquetas que seencuentran en el archivo

    de definiciones

    Cdigos de Mquinadiferentes, por el cambio de

    microcontrolador