Arkadaşlar ben hc-sr04 sensörünün 15 cm yi algılayıp portbdeki ledlerinin yakmasını istiyorum ama çalışmıyor yardımcı olurmusunuz?
.include "tn2313def.inc"
.def gecici=r16
.def sayac1=r17
.def sayac=r18
.def sure=r20
.def uzaklik=r19
.cseg
.org 0
rjmp reset
reset:
ldi gecici,0b11111111
out ddrb,gecici
ldi gecici,0b10111111
out ddrd,gecici
basla:
ldi gecici,0b00000000
out tccr0a,gecici
ldi gecici,0b00000010
out tccr0b,gecici
ldi gecici,0
out tcnt0,gecici
devam:
sbi pind,5
rcall gecikme
cbi pind,5
devam1:
ldi gecici,0
out tcnt0,gecici
sbic pind,6
rjmp devam1
ldi sure,tcnt0
ldi uzaklik,tcnt0/58
cpi uzaklik,15
breq yukle
rjmp devam
yukle:
ldi gecici,0xff
out portb,gecici
rjmp devam
gecikme:
ldi sayac1,90
gec1:
ldi sayac,220
gec2:
dec sayac
brne gec2
dec sayac1
brne gec1
ret
sbi ve cbi pin kontrol komutları bildiğim (çıkış lojik kontrol komutları) kadarı ile, bunları portd, porta, portb,... ile kontrol edebilirsin...
ldi sure,tcnt0
ldi uzaklik,tcnt0/58 ile kullanılmıyor.... in komutuna bakın....
asm 'de aynı satırda birden fazla iş yapmaz... matematik işlemlerine bakın.
iyi bir çözünürlük için timer1 kullan.
sbi(set bit ı/o register) tanımlanan port bitini set etmek için kullnılıyor trig e 10us lojik 1 sonra sıfır yapmak için kullandım bu komutları
diğeride matematik işlemi için dediğin olaya baktım(daha önceden de biliyordum)
Sembol : /
Açıklama : Bu operatör soldaki değerin sağdaki değere bölümünün tamsayı cinsinden
sonucunu döndürür.
Örnek : ldi r30,label/2 ;r30 registerine label/2 sonucunu yükler
bir de burada pind5 trig pind6 echo ucudur
http://www.atmel.com/images/doc2543.pdf (http://www.atmel.com/images/doc2543.pdf)
bir göz at... portd bölümü sayfa 58,
asm komut seti sayfa 213'de yer almaktadır...
asm komutlarında ciddi bir değişiklik yoksa;
bacağı çıkış olarak kontrol için pind değil, portd şeklinde kullanılıyor. Pind olayı ancak giriş olarak kullanıldığında çalışıyor..
bu arada 15x58 =??
tcnt0 1 baytlık (8 bitlik) bir registerdir. senin ölçümün sonucu 2 baytlık bir sayı..
tcnt0 bir registeri temsil ediyor...
ldi komutu sabit sayıyı bir registere yüklemek için kullanılıyor... label olarak tanımlanan sabit bir sayı ise sizin o satır işe yarar...
madem programınızın doğru olduğunu söylüyorsunuz, size kolay gelsin...
programım doğru olsa zaten çalışırdı hatamı öğrenmek için yazdım buraya dedikleriniz uyguladım yine olmadı belkide kodum yanlıştır zaten yeniyim bu konuda.