SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 1


  EJERCICIO PARA PRACTICAR EL USO DE LAS
         INSTRUCCIONES DE TRANSFERENCIA
Desarrollar un programa para el microcontrolador ATmega164P, que
permita llenar las doce primeras localidades de la memoria de datos, con
los códigos ASCII del número 1, de la letra A mayúscula y de la letra a
minúscula 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 el
ASCII de la a:




PRIMERA SOLUCIÓN
Esta solución utiliza direccionamiento directo y valores numéricos hexadecimales.

               LDI             R16,0x31
               LDI             R17,0x41
               LDI             R18,0x61
               STS             0x100,R16
               STS             0x101,R17


Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 2

               STS             0x102,R18
               STS             0x103,R16
               STS             0x104,R17
               STS             0x105,R18
               STS             0x106,R16
               STS             0x107,R17
               STS             0x108,R18
               STS             0x109,R16
               STS             0x10A,R17
               STS             0x10B,R18

El Módulo Fuente contenido en el archivo .ASM es el que muestra a continuación:

; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1,
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y VALORES NUMÉRICOS HEXADECIMALES
;
.DEVICE      ATMEGA164P
;
.CSEG
             LDI          R16,0x31
             LDI          R17,0x41
             LDI          R18,0x61
             STS          0x100,R16
             STS          0x101,R17
             STS          0x102,R18
             STS          0x103,R16
             STS          0x104,R17
             STS          0x105,R18
             STS          0x106,R16
             STS          0x107,R17
             STS          0x108,R18
             STS          0x109,R16
             STS          0x10A,R17
             STS          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_SettingsAdministradorMis_documentos
AVRfilesLlenarATmega164Llenar01Llenar01.asm Sun Mar 22 10:35:41 2009

                   ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
                   ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1,
                   ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA A MINÚSCULA,
                   ; ALTERNADAMENTE.
                   ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
                   ; Y VALORES NUMÉRICOS HEXADECIMALES
                   ;
                   .DEVICE ATMEGA164P
                   ;
                   .CSEG
000000   e301               LDI          R16,0x31
000001   e411               LDI          R17,0x41
000002   e621               LDI          R18,0x61
000003   9300 0100          STS          0x100,R16
000005   9310 0101          STS          0x101,R17



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 3

000007   9320   0102           STS             0x102,R18
000009   9300   0103           STS             0x103,R16
00000b   9310   0104           STS             0x104,R17
00000d   9320   0105           STS             0x105,R18
00000f   9300   0106           STS             0x106,R16
000011   9310   0107           STS             0x107,R17
000013   9320   0108           STS             0x108,R18
000015   9300   0109           STS             0x109,R16
000017   9310   010a           STS             0x10A,R17
000019   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 are
counted 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 :   0
r8 :   0 r9 :   0 r10:   0 r11:    0       r12:       0   r13:        0   r14:        0   r15:   0
r16:   5 r17:   5 r18:   5 r19:    0       r20:       0   r21:        0   r22:        0   r23:   0
r24:   0 r25:   0 r26:   0 r27:    0       r28:       0   r29:        0   r30:        0   r31:   0
x :    0 y :    0 z :    0
Registers used: 3 out of 35 (8.6%)

ATMEGA164P instruction use summary:
adc   :   0 add   :   0 adiw :    0        and    :        0   andi       :      0   asr     :   0
bclr :    0 bld   :   0 brbc :    0        brbs   :        0   brcc       :      0   brcs    :   0
break :   0 breq :    0 brge :    0        brhc   :        0   brhs       :      0   brid    :   0
brie :    0 brlo :    0 brlt :    0        brmi   :        0   brne       :      0   brpl    :   0
brsh :    0 brtc :    0 brts :    0        brvc   :        0   brvs       :      0   bset    :   0
bst   :   0 call :    0 cbi   :   0        cbr    :        0   clc        :      0   clh     :   0
cli   :   0 cln   :   0 clr   :   0        cls    :        0   clt        :      0   clv     :   0
clz   :   0 com   :   0 cp    :   0        cpc    :        0   cpi        :      0   cpse    :   0
dec   :   0 eicall:   0 eijmp :   0        elpm   :        0   eor        :      0   fmul    :   0
fmuls :   0 fmulsu:   0 icall :   0        ijmp   :        0   in         :      0   inc     :   0
jmp   :   0 ld    :   0 ldd   :   0        ldi    :        3   lds        :      0   lpm     :   0
lsl   :   0 lsr   :   0 mov   :   0        movw   :        0   mul        :      0   muls    :   0
mulsu :   0 neg   :   0 nop   :   0        or     :        0   ori        :      0   out     :   0
pop   :   0 push :    0 rcall :   0        ret    :        0   reti       :      0   rjmp    :   1
rol   :   0 ror   :   0 sbc   :   0        sbci   :        0   sbi        :      0   sbic    :   0
sbis :    0 sbiw :    0 sbr   :   0        sbrc   :        0   sbrs       :      0   sec     :   0
seh   :   0 sei   :   0 sen   :   0        ser    :        0   ses        :      0   set     :   0
sev   :   0 sez   :   0 sleep :   0        spm    :        0   st         :      0   std     :   0
sts   : 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




Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 4

El código de máquina contenido en el archivo .HEX es:

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


VARIACIÓN DE LA PRIMERA SOLUCIÓN
Esta solución utiliza direccionamiento directo y expresiones con valores numéricos.

               LDI             R16,0x31
               LDI             R17,0x41
               LDI             R18,0x61
               STS             0x100+0,R16
               STS             0x100+1,R17
               STS             0x100+2,R18
               STS             0x100+3,R16
               STS             0x100+4,R17
               STS             0x100+5,R18
               STS             0x100+6,R16
               STS             0x100+7,R17
               STS             0x100+8,R18
               STS             0x100+9,R16
               STS             0x100+10,R17
               STS             0x100+11,R18

VARIACIÓN DE LA PRIMERA SOLUCIÓN, PERO
QUE NO CUMPLE LO SOLICITADO
Esta solución utiliza también direccionamiento directo y expresiones con valores
numéricos. ATENCIÓN: esta solución llena otras localidades, con otros valores.

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


Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 5


NUEVA VARIACIÓN DE LA PRIMERA SOLUCIÓN
Esta solución utiliza direccionamiento directo y expresiones con etiquetas.

               LDI             R16,NUMERO
               LDI             R17,MAYUSC
               LDI             R18,MINUSC
               STS             BLOQUE+0,R16
               STS             BLOQUE+1,R17
               STS             BLOQUE+2,R18
               STS             BLOQUE+3,R16
               STS             BLOQUE+4,R17
               STS             BLOQUE+5,R18
               STS             BLOQUE+6,R16
               STS             BLOQUE+7,R17
               STS             BLOQUE+8,R18
               STS             BLOQUE+9,R16
               STS             BLOQUE+10,R17
               STS             BLOQUE+11,R18

El Módulo Fuente contenido en el archivo .ASM es el que muestra a continuación:

; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y EXPRESIONES CON ETIQUETAS
;
.DEVICE      ATMEGA164P
;
.EQU         NLOC   = 12
.EQU         NUMERO = 0x31
.EQU         MAYUSC = 0x41
.EQU         MINUSC = 0x61
;
.DSEG
.ORG         0x100
BLOQUE:      .BYTE NLOC
;
.CSEG
             LDI           R16,NUMERO
             LDI           R17,MAYUSC
             LDI           R18,MINUSC
             STS           BLOQUE+0,R16
             STS           BLOQUE+1,R17
             STS           BLOQUE+2,R18
             STS           BLOQUE+3,R16
             STS           BLOQUE+4,R17
             STS           BLOQUE+5,R18
             STS           BLOQUE+6,R16
             STS           BLOQUE+7,R17
             STS           BLOQUE+8,R18
             STS           BLOQUE+9,R16
             STS           BLOQUE+10,R17
             STS           BLOQUE+11,R18
;
FIN:         RJMP          FIN
;
.EXIT ; FIN DEL MODULO FUENTE



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 6

Para asignar los valores numéricos a las etiquetas, se utiliza la Directiva de
EQUIVALENCIA (.EQU)

Para asignar los valores de las direcciones de la SRAM a las etiquetas, se utilizan: la
Directiva de Reservación de zonas de memoria SRAM (.BYTE) y la Directiva de
Reubicación (.ORG), que permite establecer el origen del bloque de localidades de la
SRAM. Esta misma directiva, sirve para reubicar los programas cuando es necesario.

De esta manera se facilita al programador la actualización de los programas, porque es
más comprensible el algoritmo implementado y es más rápido de modificarlo, como se
ve en el siguiente Módulo Fuente.


; PROGRAMA PARA LLENAR LAS QUINCE LOCALIDADES A PARTIR DE LA 200 HEXADECIMAL
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 0
; DE LA LETRA Z MAYÚSCULA Y DE LA LETRA t MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y EXPRESIONES CON ETIQUETAS
;
.DEVICE      ATMEGA164P
;
.EQU         NLOC   = 15
.EQU         NUMERO = '0'
.EQU         MAYUSC = 'Z'
.EQU         MINUSC = 't'
;
.DSEG
.ORG         0x200
BLOQUE:      .BYTE NLOC
;
.CSEG
             LDI          R16,NUMERO
             LDI          R17,MAYUSC
             LDI          R18,MINUSC
             STS          BLOQUE+0,R16
             STS          BLOQUE+1,R17
             STS          BLOQUE+2,R18
             STS          BLOQUE+3,R16
             STS          BLOQUE+4,R17
             STS          BLOQUE+5,R18
             STS          BLOQUE+6,R16
             STS          BLOQUE+7,R17
             STS          BLOQUE+8,R18
             STS          BLOQUE+9,R16
             STS          BLOQUE+10,R17
             STS          BLOQUE+11,R18
             STS          BLOQUE+12,R16
             STS          BLOQUE+13,R17
             STS          BLOQUE+14,R18
;
FIN:         RJMP         FIN
;
.EXIT ; FIN DEL MODULO FUENTE



En esta solución, se ha incorporado la ayuda del ensamblador para obtener los códigos
ASCII de los símbolos, únicamente colocando al símbolo entre apóstrofes.

También, se ha utilizado de Directiva de Reubicación (.ORG)



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 7


SEGUNDA SOLUCIÓN
La solución utiliza direccionamiento indirecto, incrementos del puntero y etiquetas. El
puntero que se utiliza es el puntero X, que está conformado por los Registros R26 y
R27. Por lo que hace falta inicializar el puntero antes de utilizarlo.

               LDI             R16,NUMERO
               LDI             R17,MAYUSC
               LDI             R18,MINUSC
               LDI             R26,LOW(BLOQUE)
               LDI             R27,HIGH(BLOQUE)
               ST              X,R16
               INC             R26
               ST              X,R17
               INC             R26
               ST              X,R18
               INC             R26
               ST              X,R16
               INC             R26
               ST              X,R17
               INC             R26
               ST              X,R18
               INC             R26
               ST              X,R16
               INC             R26
               ST              X,R17
               INC             R26
               ST              X,R18
               INC             R26
               ST              X,R16
               INC             R26
               ST              X,R17
               INC             R26
               ST              X,R18
               INC             R26

Esta solución 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 que
utiliza direccionamiento inmediato es el resultado de las funciones LOW y HIGH, que
posee este ensamblador, para separar un número de 16 bits en dos bytes el menos
significativo con LOW y el más significativo con HIGH.




Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 8


TERCERA SOLUCIÓN
Esta solución utiliza direccionamiento indirecto con post incremento, funciones y
etiquetas

                LDI            R16,NUMERO
                LDI            R17,MAYUSC
                LDI            R18,MINUSC
                LDI            R26,LOW(BLOQUE)
                LDI            R27,HIGH(BLOQUE)
                ST             X+,R16
                ST             X+,R17
                ST             X+,R18
                ST             X+,R16
                ST             X+,R17
                ST             X+,R18
                ST             X+,R16
                ST             X+,R17
                ST             X+,R18
                ST             X+,R16
                ST             X+,R17
                ST             X+,R18

La ventaja de esta solución, radica en que el código de máquina de todas las
instrucciones que llenan las localidades de la SRAM, es el mismo.
                      ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
                      ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
                      ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
                      ; ALTERNADAMENTE.
                      ; LA SOLUCIÓN 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         0x100
000100                BLOQUE: .BYTE NLOC
                      ;
                      .CSEG
000000   e301                      LDI          R16,NUMERO
000001   e411                      LDI          R17,MAYUSC
000002   e621                      LDI          R18,MINUSC
000003   e0a0                      LDI          R26,LOW(BLOQUE)
000004   e0b1                      LDI          R27,HIGH(BLOQUE)
000005   930d                      ST           X+,R16
                 Códigos de Máquina
000006   931d          iguales
                                   ST           X+,R17
000007   932d                      ST           X+,R18
000008   930d   Códigos de Máquina ST           X+,R16
000009   931d         iguales      ST           X+,R17
00000a   932d                      ST           X+,R18
00000b   930d   Códigos de Máquina ST           X+,R16
00000c   931d         iguales      ST           X+,R17
00000d   932d                      ST           X+,R18



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 9

00000e 930d                       ST           X+,R16
                Códigos de Máquina
00000f 931d                        ST          X+,R17
                      iguales
000010 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 solución
eficiente mediante el uso de LAZOS DE REPETICIÓN

CUARTA SOLUCIÓN
Esta solución utiliza direccionamiento indirecto con post incremento, expresiones con
funciones, etiquetas y un lazo de repetición controlado por el valor del puntero

                LDI               R16,NUMERO
                LDI               R17,MAYUSC
                LDI               R18,MINUSC
                LDI               R26,LOW(BLOQUE)
                LDI               R27,HIGH(BLOQUE)
REPITA:         ST                X+,R16
                ST                X+,R17
                ST                X+,R18
                CPI               R26,LOW(BLOQUE)+11
                BRNE              REPITA

Resultado del ensamblado de este Módulo Fuente:

                     ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
                     ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
                     ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
                     ; ALTERNADAMENTE.
                     ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
                     ; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y
                     ; UN LAZO DE REPETICIÓN CONTROLADO POR EL VALOR DEL PUNTERO
                     ;
                     .DEVICE ATMEGA164P
                     ;
                     .EQU     NLOC   = 12
                     .EQU     NUMERO = '1'
                     .EQU     MAYUSC = 'A'
                     .EQU     MINUSC = 'a'
                     ;
                     .DSEG
                     .ORG     0x100
000100               BLOQUE: .BYTE NLOC
                     ;
                     .CSEG
000000   e301                 LDI          R16,NUMERO
000001   e411                 LDI          R17,MAYUSC
000002   e621                 LDI          R18,MINUSC
000003   e0a0                 LDI          R26,LOW(BLOQUE)
000004   e0b1                 LDI          R27,HIGH(BLOQUE)
000005   930d        REPITA: ST            X+,R16
000006   931d                 ST           X+,R17
000007   932d                 ST           X+,R18
000008   30ab                 CPI          R26,LOW(BLOQUE)+11
000009   f7d9                 BRNE         REPITA
                     ;



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 10

00000a cfff           FIN:     RJMP            FIN
                      ;


Lamentablemente esta solución no cumple con lo solicitado, “Llenar doce localidades”;
porque, el programa sigue llenando más localidades debido a una falla en el control del
lazo de repetición tal como se puede ver en la siguiente prueba de escritorio.

  R16 R17 R18 R26              R27 Localidades de la SRAM Comparación Salto
  0x31   0x41   0x61    0x00   0x01         (0x0100) = 0x31
                        0x01   0x01
                                            (0x0101) = 0x41
                        0x02   0x01
                                            (0x0102) = 0x61
                        0x03   0x01                                   0x03<>0x0B        Si
                                            (0x0103) = 0x31
                        0x04   0x01
                                            (0x0104) = 0x41
                        0x05   0x01
                                            (0x0105) = 0x61
                        0x06   0x01                                   0x06<>0x0B        Si
                                            (0x0106) = 0x31
                        0x07   0x01
                                            (0x0107) = 0x41
                        0x08   0x01
                                            (0x0108) = 0x61
                        0x09   0x01                                   0x09<>0x0B        Si
                                            (0x0109) = 0x31
                        0x0A   0x01
                                            (0x010A) = 0x41
                        0x0B   0x01
                                            (0x010B) = 0x61
                        0x0C   0x01                                   0x0C<>0x0B        Si
                                            (0x010C) = 0x31
                        0x0D   0x01
                                            (0x010D) = 0x41
                        0x0E   0x01
                                            (0x010E) = 0x61
                        0x0F   0x01                                   0x0F<>0x0B        Si
                                            (0x010F) = 0x31
                        0x10   0x01
                                            (0x0110) = 0x41
                        0x11   0x01
                                            (0x0111) = 0x61
                        0x12   0x01                                   0x12<>0x0B        Si


La solución es modificar la instrucción de comparación por:

                CPI            R26,LOW(BLOQUE)+12

O, mejor:

                CPI            R26,LOW(BLOQUE)+NLOC




Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 11


QUINTA SOLUCIÓN
Esta solución utiliza direccionamiento indirecto con post incremento, expresiones con
funciones, etiquetas y un lazo de repetición controlado por un contador descendente.

               LDI             R16,NUMERO
               LDI             R17,MAYUSC
               LDI             R18,MINUSC
               LDI             R19,NLOC/3
               LDI             R26,LOW(BLOQUE)
               LDI             R27,HIGH(BLOQUE)
REPITA:        ST              X+,R16
               ST              X+,R17
               ST              X+,R18
               DEC             R19
               BRNE            REPITA

VARIACIÓN A LA QUINTA SOLUCIÓN
Esta variación permite visualizar mejor el algoritmo, cuando al registro contador se
etiqueta precisamente como “CONTADOR”, mediante la Directiva que Define un
Nombre Simbólico para un Registro (.DEF)

; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y
; UN LAZO DE REPETICIÓN 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         0x100
BLOQUE:      .BYTE NLOC
;
.CSEG
             LDI          R16,NUMERO
             LDI          R17,MAYUSC
             LDI          R18,MINUSC
             LDI          CONTADOR,NLOC/3
             LDI          R26,LOW(BLOQUE)
             LDI          R27,HIGH(BLOQUE)
REPITA:      ST           X+,R16
             ST           X+,R17
             ST           X+,R18
             DEC          CONTADOR
             BRNE         REPITA
;
FIN:         RJMP         FIN



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 12

;
.EXIT ; FIN DEL MODULO FUENTE


La ventaja de elaborar lazos de repetición bajo este esquema, es que se pueden observar
en forma clara las tres partes que conforman el lazo de repetición:

    •   La inicialización de los registros, del contador de repeticiones y del o de los
        punteros, que intervienen en el lazo.
    •   El cuerpo del lazo de repetición, que realiza la tarea repetitiva, y
    •   La disminución del contador y el correspondiente chequeo para determinar el
        final de las repeticiones, mediante la instrucción de bifurcación.

A continuación se muestra el Módulo Fuente en el que se ha unido la solución a los dos
problemas que se resolvieron antes, en forma individual.

; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; TAMBIÉN, DEBE LLENAR QUINCE LOCALIDADES A PARTIR DE 200 HEXADECIMAL
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 0
; DE LA LETRA Z MAYÚSCULA Y DE LA LETRA t MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y
; DOS LAZOS DE REPETICIÓN 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         0x100
BLQ1:        .BYTE NLOC1
.ORG         0x200
BLQ2:        .BYTE NLOC2
;
.CSEG
             LDI          R16,NUMERO1
             LDI          R17,MAYUSC1
             LDI          R18,MINUSC1
             LDI          CONTADOR,NLOC1/3
             LDI          R26,LOW(BLQ1)
             LDI          R27,HIGH(BLQ1)
LAZO1:       ST           X+,R16
             ST           X+,R17
             ST           X+,R18
             DEC          CONTADOR
             BRNE         LAZO1
;
             LDI          R16,NUMERO2
             LDI          R17,MAYUSC2
             LDI          R18,MINUSC2



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 13

               LDI             CONTADOR,NLOC2/3
               LDI             R26,LOW(BLQ2)
               LDI             R27,HIGH(BLQ2)
LAZO2:         ST              X+,R16
               ST              X+,R17
               ST              X+,R18
               DEC             CONTADOR
               BRNE            LAZO2
;
FIN:         RJMP         FIN
;
.EXIT ; FIN DEL MODULO FUENTE


Esta última solución al problema, permite al programador crear sus propias
MACROINSTRUCCIONES, que le faciliten aún más la elaboración de los programas.


INCLUSIÓN DE MACROINSTRUCCIONES EN LA
QUINTA SOLUCIÓN
La creación de Macroinstrucciones consiste en agrupar un bloque de instrucciones que
forman la nueva instrucción. La condición que deben cumplir es que se diferencien
únicamente en ciertos operandos como registros, localidades o valores entre las
instrucciones de los diferentes bloques.

Para construir la nueva instrucción: Se empieza por la Directiva de Encabezado de las
Macroinstrucciones (:MACRO), donde se define el nombre que le corresponde a la
nueva instrucción. A continuación sigue el bloque de instrucciones, donde los elementos
que cambian son reemplazados por @0, @1, @2 … hasta @9 y que constituyen los
parámetros que se especifican cuando se invoca a la nueva instrucción, dentro del
programa. Se termina la construcción de la nueva instrucción con la Directiva de
Finalización de las Macroinstrucciones (:ENDMACRO)

La invocación de la nueva instrucción se realiza utilizando el nombre que se estableció
en la construcción, seguido de los parámetros separados por comas y en el orden que se
los numeró.

A continuación esta ilustrado la creación de la Macroinstrucción para inicializar los
registros que se utilizan en los lazos de repetición de la solución, a la que se le nombra
como “INICIAR”.

.LISTMAC
.MACRO   INICIAR
         LDI                   R16,@0
         LDI                   R17,@1
         LDI                   R18,@2
         LDI                   CONTADOR,@3/2
         LDI                   R26,LOW(@4)
         LDI                   R27,HIGH(@4)
.ENDMACRO
;
.CSEG



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 14

                INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
LAZO1:          ST        X+,R16
                ST        X+,R17
                ST        X+,R18
                DEC       CONTADOR
                BRNE      LAZO1
;
                INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
LAZO2:          ST        X+,R16
                ST        X+,R17
                ST        X+,R18
                DEC       CONTADOR
                BRNE      LAZO2

El uso de Macroinstrucciones no ahorra código de máquina, como se puede ver en el
resultado del ensamblado, que a continuación 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        0x100
000100              BLQ1:       .BYTE NLOC1
                    .ORG        0x200
000200              BLQ2:       .BYTE NLOC2
                    ;
                    .LISTMAC
                    .MACRO      INICIAR
                                LDI            R16,@0
                                LDI            R17,@1
                                LDI            R18,@2
                                LDI            CONTADOR,@3/2
                                LDI            R26,LOW(@4)
                                LDI            R27,HIGH(@4)
                    .ENDMACRO
                    ;
                    .CSEG
                   +
000000   e301      +LDI    R16 , NUMERO1
000001   e411      +LDI    R17 , MAYUSC1
000002   e621      +LDI    R18 , MINUSC1
000003   e036      +LDI    CONTADOR , NLOC1 / 2
000004   e0a0      +LDI    R26 , LOW ( BLQ1 )
000005   e0b1      +LDI    R27 , HIGH ( BLQ1 )
                                  INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
000006   930d        LAZO1:       ST           X+,R16
000007   931d                     ST           X+,R17
                Códigos de Máquina
000008   932d                     ST           X+,R18
                      iguales
000009   953a                     DEC          CONTADOR
00000a   f7d9                     BRNE         LAZO1
                     ;
                   +



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 15

00000b   e300      +LDI     R16 , NUMERO2
00000c   e51a      +LDI     R17 , MAYUSC2
00000d   e724      +LDI     R18 , MINUSC2
00000e   e037      +LDI     CONTADOR , NLOC2 / 2
00000f   e0a0      +LDI     R26 , LOW ( BLQ2 )
000010   e0b2      +LDI     R27 , HIGH ( BLQ2 )
                                   INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
000011   930d         LAZO2:       ST           X+,R16
000012   931d                      ST           X+,R17
000013   932d   Códigos de Máquina ST           X+,R18
                      iguales
000014   953a                      DEC          CONTADOR
000015   f7d9                      BRNE         LAZO2
                      ;
000016 cfff           FIN:         RJMP         FIN
                      ;                     ;


Analizando el listado anterior, se puede observar que las instrucciones de los lazos de
repetición tienen el mismo código de máquina, lo que permite convertirles en
Subrutinas, como lo que si indica a continuación:

                INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
                CALL      LAZO
                INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
                CALL      LAZO

INCLUSIÓN DE MACROINSTRUCCIONES                                                            Y
SUBRUTINAS EN LA QUINTA SOLUCIÓN
Cuando se utilizan Subrutinas es necesario inicializar el Puntero del Stack (SP) que
generalmente se lo ubica al final de la SRAM. Además se ha eliminado la directiva que
lista 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,@0
                              LDI          R17,@1
                              LDI          R18,@2
                              LDI          CONTADOR,@3/2
                              LDI          R26,LOW(@4)
                              LDI          R27,HIGH(@4)
                    .ENDMACRO
                    ;



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 16

                     .CSEG
000000   ef0f                  LDI             R16,LOW(0x04FF)
000001   9300 005e             STS             $5E,R16                  Inicialización del
000003   e004                  LDI             R16,HIGH(0x04FF)           Stack Pointer
000004   9300 005d             STS             $5D,R16
                     ;
000006   e301
000007   e411
000008   e621
000009   e036
00000a   e0a0
00000b   e0b1                  INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
00000c   940e 0017             CALL         LAZO
                     ;
00000e   e300
00000f   e51a
000010   e724
000011   e037
000012   e0a0
000013   e0b2                  INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
000014   940e 0017             CALL         LAZO
                     ;
000016 cfff          FIN:      RJMP            FIN
                     ;
000017   930d        LAZO:     ST              X+,R16
000018   931d                  ST              X+,R17
000019   932d                  ST              X+,R18
00001a   953a                  DEC             CONTADOR
00001b   f7d9                  BRNE            LAZO
00001c   9508                  RET
                     ;


INCLUSIÓN DEL ARCHIVO DE DEFINICIONES
PROPORCIONADO POR EL FABRICANTE
El fabricante proporciona el archivo “m164pdef.inc”, para facilitar la elaboración de los
programas; a fin de, reemplazar los valores numéricos de las direcciones de memoria
por las Etiquetas que se utilizan en las hojas de datos. En el siguiente listado se ha
reemplazado la definición del dispositivo (.DEVICE ATMEGA164P) por la inclusión
del archivo de definiciones y se han utilizado las directivas .NOLIST y .LIST para que
en el archivo de resultado del ensamblado no se listen las líneas que contiene el archivo
de 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            0x200
BLQ2:           .BYTE NLOC2



Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 17

;
;.LISTMAC
.MACRO INICIAR
              LDI          R16,@0
              LDI          R17,@1
              LDI          R18,@2
              LDI          CONTADOR,@3/2
              LDI          R26,LOW(@4)
              LDI          R27,HIGH(@4)
.ENDMACRO
;
.CSEG
              LDI          R16,LOW(RAMEND)        Etiquetas que se
              OUT          SPH,R16            encuentran en el archivo
              LDI          R16,HIGH(RAMEND)       de definiciones
              OUT          SPL,R16
;
              INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
              CALL         LAZO
;
              INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
              CALL         LAZO
;
FIN:          RJMP         FIN
;
LAZO:         ST           X+,R16
              ST           X+,R17
              ST           X+,R18
              DEC          CONTADOR
              BRNE         LAZO
              RET
;
.EXIT ; FIN DEL MODULO FUENTE

La utilización de este archivo de definiciones permite escoger rápidamente el
microcontrolador con el cual se va ha trabajar, grabado el código de máquina que
resulta del proceso de ensamblado. Así por ejemplo, el último programa en una ocasión
se desea utilizarlo con el ATmega164P y en otra con el ATmega16; una de las
diferencias entre estos microcontroladores es la dirección final de la SRAM. en el
primer caso esta dirección es 0x04FF y en el segundo caso es 0x045F. Únicamente
cambiando el archivo de definiciones “m164pdef.inc” por “m16def.inc” y sin modificar
ninguna otra línea, se obtiene para cada caso los códigos de máquina correspondientes.

Para el ATmega164P

:020000020000FC
:100000000FEF0EBF04E00DBF01E311E421E636E07F
:10001000A0E0B1E00E94150000E31AE524E737E014
:10002000A0E0B2E00E941500FFCF0D931D932D9329
:060030003A95D9F708958E
:00000001FF                         Códigos de Máquina
                                        diferentes, por el cambio de
                                             microcontrolador
Para el ATmega16

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




Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

Más contenido relacionado

La actualidad más candente (20)

Ejercicio 08 CAD
Ejercicio 08 CADEjercicio 08 CAD
Ejercicio 08 CAD
 
Ejercicios 06 subrutinas con LCD
Ejercicios 06 subrutinas con LCDEjercicios 06 subrutinas con LCD
Ejercicios 06 subrutinas con LCD
 
12 Pórticos de los Atmega
12 Pórticos de los Atmega12 Pórticos de los Atmega
12 Pórticos de los Atmega
 
Ejercicio 05 Subrutinas
Ejercicio 05 SubrutinasEjercicio 05 Subrutinas
Ejercicio 05 Subrutinas
 
Ejercicios 07 interrupciones
Ejercicios 07 interrupcionesEjercicios 07 interrupciones
Ejercicios 07 interrupciones
 
Ejercicio 07 Timers
Ejercicio 07 TimersEjercicio 07 Timers
Ejercicio 07 Timers
 
Display de cristal líquido grágico GLCD
Display de cristal líquido grágico GLCDDisplay de cristal líquido grágico GLCD
Display de cristal líquido grágico GLCD
 
Ejercicio 02 Tablas
Ejercicio 02 TablasEjercicio 02 Tablas
Ejercicio 02 Tablas
 
17 Interrupciones
17 Interrupciones17 Interrupciones
17 Interrupciones
 
19 Conversor A/D
19 Conversor A/D19 Conversor A/D
19 Conversor A/D
 
Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877
 
Conversor ADC
Conversor ADCConversor ADC
Conversor ADC
 
Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887
 
Clase Timer 1
Clase Timer 1Clase Timer 1
Clase Timer 1
 
Clase USART
Clase USARTClase USART
Clase USART
 
Decodificador dtmf mt8870
Decodificador dtmf mt8870Decodificador dtmf mt8870
Decodificador dtmf mt8870
 
Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887
 
Timer0 PIC16F84A
Timer0 PIC16F84ATimer0 PIC16F84A
Timer0 PIC16F84A
 
Curso de microcontroladores capitulo 11
Curso de microcontroladores capitulo 11Curso de microcontroladores capitulo 11
Curso de microcontroladores capitulo 11
 
Circuitos combinacionales
Circuitos combinacionalesCircuitos combinacionales
Circuitos combinacionales
 

Destacado

Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASMdave
 
Rutinas de calculo de volumen
Rutinas de calculo de volumenRutinas de calculo de volumen
Rutinas de calculo de volumenJuan StraDa
 
Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónJaime E. Velarde
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PICSohar Carr
 
Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2Luis Zurita
 

Destacado (7)

Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASM
 
Rutinas de calculo de volumen
Rutinas de calculo de volumenRutinas de calculo de volumen
Rutinas de calculo de volumen
 
Diapos de pic
Diapos de picDiapos de pic
Diapos de pic
 
El PIC16F84
El PIC16F84El PIC16F84
El PIC16F84
 
Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuación
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PIC
 
Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2
 

Similar a Ejercicio 01 Llenar

⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)Victor Asanza
 
Micc final sept05_2009
Micc final sept05_2009Micc final sept05_2009
Micc final sept05_2009Jair BG
 
Micc final feb14_2009
Micc final feb14_2009Micc final feb14_2009
Micc final feb14_2009Jair BG
 
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)Victor Asanza
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_solucJair BG
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_solucJair BG
 
Fundamento de computadores- Motorola 68000
Fundamento de computadores- Motorola 68000Fundamento de computadores- Motorola 68000
Fundamento de computadores- Motorola 68000Alberto Gonzalez Isorna
 
El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC SANTIAGO PABLO ALBERTO
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadoresupc
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadoresupc
 
upc algoritmos 02
upc algoritmos 02upc algoritmos 02
upc algoritmos 02upc
 
Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Hamiltonn Casallas
 

Similar a Ejercicio 01 Llenar (20)

⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 1)
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Conferencia n°7
Conferencia n°7Conferencia n°7
Conferencia n°7
 
Micc final sept05_2009
Micc final sept05_2009Micc final sept05_2009
Micc final sept05_2009
 
Micc final feb14_2009
Micc final feb14_2009Micc final feb14_2009
Micc final feb14_2009
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 1er Parcial (2020 PAO 2)
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_soluc
 
Micc final feb14_2009_soluc
Micc final feb14_2009_solucMicc final feb14_2009_soluc
Micc final feb14_2009_soluc
 
Fundamento de computadores- Motorola 68000
Fundamento de computadores- Motorola 68000Fundamento de computadores- Motorola 68000
Fundamento de computadores- Motorola 68000
 
Intel
IntelIntel
Intel
 
El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC
 
Clase 2 redes
Clase 2 redesClase 2 redes
Clase 2 redes
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 
upc algoritmos 02
upc algoritmos 02upc algoritmos 02
upc algoritmos 02
 
Intel
IntelIntel
Intel
 
Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12
 

Más de Jaime E. Velarde

16 Instrucciones de Subrutinas
16 Instrucciones de Subrutinas16 Instrucciones de Subrutinas
16 Instrucciones de SubrutinasJaime E. Velarde
 
15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y Logicas15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y LogicasJaime E. Velarde
 
13 Instrucciones de manejo de bits
13  Instrucciones de manejo de bits13  Instrucciones de manejo de bits
13 Instrucciones de manejo de bitsJaime E. Velarde
 
11 Instrucciones de Salto de los Atmega
11  Instrucciones de Salto  de los Atmega11  Instrucciones de Salto  de los Atmega
11 Instrucciones de Salto de los AtmegaJaime E. Velarde
 
10 Instrucciones de Transferencia
10  Instrucciones  de Transferencia10  Instrucciones  de Transferencia
10 Instrucciones de TransferenciaJaime E. Velarde
 
09 Conjunto de Instrucciones de los Atmega
09 Conjunto de Instrucciones  de los Atmega09 Conjunto de Instrucciones  de los Atmega
09 Conjunto de Instrucciones de los AtmegaJaime E. Velarde
 
08 Memoria de los Atmega164P
08 Memoria de los Atmega164P08 Memoria de los Atmega164P
08 Memoria de los Atmega164PJaime E. Velarde
 

Más de Jaime E. Velarde (11)

20 Portico Serial
20 Portico Serial20 Portico Serial
20 Portico Serial
 
18 Timers
18 Timers18 Timers
18 Timers
 
16 Instrucciones de Subrutinas
16 Instrucciones de Subrutinas16 Instrucciones de Subrutinas
16 Instrucciones de Subrutinas
 
15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y Logicas15 Instrucciones Aritmeticas y Logicas
15 Instrucciones Aritmeticas y Logicas
 
13 Instrucciones de manejo de bits
13  Instrucciones de manejo de bits13  Instrucciones de manejo de bits
13 Instrucciones de manejo de bits
 
14 Fusibles Programables
14 Fusibles Programables14 Fusibles Programables
14 Fusibles Programables
 
11 Instrucciones de Salto de los Atmega
11  Instrucciones de Salto  de los Atmega11  Instrucciones de Salto  de los Atmega
11 Instrucciones de Salto de los Atmega
 
10 Instrucciones de Transferencia
10  Instrucciones  de Transferencia10  Instrucciones  de Transferencia
10 Instrucciones de Transferencia
 
09 Conjunto de Instrucciones de los Atmega
09 Conjunto de Instrucciones  de los Atmega09 Conjunto de Instrucciones  de los Atmega
09 Conjunto de Instrucciones de los Atmega
 
08 Memoria de los Atmega164P
08 Memoria de los Atmega164P08 Memoria de los Atmega164P
08 Memoria de los Atmega164P
 
07 Familia Atmega
07 Familia Atmega07 Familia Atmega
07 Familia Atmega
 

Último

Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicaGianninaValeskaContr
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfEDILIAGAMBOA
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxEribertoPerezRamirez
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 

Último (20)

Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básica
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdf
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 

Ejercicio 01 Llenar

  • 1. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 1 EJERCICIO PARA PRACTICAR EL USO DE LAS INSTRUCCIONES DE TRANSFERENCIA Desarrollar un programa para el microcontrolador ATmega164P, que permita llenar las doce primeras localidades de la memoria de datos, con los códigos ASCII del número 1, de la letra A mayúscula y de la letra a minúscula 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 el ASCII de la a: PRIMERA SOLUCIÓN Esta solución utiliza direccionamiento directo y valores numéricos hexadecimales. LDI R16,0x31 LDI R17,0x41 LDI R18,0x61 STS 0x100,R16 STS 0x101,R17 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 2. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 2 STS 0x102,R18 STS 0x103,R16 STS 0x104,R17 STS 0x105,R18 STS 0x106,R16 STS 0x107,R17 STS 0x108,R18 STS 0x109,R16 STS 0x10A,R17 STS 0x10B,R18 El Módulo Fuente contenido en el archivo .ASM es el que muestra a continuación: ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1, ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO ; Y VALORES NUMÉRICOS HEXADECIMALES ; .DEVICE ATMEGA164P ; .CSEG LDI R16,0x31 LDI R17,0x41 LDI R18,0x61 STS 0x100,R16 STS 0x101,R17 STS 0x102,R18 STS 0x103,R16 STS 0x104,R17 STS 0x105,R18 STS 0x106,R16 STS 0x107,R17 STS 0x108,R18 STS 0x109,R16 STS 0x10A,R17 STS 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_SettingsAdministradorMis_documentos AVRfilesLlenarATmega164Llenar01Llenar01.asm Sun Mar 22 10:35:41 2009 ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1, ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA A MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO ; Y VALORES NUMÉRICOS HEXADECIMALES ; .DEVICE ATMEGA164P ; .CSEG 000000 e301 LDI R16,0x31 000001 e411 LDI R17,0x41 000002 e621 LDI R18,0x61 000003 9300 0100 STS 0x100,R16 000005 9310 0101 STS 0x101,R17 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 3. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 3 000007 9320 0102 STS 0x102,R18 000009 9300 0103 STS 0x103,R16 00000b 9310 0104 STS 0x104,R17 00000d 9320 0105 STS 0x105,R18 00000f 9300 0106 STS 0x106,R16 000011 9310 0107 STS 0x107,R17 000013 9320 0108 STS 0x108,R18 000015 9300 0109 STS 0x109,R16 000017 9310 010a STS 0x10A,R17 000019 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 are counted 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 : 0 r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0 r13: 0 r14: 0 r15: 0 r16: 5 r17: 5 r18: 5 r19: 0 r20: 0 r21: 0 r22: 0 r23: 0 r24: 0 r25: 0 r26: 0 r27: 0 r28: 0 r29: 0 r30: 0 r31: 0 x : 0 y : 0 z : 0 Registers used: 3 out of 35 (8.6%) ATMEGA164P instruction use summary: adc : 0 add : 0 adiw : 0 and : 0 andi : 0 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0 brcc : 0 brcs : 0 break : 0 breq : 0 brge : 0 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 0 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 brvs : 0 bset : 0 bst : 0 call : 0 cbi : 0 cbr : 0 clc : 0 clh : 0 cli : 0 cln : 0 clr : 0 cls : 0 clt : 0 clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 0 cpse : 0 dec : 0 eicall: 0 eijmp : 0 elpm : 0 eor : 0 fmul : 0 fmuls : 0 fmulsu: 0 icall : 0 ijmp : 0 in : 0 inc : 0 jmp : 0 ld : 0 ldd : 0 ldi : 3 lds : 0 lpm : 0 lsl : 0 lsr : 0 mov : 0 movw : 0 mul : 0 muls : 0 mulsu : 0 neg : 0 nop : 0 or : 0 ori : 0 out : 0 pop : 0 push : 0 rcall : 0 ret : 0 reti : 0 rjmp : 1 rol : 0 ror : 0 sbc : 0 sbci : 0 sbi : 0 sbic : 0 sbis : 0 sbiw : 0 sbr : 0 sbrc : 0 sbrs : 0 sec : 0 seh : 0 sei : 0 sen : 0 ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0 spm : 0 st : 0 std : 0 sts : 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 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 4. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 4 El código de máquina contenido en el archivo .HEX es: :020000020000FC :1000000001E311E421E60093000110930101209324 :100010000201009303011093040120930501009352 :100020000601109307012093080100930901109322 :080030000A0120930B01FFCF30 :00000001FF VARIACIÓN DE LA PRIMERA SOLUCIÓN Esta solución utiliza direccionamiento directo y expresiones con valores numéricos. LDI R16,0x31 LDI R17,0x41 LDI R18,0x61 STS 0x100+0,R16 STS 0x100+1,R17 STS 0x100+2,R18 STS 0x100+3,R16 STS 0x100+4,R17 STS 0x100+5,R18 STS 0x100+6,R16 STS 0x100+7,R17 STS 0x100+8,R18 STS 0x100+9,R16 STS 0x100+10,R17 STS 0x100+11,R18 VARIACIÓN DE LA PRIMERA SOLUCIÓN, PERO QUE NO CUMPLE LO SOLICITADO Esta solución utiliza también direccionamiento directo y expresiones con valores numéricos. ATENCIÓN: esta solución llena otras localidades, con otros valores. LDI R16,31 LDI R17,41 LDI R18,61 STS 100+0,R16 STS 100+1,R17 STS 100+2,R18 STS 100+3,R16 STS 100+4,R17 STS 100+5,R18 STS 100+6,R16 STS 100+7,R17 STS 100+8,R18 STS 100+9,R16 STS 100+10,R17 STS 100+11,R18 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 5. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 5 NUEVA VARIACIÓN DE LA PRIMERA SOLUCIÓN Esta solución utiliza direccionamiento directo y expresiones con etiquetas. LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC STS BLOQUE+0,R16 STS BLOQUE+1,R17 STS BLOQUE+2,R18 STS BLOQUE+3,R16 STS BLOQUE+4,R17 STS BLOQUE+5,R18 STS BLOQUE+6,R16 STS BLOQUE+7,R17 STS BLOQUE+8,R18 STS BLOQUE+9,R16 STS BLOQUE+10,R17 STS BLOQUE+11,R18 El Módulo Fuente contenido en el archivo .ASM es el que muestra a continuación: ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1 ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO ; Y EXPRESIONES CON ETIQUETAS ; .DEVICE ATMEGA164P ; .EQU NLOC = 12 .EQU NUMERO = 0x31 .EQU MAYUSC = 0x41 .EQU MINUSC = 0x61 ; .DSEG .ORG 0x100 BLOQUE: .BYTE NLOC ; .CSEG LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC STS BLOQUE+0,R16 STS BLOQUE+1,R17 STS BLOQUE+2,R18 STS BLOQUE+3,R16 STS BLOQUE+4,R17 STS BLOQUE+5,R18 STS BLOQUE+6,R16 STS BLOQUE+7,R17 STS BLOQUE+8,R18 STS BLOQUE+9,R16 STS BLOQUE+10,R17 STS BLOQUE+11,R18 ; FIN: RJMP FIN ; .EXIT ; FIN DEL MODULO FUENTE Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 6. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 6 Para asignar los valores numéricos a las etiquetas, se utiliza la Directiva de EQUIVALENCIA (.EQU) Para asignar los valores de las direcciones de la SRAM a las etiquetas, se utilizan: la Directiva de Reservación de zonas de memoria SRAM (.BYTE) y la Directiva de Reubicación (.ORG), que permite establecer el origen del bloque de localidades de la SRAM. Esta misma directiva, sirve para reubicar los programas cuando es necesario. De esta manera se facilita al programador la actualización de los programas, porque es más comprensible el algoritmo implementado y es más rápido de modificarlo, como se ve en el siguiente Módulo Fuente. ; PROGRAMA PARA LLENAR LAS QUINCE LOCALIDADES A PARTIR DE LA 200 HEXADECIMAL ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 0 ; DE LA LETRA Z MAYÚSCULA Y DE LA LETRA t MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO ; Y EXPRESIONES CON ETIQUETAS ; .DEVICE ATMEGA164P ; .EQU NLOC = 15 .EQU NUMERO = '0' .EQU MAYUSC = 'Z' .EQU MINUSC = 't' ; .DSEG .ORG 0x200 BLOQUE: .BYTE NLOC ; .CSEG LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC STS BLOQUE+0,R16 STS BLOQUE+1,R17 STS BLOQUE+2,R18 STS BLOQUE+3,R16 STS BLOQUE+4,R17 STS BLOQUE+5,R18 STS BLOQUE+6,R16 STS BLOQUE+7,R17 STS BLOQUE+8,R18 STS BLOQUE+9,R16 STS BLOQUE+10,R17 STS BLOQUE+11,R18 STS BLOQUE+12,R16 STS BLOQUE+13,R17 STS BLOQUE+14,R18 ; FIN: RJMP FIN ; .EXIT ; FIN DEL MODULO FUENTE En esta solución, se ha incorporado la ayuda del ensamblador para obtener los códigos ASCII de los símbolos, únicamente colocando al símbolo entre apóstrofes. También, se ha utilizado de Directiva de Reubicación (.ORG) Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 7. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 7 SEGUNDA SOLUCIÓN La solución utiliza direccionamiento indirecto, incrementos del puntero y etiquetas. El puntero que se utiliza es el puntero X, que está conformado por los Registros R26 y R27. Por lo que hace falta inicializar el puntero antes de utilizarlo. LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC LDI R26,LOW(BLOQUE) LDI R27,HIGH(BLOQUE) ST X,R16 INC R26 ST X,R17 INC R26 ST X,R18 INC R26 ST X,R16 INC R26 ST X,R17 INC R26 ST X,R18 INC R26 ST X,R16 INC R26 ST X,R17 INC R26 ST X,R18 INC R26 ST X,R16 INC R26 ST X,R17 INC R26 ST X,R18 INC R26 Esta solución 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 que utiliza direccionamiento inmediato es el resultado de las funciones LOW y HIGH, que posee este ensamblador, para separar un número de 16 bits en dos bytes el menos significativo con LOW y el más significativo con HIGH. Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 8. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 8 TERCERA SOLUCIÓN Esta solución utiliza direccionamiento indirecto con post incremento, funciones y etiquetas LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC LDI R26,LOW(BLOQUE) LDI R27,HIGH(BLOQUE) ST X+,R16 ST X+,R17 ST X+,R18 ST X+,R16 ST X+,R17 ST X+,R18 ST X+,R16 ST X+,R17 ST X+,R18 ST X+,R16 ST X+,R17 ST X+,R18 La ventaja de esta solución, radica en que el código de máquina de todas las instrucciones que llenan las localidades de la SRAM, es el mismo. ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1 ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN 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 0x100 000100 BLOQUE: .BYTE NLOC ; .CSEG 000000 e301 LDI R16,NUMERO 000001 e411 LDI R17,MAYUSC 000002 e621 LDI R18,MINUSC 000003 e0a0 LDI R26,LOW(BLOQUE) 000004 e0b1 LDI R27,HIGH(BLOQUE) 000005 930d ST X+,R16 Códigos de Máquina 000006 931d iguales ST X+,R17 000007 932d ST X+,R18 000008 930d Códigos de Máquina ST X+,R16 000009 931d iguales ST X+,R17 00000a 932d ST X+,R18 00000b 930d Códigos de Máquina ST X+,R16 00000c 931d iguales ST X+,R17 00000d 932d ST X+,R18 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 9. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 9 00000e 930d ST X+,R16 Códigos de Máquina 00000f 931d ST X+,R17 iguales 000010 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 solución eficiente mediante el uso de LAZOS DE REPETICIÓN CUARTA SOLUCIÓN Esta solución utiliza direccionamiento indirecto con post incremento, expresiones con funciones, etiquetas y un lazo de repetición controlado por el valor del puntero LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC LDI R26,LOW(BLOQUE) LDI R27,HIGH(BLOQUE) REPITA: ST X+,R16 ST X+,R17 ST X+,R18 CPI R26,LOW(BLOQUE)+11 BRNE REPITA Resultado del ensamblado de este Módulo Fuente: ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1 ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON ; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y ; UN LAZO DE REPETICIÓN CONTROLADO POR EL VALOR DEL PUNTERO ; .DEVICE ATMEGA164P ; .EQU NLOC = 12 .EQU NUMERO = '1' .EQU MAYUSC = 'A' .EQU MINUSC = 'a' ; .DSEG .ORG 0x100 000100 BLOQUE: .BYTE NLOC ; .CSEG 000000 e301 LDI R16,NUMERO 000001 e411 LDI R17,MAYUSC 000002 e621 LDI R18,MINUSC 000003 e0a0 LDI R26,LOW(BLOQUE) 000004 e0b1 LDI R27,HIGH(BLOQUE) 000005 930d REPITA: ST X+,R16 000006 931d ST X+,R17 000007 932d ST X+,R18 000008 30ab CPI R26,LOW(BLOQUE)+11 000009 f7d9 BRNE REPITA ; Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 10. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 10 00000a cfff FIN: RJMP FIN ; Lamentablemente esta solución no cumple con lo solicitado, “Llenar doce localidades”; porque, el programa sigue llenando más localidades debido a una falla en el control del lazo de repetición tal como se puede ver en la siguiente prueba de escritorio. R16 R17 R18 R26 R27 Localidades de la SRAM Comparación Salto 0x31 0x41 0x61 0x00 0x01 (0x0100) = 0x31 0x01 0x01 (0x0101) = 0x41 0x02 0x01 (0x0102) = 0x61 0x03 0x01 0x03<>0x0B Si (0x0103) = 0x31 0x04 0x01 (0x0104) = 0x41 0x05 0x01 (0x0105) = 0x61 0x06 0x01 0x06<>0x0B Si (0x0106) = 0x31 0x07 0x01 (0x0107) = 0x41 0x08 0x01 (0x0108) = 0x61 0x09 0x01 0x09<>0x0B Si (0x0109) = 0x31 0x0A 0x01 (0x010A) = 0x41 0x0B 0x01 (0x010B) = 0x61 0x0C 0x01 0x0C<>0x0B Si (0x010C) = 0x31 0x0D 0x01 (0x010D) = 0x41 0x0E 0x01 (0x010E) = 0x61 0x0F 0x01 0x0F<>0x0B Si (0x010F) = 0x31 0x10 0x01 (0x0110) = 0x41 0x11 0x01 (0x0111) = 0x61 0x12 0x01 0x12<>0x0B Si La solución es modificar la instrucción de comparación por: CPI R26,LOW(BLOQUE)+12 O, mejor: CPI R26,LOW(BLOQUE)+NLOC Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 11. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 11 QUINTA SOLUCIÓN Esta solución utiliza direccionamiento indirecto con post incremento, expresiones con funciones, etiquetas y un lazo de repetición controlado por un contador descendente. LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC LDI R19,NLOC/3 LDI R26,LOW(BLOQUE) LDI R27,HIGH(BLOQUE) REPITA: ST X+,R16 ST X+,R17 ST X+,R18 DEC R19 BRNE REPITA VARIACIÓN A LA QUINTA SOLUCIÓN Esta variación permite visualizar mejor el algoritmo, cuando al registro contador se etiqueta precisamente como “CONTADOR”, mediante la Directiva que Define un Nombre Simbólico para un Registro (.DEF) ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1 ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON ; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y ; UN LAZO DE REPETICIÓN 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 0x100 BLOQUE: .BYTE NLOC ; .CSEG LDI R16,NUMERO LDI R17,MAYUSC LDI R18,MINUSC LDI CONTADOR,NLOC/3 LDI R26,LOW(BLOQUE) LDI R27,HIGH(BLOQUE) REPITA: ST X+,R16 ST X+,R17 ST X+,R18 DEC CONTADOR BRNE REPITA ; FIN: RJMP FIN Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 12. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 12 ; .EXIT ; FIN DEL MODULO FUENTE La ventaja de elaborar lazos de repetición bajo este esquema, es que se pueden observar en forma clara las tres partes que conforman el lazo de repetición: • La inicialización de los registros, del contador de repeticiones y del o de los punteros, que intervienen en el lazo. • El cuerpo del lazo de repetición, que realiza la tarea repetitiva, y • La disminución del contador y el correspondiente chequeo para determinar el final de las repeticiones, mediante la instrucción de bifurcación. A continuación se muestra el Módulo Fuente en el que se ha unido la solución a los dos problemas que se resolvieron antes, en forma individual. ; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1 ; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA, ; ALTERNADAMENTE. ; TAMBIÉN, DEBE LLENAR QUINCE LOCALIDADES A PARTIR DE 200 HEXADECIMAL ; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 0 ; DE LA LETRA Z MAYÚSCULA Y DE LA LETRA t MINÚSCULA, ; ALTERNADAMENTE. ; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON ; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y ; DOS LAZOS DE REPETICIÓN 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 0x100 BLQ1: .BYTE NLOC1 .ORG 0x200 BLQ2: .BYTE NLOC2 ; .CSEG LDI R16,NUMERO1 LDI R17,MAYUSC1 LDI R18,MINUSC1 LDI CONTADOR,NLOC1/3 LDI R26,LOW(BLQ1) LDI R27,HIGH(BLQ1) LAZO1: ST X+,R16 ST X+,R17 ST X+,R18 DEC CONTADOR BRNE LAZO1 ; LDI R16,NUMERO2 LDI R17,MAYUSC2 LDI R18,MINUSC2 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 13. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 13 LDI CONTADOR,NLOC2/3 LDI R26,LOW(BLQ2) LDI R27,HIGH(BLQ2) LAZO2: ST X+,R16 ST X+,R17 ST X+,R18 DEC CONTADOR BRNE LAZO2 ; FIN: RJMP FIN ; .EXIT ; FIN DEL MODULO FUENTE Esta última solución al problema, permite al programador crear sus propias MACROINSTRUCCIONES, que le faciliten aún más la elaboración de los programas. INCLUSIÓN DE MACROINSTRUCCIONES EN LA QUINTA SOLUCIÓN La creación de Macroinstrucciones consiste en agrupar un bloque de instrucciones que forman la nueva instrucción. La condición que deben cumplir es que se diferencien únicamente en ciertos operandos como registros, localidades o valores entre las instrucciones de los diferentes bloques. Para construir la nueva instrucción: Se empieza por la Directiva de Encabezado de las Macroinstrucciones (:MACRO), donde se define el nombre que le corresponde a la nueva instrucción. A continuación sigue el bloque de instrucciones, donde los elementos que cambian son reemplazados por @0, @1, @2 … hasta @9 y que constituyen los parámetros que se especifican cuando se invoca a la nueva instrucción, dentro del programa. Se termina la construcción de la nueva instrucción con la Directiva de Finalización de las Macroinstrucciones (:ENDMACRO) La invocación de la nueva instrucción se realiza utilizando el nombre que se estableció en la construcción, seguido de los parámetros separados por comas y en el orden que se los numeró. A continuación esta ilustrado la creación de la Macroinstrucción para inicializar los registros que se utilizan en los lazos de repetición de la solución, a la que se le nombra como “INICIAR”. .LISTMAC .MACRO INICIAR LDI R16,@0 LDI R17,@1 LDI R18,@2 LDI CONTADOR,@3/2 LDI R26,LOW(@4) LDI R27,HIGH(@4) .ENDMACRO ; .CSEG Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 14. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 14 INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1 LAZO1: ST X+,R16 ST X+,R17 ST X+,R18 DEC CONTADOR BRNE LAZO1 ; INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2 LAZO2: ST X+,R16 ST X+,R17 ST X+,R18 DEC CONTADOR BRNE LAZO2 El uso de Macroinstrucciones no ahorra código de máquina, como se puede ver en el resultado del ensamblado, que a continuación 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 0x100 000100 BLQ1: .BYTE NLOC1 .ORG 0x200 000200 BLQ2: .BYTE NLOC2 ; .LISTMAC .MACRO INICIAR LDI R16,@0 LDI R17,@1 LDI R18,@2 LDI CONTADOR,@3/2 LDI R26,LOW(@4) LDI R27,HIGH(@4) .ENDMACRO ; .CSEG + 000000 e301 +LDI R16 , NUMERO1 000001 e411 +LDI R17 , MAYUSC1 000002 e621 +LDI R18 , MINUSC1 000003 e036 +LDI CONTADOR , NLOC1 / 2 000004 e0a0 +LDI R26 , LOW ( BLQ1 ) 000005 e0b1 +LDI R27 , HIGH ( BLQ1 ) INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1 000006 930d LAZO1: ST X+,R16 000007 931d ST X+,R17 Códigos de Máquina 000008 932d ST X+,R18 iguales 000009 953a DEC CONTADOR 00000a f7d9 BRNE LAZO1 ; + Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 15. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 15 00000b e300 +LDI R16 , NUMERO2 00000c e51a +LDI R17 , MAYUSC2 00000d e724 +LDI R18 , MINUSC2 00000e e037 +LDI CONTADOR , NLOC2 / 2 00000f e0a0 +LDI R26 , LOW ( BLQ2 ) 000010 e0b2 +LDI R27 , HIGH ( BLQ2 ) INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2 000011 930d LAZO2: ST X+,R16 000012 931d ST X+,R17 000013 932d Códigos de Máquina ST X+,R18 iguales 000014 953a DEC CONTADOR 000015 f7d9 BRNE LAZO2 ; 000016 cfff FIN: RJMP FIN ; ; Analizando el listado anterior, se puede observar que las instrucciones de los lazos de repetición tienen el mismo código de máquina, lo que permite convertirles en Subrutinas, como lo que si indica a continuación: INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1 CALL LAZO INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2 CALL LAZO INCLUSIÓN DE MACROINSTRUCCIONES Y SUBRUTINAS EN LA QUINTA SOLUCIÓN Cuando se utilizan Subrutinas es necesario inicializar el Puntero del Stack (SP) que generalmente se lo ubica al final de la SRAM. Además se ha eliminado la directiva que lista 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,@0 LDI R17,@1 LDI R18,@2 LDI CONTADOR,@3/2 LDI R26,LOW(@4) LDI R27,HIGH(@4) .ENDMACRO ; Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 16. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 16 .CSEG 000000 ef0f LDI R16,LOW(0x04FF) 000001 9300 005e STS $5E,R16 Inicialización del 000003 e004 LDI R16,HIGH(0x04FF) Stack Pointer 000004 9300 005d STS $5D,R16 ; 000006 e301 000007 e411 000008 e621 000009 e036 00000a e0a0 00000b e0b1 INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1 00000c 940e 0017 CALL LAZO ; 00000e e300 00000f e51a 000010 e724 000011 e037 000012 e0a0 000013 e0b2 INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2 000014 940e 0017 CALL LAZO ; 000016 cfff FIN: RJMP FIN ; 000017 930d LAZO: ST X+,R16 000018 931d ST X+,R17 000019 932d ST X+,R18 00001a 953a DEC CONTADOR 00001b f7d9 BRNE LAZO 00001c 9508 RET ; INCLUSIÓN DEL ARCHIVO DE DEFINICIONES PROPORCIONADO POR EL FABRICANTE El fabricante proporciona el archivo “m164pdef.inc”, para facilitar la elaboración de los programas; a fin de, reemplazar los valores numéricos de las direcciones de memoria por las Etiquetas que se utilizan en las hojas de datos. En el siguiente listado se ha reemplazado la definición del dispositivo (.DEVICE ATMEGA164P) por la inclusión del archivo de definiciones y se han utilizado las directivas .NOLIST y .LIST para que en el archivo de resultado del ensamblado no se listen las líneas que contiene el archivo de 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 0x200 BLQ2: .BYTE NLOC2 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
  • 17. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM Pag. 17 ; ;.LISTMAC .MACRO INICIAR LDI R16,@0 LDI R17,@1 LDI R18,@2 LDI CONTADOR,@3/2 LDI R26,LOW(@4) LDI R27,HIGH(@4) .ENDMACRO ; .CSEG LDI R16,LOW(RAMEND) Etiquetas que se OUT SPH,R16 encuentran en el archivo LDI R16,HIGH(RAMEND) de definiciones OUT SPL,R16 ; INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1 CALL LAZO ; INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2 CALL LAZO ; FIN: RJMP FIN ; LAZO: ST X+,R16 ST X+,R17 ST X+,R18 DEC CONTADOR BRNE LAZO RET ; .EXIT ; FIN DEL MODULO FUENTE La utilización de este archivo de definiciones permite escoger rápidamente el microcontrolador con el cual se va ha trabajar, grabado el código de máquina que resulta del proceso de ensamblado. Así por ejemplo, el último programa en una ocasión se desea utilizarlo con el ATmega164P y en otra con el ATmega16; una de las diferencias entre estos microcontroladores es la dirección final de la SRAM. en el primer caso esta dirección es 0x04FF y en el segundo caso es 0x045F. Únicamente cambiando el archivo de definiciones “m164pdef.inc” por “m16def.inc” y sin modificar ninguna otra línea, se obtiene para cada caso los códigos de máquina correspondientes. Para el ATmega164P :020000020000FC :100000000FEF0EBF04E00DBF01E311E421E636E07F :10001000A0E0B1E00E94150000E31AE524E737E014 :10002000A0E0B2E00E941500FFCF0D931D932D9329 :060030003A95D9F708958E :00000001FF Códigos de Máquina diferentes, por el cambio de microcontrolador Para el ATmega16 :020000020000FC :100000000FE50EBF04E00DBF01E311E421E636E089 :10001000A0E0B1E00E94150000E31AE524E737E014 :10002000A0E0B2E00E941500FFCF0D931D932D9329 :060030003A95D9F708958E :00000001FF Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información