Microcontroladores

Páginas: 6 (1452 palabras) Publicado: 26 de junio de 2011
1)Escriba un programa para escribir en las posiciones pares de la memoria de datos (RAM) el valor de 55H y en las posiciones impares el valor AAH.
.include "m8def.inc"
.cseg
.org 0x0

ldi XL,0x60
ldi XH,0x00
ldi r19,0x55
ldi r21,0xAA
ldi r17,0
lazo1:
ldi r16,2
lazo2:
st X+,r19
st X+,r21
dec r16
dec r17
brne lazo1
rjmp PC

2)Escriba unprograma para enviar el siguiente mensaje almacenado en la memoria de programa como una tabla: UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS a la memoria de datos en la dirección: 0x0200H
.include "m8def.inc"
.cseg
.org 0x0
incio:
ldi r16,HIGH(RAMEND)
out SPH,r16
ldi r16,LOW(RAMEND)
out SPL,r16
ldi r30,0x20
infinito:
ldi ZH,HIGH(mensaje*2)
ldi ZL,LOW(mensaje*2)
lpm r15,Z+st Z+,r20
mensaje:

.db "Universidad peruana de ciencias aplicadas"

3.Se tiene una tabla de datos con los siguientes valores:
13, 56, 76, 12, 67, 25, 11, 13, 95, 12
Se le pide construir un programa que realice la suma de todos estos valores y que almacene el resultado en los registros del CPU.
.include "m8def.inc"

.cseg

.org 0x0

INICIO:
;Cargamos la tabla en el puntero Zldi ZH,HIGH(TABLA<<1)

ldi ZL,LOW(TABLA<<1)
ldi r20,0x60

ldi r22,0x63
ldi r20,10

clr r14
clr r15
clr r16
clr r21
clr r23

LAZO:
lpm
adiw Z,2
st X+,r0



add r14,r0
adc r15,r0
st Y,r14
sts 0x0061,r15
lds r16,0x0061
sub r16,r14
sts 0x0062,r16

dec r20

brne LAZO
rjmp PC;Hexadecimal
TABLA:
.db 0x0D ;13
.db 0x38 ;56
.db 0x4C ;76
.db 0x0C ;12
.db 0x43 ;67
.db 0x19 ;25
.db 0x0B ;11
.db 0x0D ;13
.db 0x5F ;95
.db 0x0C ;12

4.Implementar una rutina llamada: SEG que permita realizar un retardo de tantos segundos como lo indique el registro r20. Ejemplo:
Ldi r20,2
rcall SEG

; multiplos para que el retraso se de enun segundo
.equ veces1 = 250
.equ veces2 = 4
.equ veces3= 250
.equ veces4 = 4

SEG: ;se apilan los registros a usar para
push R16
push R17
push R18
push R19
push R20
;R20 decide cuantos segundos se haran de retardo
LAZO5:
ldi R19,veces4 ;se abre el LAZO4
LAZO4:
ldi R18,veces3 ;se abre el LAZO3
LAZO3:
ldi R16,veces1 ;se abre el LAZO2
LAZO2:
nop
ldiR17,veces2 ;se abre el LAZO1
LAZO1:
dec R17
brne LAZO1 ;se cierra el LAZO1
dec R16
brne LAZO2 ;se cierra el LAZO2
dec R18
brne LAZO3 ;se cierra el LAZO3
dec R19
brne LAZO4 ;se cierra el LAZO4
dec R20
brne LAZO5 ;se cierra el LAZO5

pop R20 ;se recuperan los valores originales
pop R19 ;de los registros
pop R18
pop R17
pop R16
ret
5.Implementar el programapara que rote los bits de izquierda a derecha y de derecha a izquierda del PORTB.
10000000
01000000
……..
00000010
00000001
.include"m8def.inc"
.cseg
.org 0x0
;Primero definimos como salida al port B
ldi r16,0b11111111
out DDRB,r16
ldi r20,0b10000000
out PORTB,r20
;Primero lo rotamos a la derecha con el comando ROR
LAZO:
ROR r20
out PORTB,r20
sbis PORTB,PB0 ;salta si el bit en lasalida 0 es 1
rjmp LAZO
rjmp LAZO1
;Rotamos a la derecha cuando el bit en la salida 1 esta en 1
LAZO1:
ROL r20
out PORTB,r20
sbis PORTB,PB7 ;salta si el bit en la salida 7 es 1
rjmp LAZO1
rjmp LAZO
;Fin del Programa
6.Implemente el programa para generar la siguiente secuencia en el PORTB.
10000001
01000010
00100100
00011000
00100100
01000010
.include"m8def.inc"
.cseg
.org 0x0;A diferencia del programa anterior,este se resuelve con una tabla
;ya que no se tiene un comando que permita rotar los bits en ambas direcciones
;Pila de datos
ldi r16,HIGH(RAMEND)
out SPH,r16
ldi r16,LOW(RAMEND)
out SPL,r16
;Definimos como salida al PortB
ldi r16,0b11111111
out DDRB,r16
LAZO:
;apunta a la tabla y va moviendo 6 veces la tabla
ldi ZH,HIGH(tabla<<1)
ldi...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Microcontroladores
  • Microcontroladores
  • microcontroladores
  • Microcontroladores
  • Microcontroladores
  • Microcontroladores
  • Microcontroladores
  • Microcontroladores

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS