programando el microcontrolador 8051 en el edsim51
DESCRIPTION
Resolución de problemas de PROGRAMANDO EL MICROCONTROLADOR 8051 EN EL EDSIM51Dictado en el curso de ALGORITMOS en la facultad de ciencias-UNITRANSCRIPT
-
a) 01h, 02h,07h,08h,09h,0Ah,0Bh,0Fh,10h,11h,15h,63h y 13h. b) Usando el algoritmo de la suma de un listado de enteros. Realice un
programa para la suma del listado de enteros dado en el punto a).
Almacenar el resultado en el registro R7. En este programa utilice el
programa del punto a) como una subrutina.
SOLUCION:
; Programa que suma un conjunto
; de 13 nmeros de un listado
; que empieza en la direccin de
; memoria 30h y termina en 3Ch.
org 0000h
lcall llenar_memoria;Llena la memoria de 30h a 3Ch con numeros
mov R7,#0; Valor inicial del resultado de la suma
mov R6,#13; Contador de numeros
mov R0,#30h; Valor inicial de R0
loop:
mov A,@R0; Obtengo el primer numero a sumar
add A,R7; Sumo los numeros.
mov R7,A; Muevo el resultado a R7.
inc R0; Incremento R0 para pasar a la siguiente direccion
djnz R6,loop; Decremento R6 que es mi contador
Fin:
sjmp Fin
;Subrutina que llena la memoria con numeros
llenar_memoria:
mov R1,#30h
mov R6,#13
mov R5,#0
loop1:
-
mov A,R5
lcall consigue_numero
mov @R1,A
inc R1
inc R5
djnz R6,loop1
ret
;Subrutina que consigue el numero a colocar en la memoria
consigue_numero:
inc A
movc A,@A+PC
ret
db 01h
db 02h
db 07h
db 08h
db 09h
db 0Ah
db 0Bh
db 0Fh
db 10h
db 11h
db 15h
db 63h
db 13h
-
En el algoritmo de ordenamiento de burbuja se recorre el listado de nmeros
intercambiando los elementos adyacentes que estn desordenados. Se recorre
el listado tantas veces hasta que ya no haya cambios. Usando el siguiente
PSEUDOCODIGO del algoritmo de burbuja:
Enteros X, Z, LISTADO(N)
X0
MIENTRAS(X < N)
{ Z N
MIENTRAS (Z>=0)
{
SI (LISTADO (Z) < LISTADO (Z-1))
{
INTERCAMBIO (LISTADO (Z), LISTADO (Z-1))
}
Z Z - 1 }
X X + 1 }
FIN
desarrolle un programa que realice el ordenamiento de burbuja del listado
de nmeros de la pregunta 3, para N=9. Utilice las direcciones de memoria
desde 30h hasta 38h para colocar el listado.
SOLUCION:
;Programa que hace
;el ordenamiento por
;el algoritmo de burbuja
org 0000h
lcall llena_memoria
mov R6,#9; R6 es contador que hace las veces
; de "x" en el algoritmo
loop1:
mov R0,#38h;Empiezo en la direccin 38h con el ordenamiento
mov R5,#9; R5 es el que hace las veces de "z"
loop:
-
mov A,@R0; Se mueve a A el contenido de 38h
mov R3,A ; Se mueve a R3 el valor de A
dec R0 ; Se decrementa R0 a 37h
mov A,@R0 ; Se mueve a A el contenido de 37h
Subb A,R3; Se calcula A-R3 y si es negativo no hay intercambio
jc nohay ; Va a "nohay" si es negativo
mov A,@R0; Empieza el intercambio, muevo a A el valor de 37h
mov R2,A; Luego lo muevo a R2
mov A,R3; Muevo a A el valor de R3
mov @R0,A;lo muevo a 37h el valor de R3
inc R0 ;incremento y llego a 38h
mov A,R2;muevo el valor de R2 a A
mov @R0,A; y ahora lo muevo a 38h, termina el intercambio
dec R0 ;decremento R0 para continuar con el siguiente
nohay:
djnz R5,loop;decrementa R5
djnz R6,loop1;decrementa R6
Fin:
sjmp Fin
;Subrutina para llenar la memoria de datos desde 30h hasta 38h
llena_memoria:
mov R0,#0
mov R1,#30h
mov R2,#9
loop2:
mov A,R0
lcall consigue_numero
mov @R1,A
-
inc R0
inc R1
djnz R2,loop2
ret
consigue_numero:
inc A
movc A,@A+PC
ret
db 23h
db 78h
db 59h
db 8h
db 32h
db 56h
db 05h
db 12h
db 0Ah