InTheStillOfTheNight wrote:Posve sam novi u ovome a mislim da je vrijeme da nesto pametno naucim... Kako se to programira.. Koji software kakav programator.. Ev recimo idem za pocetak raditi nesto sa At90s1200 .. Kako bi ovo izgledalo u assembleru
Do
P3.1 = 0
wait 1
P3.0 = 1
wait 1
loop
treba mi zmigavac recimo... odakle da krenem.... smrc
AVR ulazno i izlazni portovi se označavaju kao PORTA, PORTB...... Svaki od portova može se deklarisati kao ulazni, izlazni ili mešovito po bitovima.
AT90S1200 poseduje dva porta B i D. Za početak neka izlaz za zmigavac bude pin PD6.
Code: Select all
; @4MHz
.include "1200def.inc"
.def a=r16 ;registru opste namene R16 je dodeljen naziv A
.def b=r17
.def c=r18
.cseg
.org 0 ; pocetak programske memorije, posle ukljucenja ili posle reseta
; kontroler krece sa citanjem od ove adrese (0)
rjmp reset ; at90s1200 poseduje 4 interapta, na prvoj adresi prg. mem. je RESET
reti ; INT0 * reti je komanda za povratak iz int. programa, kada se ne
reti ; TIMER0 * koristi onda se upise ova komanda
reti ; ANA_COMP * analogni komparator
; PDF strana 12
; ovih interapt vektora ima u zavisnosti od izabranog modela
reset: ; komanda rjmp je bezuslovni skok i ovo je prakticno pocetak izvrsenja programa
; posle RESET vektora
ldi a,64 ;a=64 0 1 0 0 0 0 0 0 binarno 64
out DDRD,a ;PD6=izlaz pd7 pd6 pd5 pd4 pd3 pd2 pd1 pd0
; DDRD je registar za deklarisanje ulaznih i izlaznih pinova porta D (PORTD), isto tako
; DDRB se odnosi na PORTB
petlja:
cbi PORTD,PD6 ;PD6=0
rcall pauza ; rcall je komanda za pozivanje podprograma i povratka na adresu+1
rcall pauza ; analogija u bejziku je komanda gosub
rcall pauza ; povratak iz sub rutine je omogućen komandom ret, pogledaj reti
rcall pauza ; gosub pauza
rcall pauza
sbi PORTD,PD6 ;PD6=1
rcall pauza
rcall pauza
rcall pauza
rcall pauza
rcall pauza
rjmp petlja
pauza: ;pauza_200ms
; ovaj kod sluzi za "gubljenje vremena" mpu-a. u pitanju je ne tako efikasna petlja ali
; je dovoljna za primer
ldi c,255 ;c=255
clr a ;a=0
clr b ;b=0
pau1:
inc a ;a=a+1
cpse c,a ;uporedi c i a, ako su jednaki preskoci sledecu komandu
rjmp pau2 ;goto pau2
ret ;povratak iz sub rutine
pau2:
inc b ;b=b+1
cpse b,c ;uporedi b i c, ako su jednaki preskoci sledecu komandu
rjmp pau2 ;goto pau2
clr b ;b=0
pau3:
inc b ;b=b+1
cpse b,c ;uporedi b i c, ako su jednaki preskoci sledecu komandu
rjmp pau3 ;goto pau3
clr b ;b=0
pau4:
inc b ;b=b+1
cpse b,c ;uporedi b i c, ako su jednaki preskoci sledecu komandu
rjmp pau4 ;goto pau4
clr b ;b=0
rjmp pau1 ;goto pau1