Atmel studio assembly dilinde hc-sr04 sensörü çalıştırma

Başlatan MÜHENDİS ADAM, 13 Kasım 2015, 00:59:05

MÜHENDİS ADAM

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

Kabil ATICI

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.
ambar7

MÜHENDİS ADAM

#2
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

Kabil ATICI

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...

ambar7

MÜHENDİS ADAM

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.