hkn_blt
Üye
- Katılım
- 31 Ağu 2009
- Mesajlar
- 1,163
- Puanları
- 31
arkadaşlar size pic asm dilinde nasıl zaman geçikmesi yapıldını anlatmaya çalışayım.
asm de tek döngü ile max 756usn geçikme yapabiliyoruz.
çift döngü ile max 197ms geçikme yapabiliyoruz.
bunu örnekle gösterirsek:çift döngülü üzerinden nasıl hesaplandığını anlatayım...
GECIKME
MOVLW H'FF' ;BU KOMUT 1 ÇEVRİM
MOVWF SAYAC1 ;BU KOMUTTA 1 ÇEVRİM
DONGU1
MOVLW H'FF' ;1X256 ÇEVRİM (255 H'FF' SAYISINA KARSILIK GELİYOR)
MOVWF SAYAC2 ;1X256 ÇEVRİM
DONGU2
DECFSZ SAYAC2,F ;1X256X256 ÇEVRİM (SAYAC1 VE SAYAC2 İÇERİĞİ 255 OLDUGUNDAN )
GOTO DONGU2 ;2X255X255 (GOTO 2 ÇEVRİM OLDUGUNDAN 2 İLE ÇARPTIK)
DECFSZ SAYAC1,F :1X255
GOTO DONGU1 ;2X255
RETURN: 2 ÇEVRİM
--------------------------------
TOPLAMDA:196608 ÇEVRİM EDER 4MHZ KRİSTAL KULLANIRSAN BU YAKLAŞIK 197ms TEKABUL EDER.BU DURUMDA ANLAMAK ZOR BENDE İLK BAŞTA ANLAMADA ZORLUK ÇEKTİM KISAYOLUNU VEREYİM ŞİMDİ;
arkadaşlar şimdi sayac1'e attığımız sayıya M,sayac2'ye attığımız sayıya N diyelim bu durumda formulize edersek
çevrim sayısı=3xMxN olur.Max sayac1 ve sayac2 ye 255 atabildiğimizden toplamda max 197ms geçikme sağlar bize bu döngü.
Ama bize daha çok zaman gerekiyor 1sn 2sn ....10sn gibi bu durumda bir sayaç daha belirleriz onuda döngüye sokarız.Şöyle diyim şimdi 2 döngü ile max. 197ms elde ediyoruz peki 1sn elde etmek istesek sayac3 hangi degeri alır dersek:
sayac3=1sn/197ms=5 degerini alır.
ewet 3 döngü ile ise max 50sn elde edebiliriz niyemi çünkü sayac3 e max 255 yükleyebiliriz ohalde:
sayac3=255=x/197ms dersek burdan x geçikme süresi kabul edersek
x=50sn çıkar buda hayli hayli işimizi görür.4.döngüye gerek yok
şimdi 1 sn geçikme yapan altprogram yazarsak
GECIKME
MOVLW H'05'
MOVWF SAYAC1
DON1
MOVLW H'FF'
MOVWF SAYAC2
DON2
MOVLW H'FF'
MOVWF SAYAC3
DON3
DECFSZ SAYAC3,F
GOTO DON3
DECFSZ SAYAC2,F
GOTO DON2
DECFSZ SAYAC1,F
GOTO DON1
RETURN
umarım faydalı olur.....
asm de tek döngü ile max 756usn geçikme yapabiliyoruz.
çift döngü ile max 197ms geçikme yapabiliyoruz.
bunu örnekle gösterirsek:çift döngülü üzerinden nasıl hesaplandığını anlatayım...
GECIKME
MOVLW H'FF' ;BU KOMUT 1 ÇEVRİM
MOVWF SAYAC1 ;BU KOMUTTA 1 ÇEVRİM
DONGU1
MOVLW H'FF' ;1X256 ÇEVRİM (255 H'FF' SAYISINA KARSILIK GELİYOR)
MOVWF SAYAC2 ;1X256 ÇEVRİM
DONGU2
DECFSZ SAYAC2,F ;1X256X256 ÇEVRİM (SAYAC1 VE SAYAC2 İÇERİĞİ 255 OLDUGUNDAN )
GOTO DONGU2 ;2X255X255 (GOTO 2 ÇEVRİM OLDUGUNDAN 2 İLE ÇARPTIK)
DECFSZ SAYAC1,F :1X255
GOTO DONGU1 ;2X255
RETURN: 2 ÇEVRİM
--------------------------------
TOPLAMDA:196608 ÇEVRİM EDER 4MHZ KRİSTAL KULLANIRSAN BU YAKLAŞIK 197ms TEKABUL EDER.BU DURUMDA ANLAMAK ZOR BENDE İLK BAŞTA ANLAMADA ZORLUK ÇEKTİM KISAYOLUNU VEREYİM ŞİMDİ;
arkadaşlar şimdi sayac1'e attığımız sayıya M,sayac2'ye attığımız sayıya N diyelim bu durumda formulize edersek
çevrim sayısı=3xMxN olur.Max sayac1 ve sayac2 ye 255 atabildiğimizden toplamda max 197ms geçikme sağlar bize bu döngü.
Ama bize daha çok zaman gerekiyor 1sn 2sn ....10sn gibi bu durumda bir sayaç daha belirleriz onuda döngüye sokarız.Şöyle diyim şimdi 2 döngü ile max. 197ms elde ediyoruz peki 1sn elde etmek istesek sayac3 hangi degeri alır dersek:
sayac3=1sn/197ms=5 degerini alır.
ewet 3 döngü ile ise max 50sn elde edebiliriz niyemi çünkü sayac3 e max 255 yükleyebiliriz ohalde:
sayac3=255=x/197ms dersek burdan x geçikme süresi kabul edersek
x=50sn çıkar buda hayli hayli işimizi görür.4.döngüye gerek yok
şimdi 1 sn geçikme yapan altprogram yazarsak
GECIKME
MOVLW H'05'
MOVWF SAYAC1
DON1
MOVLW H'FF'
MOVWF SAYAC2
DON2
MOVLW H'FF'
MOVWF SAYAC3
DON3
DECFSZ SAYAC3,F
GOTO DON3
DECFSZ SAYAC2,F
GOTO DON2
DECFSZ SAYAC1,F
GOTO DON1
RETURN
umarım faydalı olur.....
Son düzenleme: