Sunteți pe pagina 1din 1

/*

* AVRAssembler2.asm
*
* Created: 22.09.2014 20:02:37
* Author: Tepurlan Mihail
*/
;========================
.include "m32def.inc"
.org 0
.cseg
;START
;-----------------------ldi R16, 0b00000001; incarcam valoarea necesara in registrul 16
out DDRA, R16; setam directia pinilor din portul A
ldi R16, 0b11111110; incarcam valoarea necesara in registrul 16
out PORTA, R16; setam valorile logice pe pinii portului A
ldi R16, 0b00000000; incarcam valoarea necesara in registrul 16
out DDRD, R16; setam directia pinilor din portul D
ldi R16, 0b11111111; incarcam valoarea necesara in registrul 16
out PORTD, R16; setam valorile logice pe pinii portului D
;========================
main_loop:
;-----------------------switch_off:
sbic PIND, 2; verificam daca butonul nu este apasat
rjmp switch_off; sarim la verificarea starii butonului
sbic PINA, 0; verificam starea LED-ului
rjmp led_off; sarim la instructiunea de stingere a LED-ului
rjmp led_on; sarim la instructiunea de aprindere a LED-ului
;-----------------------led_on:
sbi PORTA, 0; aprindem LED-ul(valoearea logica "1")
rjmp switch_on; sarim la instructiunea de verificare a butonului
;-----------------------led_off:
cbi PORTA, 0; stingem LED-ul(valoarea logica "0")
;-----------------------switch_on:
sbis PIND, 2; verificam daca butonul este apasat
rjmp switch_on; sarim la instructiunea de verificare a butonului
;-----------------------delay:
ldi R16, 0b11111111; incarcam valoarea maxima in registrul 16
;-----------------------delay_loop:
dec R16; decrementam valoarea din registrul 16
cpi R16, 0b00000000; comparam valoarea din registrul 16 cu 0
brne delay_loop; sarim la instructiunea de decrementare sau la urmatoare
a
;-----------------------rjmp main_loop; sarim la inceputul programului
;========================
;END

S-ar putea să vă placă și