Pic 16f877a da ledin yanması demek kullanılan potrun ilgili bitinin "1" olması demektir.Yanan bir ledin sağa sola hareket etmesini sağlayan özel komutlar vardır:
rlf : Açılımı "rotate left file",içeriği sola kaydırmaya yarar.Örneğin portun içinde b'01000000' ise rlf komutu bir kere uygulandığında b'10000000' şeklinde olur.
rrf: Açılımı "rotate right file",içeriği sağa kaydırmaya yarar.Örneğin portun içinde b'01000000' ise rrf komutu bir kere uygulandığında b'00100000' şeklinde olur.
portun içeriğini sağa sonra sola kaydıran örnek kodu inceleyelim:
Bu kodda PORTB nin içine en başta b'00000001' sayısı yerleştiriliyor,içerik 7. bit 1 olana kadar her defasında bir bit sola kaydırılıyor, çünkü 7. bit 1 olduğunda sola kayacak yer klamıyor,bu kontrolden sonra sağa kaymalar başlayacaktır.Bu aşamada da içerik0. bit 1 olana kadar her defasında bir bit olmak üzere sağa kaydırılıyor ,0. bit 1 olduğunda yine sola kayma olacaktır.
SAYAC1 EQU h’0C’ ;gecikme sayacları için adresler belirtiliyor
SAYAC2 EQU h’0D’
CLRF PORTB ;potrbnin içi en başta temizleniyor
BSF STATUS,5 ;bank1 tris registerlarının ayarlanması için seçildi
CLRF TRISB ;portb çıkış portu yapıldı
BCF STATUS,5 ;port içeriği ile ilgili işlem yapılması için tekrar bank0 a geçildi
MOVLW h’01’
MOVWF PORTB ;portb nin içine b'00000001' sayısı atıldı
SOL:
CALL GECIKME;en başta bi bekleme anı oluyor
RLF PORTB,F ;içerik 1 birim sola kaydı
BTFSS PORTB,7 ;portbnnin 7. biti kontrol ediliyor,
1 ise sağa kaydırma başlayacak 1 değilse tekrar sola kayma olacaktır
GOTO SOL
SAG:
CALL GECIKME ;bekleme yapılıyor
RRF PORTB,F ;içerik 1 birim sağa kaydırılıyor
BTFSS PORTB,0 ;portbnin 0. biti kontrol ediliyor 1 ise sola kaymaya geçilecek,0 ise sağa ;kaymaya devam
GOTO SAG
GOTO SOL
GECIKME:
MOVLW h’FF’
MOVWF SAYAC1 ;gecikme için sayac1 in içine h'FF' sayısı atılıyor
DONGU1:
MOVLW h’FF’
MOVWF SAYAC2 ;gecikme için sayac1 in içine h'FF' sayısı atılıyor
DONGU2:
DECFSZ SAYAC2,F
GOTO DONGU2 ;sayac2 nin içindeki sayı 0 olana kadar her defasında 1 azalt,0 olunca saya1 i ; ;azaltmaya git
DECFSZ SAYAC1,F ;sayac1in içi 0 olana kadar her defasında 1 azalt,0 olduğunda return yap
GOTO DONGU1
RETURN ;en son callın yapıldığı adrese gider
END ;programo bitir
DERYA GÜNDÜZ
Basit Oyunlar / Uygulamalar
7 yıl önce
Hiç yorum yok:
Yorum Gönder