Sei sulla pagina 1di 4

UNIVERSIDAD NACIONAL DEL CALLAO

EJERCICIOS RESUELTOS DEL CURSO DE MICRO CONTROLADOR


ATMEGA8
1.- EJERCICIO
REALIZAR EL PROGRAMA PARA GENERAR UNA ONDA CUADRADA EN EL PIN
PD1 DEL PUERTO D DURANTE 1 SEG. CONSTANTEMENTE

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

UNIVERSIDAD NACIONAL DEL CALLAO


PROGRAMA NRO2
ENCENDER Y APAGAR 8 LEDS UBICADO EN EL PUERTO B CON UN RETARDO DE
1SEG. CONSTANTEMENTE

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

UNIVERSIDAD NACIONAL DEL CALLAO

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

LDI R16, 0xFF


OUT DDRB, R16
; Puerto entero como salida
SBI PORTB, 3 ; Establecer el bit 3 a 1
CBI PORTB, 6 ; Establecer el bit 6 a 0
EJERCICIO 04
Escribir las isntrucciones para Establecer el PINC4 (PC4) del puerto C como entrada
y tomar una decisin en funcin del valor ledo:
Solucin

CBI DDRC, 4 PIN PC4 como entrada DDRC4=0


SBIS PINC, 4 saltar una instruccion s i PIND4=1
JMP PC4_ES_0 Salto si PINC4=0
JMP PC4_ES_1 Salto si PINC4=1

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

UNIVERSIDAD NACIONAL DEL CALLAO


cpi R16,0b00000000
breq SWcerrado
ldi R16,0b11111111
out PORTB,R16
rjmp lazo
SWcerrado:
ldi R16,0b11111100
out PORTB,R16
rjmp lazo

; compara r16 con ob00000000


; salta a SWcerrado si bit 7 esta a cero
; se carga R16 con el valor 0b11111111
; se escribe en el puerto B con el valor de R16
; salta a etiqueta lazo
; etiqueta
;carga r16 con 0b11111100
; se escribe em el puerto B con el valor de R16
; salta a etiqueta LAZO

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

Potrebbero piacerti anche