Professional Documents
Culture Documents
INSTRUCCIONES
;DIRECTIVAS EN ENSAMBLADOR
.include "m8def.inc"
;ATmega8
.org $0000
rjmp main
;ve al main
;..PROGRAMA PRINCIPAL
main:
ldi r16,$04
;Configurassem de...
out sph,r16
ldi r16,$5F
out spl,r16
;la pila: Stack: $045F=RAMEND
ldi r16 ,$FF
;r16 <- $FF
out ddrd,r16
;portD salida
ldi r16,$00
;LED APAGADO
out portd,r16
;************************************PROGRAMA PRINCIPAL*****************
loop:
LDI R16,$02
OUT PORTB, R16
; LED ENCENDIDO
RCALL DELAY_1S
;RETRASO DE 1SEG
LDI R16,$00
OUT PORTD,R16
;LED APAGADO
RJMP LOOP
; SALTO ABSOLUTO A DIRECCION BUCLE
;*********************************RUTINA DE 1SEG****************************
delay_1s:
ldi R17, $24
XX0:
ldi R18, $BC
XX1:
ldi R19, $C4
XX2:
dec R19
brne XX2
dec R18
brne XX1
dec R17
brne XX0
; ----------------------------; delaying 3 cycles:
ldi R17, $01
XX3:
dec R17
brne XX3
; ----------------------------; delaying 1 cycle:
nop
ret
COMENTARIO: Este es el programa para encender y apagar un led con un retardo de 0.5 seg
se puede amplaiar para 8 leds
Se pide : comentar todas las isntrucciones y hacer un diagrama de flujo
Instrucciones
.include "m8def.inc"
.cseg
.org 0
rjmp RESET
;
;*******************************CONFIGURACION DE PUERTO******************
RESET:
ldi r16, 0b11111111 ; cargamos el registro r16 como salida
out DDRB, r16
;configuramos PORT B for all outputs
;*******************************PROGRAMA PRINCIPAL******************************
loopit:
ldi r16, 0
cargamos todos PORTB a 0 al registro R16 ;
out PORTB, r16
;aqui encendemos todas las salida del PORTB
rcall DELAY
ldi r16,255
out PORTB,r16
rcall DELAY
rjmp loopit
;******************************RETARDO DE 1 SEG**************************
delay_1s:
ldi R17, $24
XX0:
ldi R18, $BC
XX1:
ldi R19, $C4
XX2:
dec R19
brne XX2
dec R18
brne XX1
dec R17
brne XX0
; ----------------------------; delaying 3 cycles:
ldi R17, $01
XX3:
dec R17
brne XX3
; ----------------------------; delaying 1 cycle:
nop
ret
EJERCICIO 03
Escribir las instrucciones para establecer el puerto B como salida y poner el PIN PB3
a '1' y el PIN PB6 a '0'
Solucin
EJERCICIO 05
Se pide comentar cada instruccin en el programa propuesto
.include \m8def.inc";-----------------------------------------------.cseg
;-----------------------------------------------.org $0
;----------------------------------------------rjmp inicio
;-----------------------------------------------inicio:
ldi R16,0b00000011 ;----------------------------------------------out DDRB,R16
;----------------------------------------------lazo:
;----------------------------------------------in R16,PINB
;----------------------------------------------andi R16,0b10000000
;---------------------------------------------cpi R16,0b00000000 ;----------------------------------------------breq SWcerrado
;----------------------------------------------ldi R16,0b11111111 ;----------------------------------------------out PORTB,R16
;----------------------------------------------rjmp lazo
;----------------------------------------------SWcerrado:
;----------------------------------------------ldi R16,0b11111100 ;----------------------------------------------out PORTB,R16
;----------------------------------------------rjmp lazo
;-----------------------------------------------
Solucion
.include m8def.inc"; incluye archive
.cseg
; designa segmento de cdigo
.org $0
; posicin inicial de la memria flash denominado reset
rjmp inicio
; saltar a la etiqueta inicio
inicio:
; etiqueta
ldi R16,0b00000011
; Configuro PB0 y PB1 como salida y PB7 como entrada
out DDRB,R16
;utilizando el registro DDRB
lazo:
; etiqueta
in R16,PINB
; Leo los pines del puerto B, pero solo interesa PB7
andi R16,0b10000000 ; AND BIT A BIT del r16 con 0b10000000
EJERCICIO
Realizaremos un programa que consistir en rotar el encendido de un led a travs de
una hilera de 8 LEDs conectados al puerto B del atmega8.
Dependiendo de si el pin PC0 del puerto C est a cero, la rotacin de encendido ser
hacia la derecha, y si est a uno, hacia el sentido contrario, es decir, hacia la
izquierda