PROGRAMANDO EL MICROCONTROLADOR 8051 EN EL EDSIM51

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. R

Views 82 Downloads 2 File size 34KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 números de un listado ; que empieza en la dirección 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 números intercambiando los elementos adyacentes que estén 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) X0 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 números 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 dirección 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