PIC 16F877A ile spot (lamba) gösteri devresi
PIC 16F877A entegre optodiak(lambalardaki akımdan entegreyi yalıtmak için) kullanarak lambaları belirli modlara göre göre yakmak istiyorum...
Ekte ki isis çiziminde devrede sorun yok ama bunun yazılımı için yardım edebilecek biri var mı?
Biraz kod yazdım ama sonunu getiremedim...
Bu kodlamada yapmaya çalıştıgım RE1 portu 1 oldugunda SAYI adlı registeri 1 artıması RE2 portu 1 oldugunda SAYI registerini 1azaltması ve RE3 portu 1 oldugunda SAYI registerinin sıfırlamasını istiyorum. Bundan sora ise sayı kaç ise o sayıya karşılık gelen modu çagırması ve lambaları o düzende yakmasını istiyorum.
Sonunu getiremediğim kod; bana biri bunu bitirmek için yardım edebilir mi?
-------------------------------------------------------------------------------------
list p=16f877a
#include p16f877a.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
ORG 0x0000
SAYI EQU 0X21 ;SAYI 0X0C nolu özle registere eşit/odur dedik... (Kısaca onun adresini verdik.)
bsf STATUS5 ;Bank1'e geç
movlw 0X00 ;w'ye 0X00 sayısını yükler.
movwf TRISA ;w'ye yüklenen sayıyı TRISA'ye atat ve TRISA'yi çıkş yapar.
movwf TRISB ;w'ye yüklenen sayıyı TRISB'ye atat ve TRISB'yi çıkş yapar.
movwf TRISC ;w'ye yüklenen sayıyı TRISC'ye atat ve TRISC'yi çıkş yapar.
movwf TRISD ;w'ye yüklenen sayıyı TRISD'ye atat ve TRISD'yi çıkş yapar.
movlw 0XFF
movwf TRISE ;w'ye yüklenen sayıyı TRISE'ye atat ve TRISE'yi giriş yapar.
bcf STATUS5 ;Bank0'a geç
movlw 0X00 ;w'ye 0X00 sayısını yükler.
movwf PORTB ;w'ye yüklene 0X00 sayısını PORTB'ye yükler ve PORTB'yi sıfırlar.
movwf PORTC ;w'ye yüklene 0X00 sayısını PORTC'ye yükler ve PORTC'yi sıfırlar.
movwf PORTD ;w'ye yüklene 0X00 sayısını PORTD'ye yükler ve PORTD'yi sıfırlar.
movlw 0X08
movwf PORTA ;w'ye yüklene 0X08 sayısını PORTA'ye yükler ve PORTA'yi sıfırlar. (PORTA'nın 4. biti(portu özel port oldugu için 0X00 yerine 0X08 yazdık)
BASLA:
clrf SAYI ;SAYI registerini sıfırla.
TEST_PORTE_B1:
btfsc PORTE0X01 ;PORTE'nin 1. portunu kontrol eder 0 ise bi sonrakini pas geçer.
incf SAYI ;SAYI'yı kontrol eder ve degerini 1 artır.
movwf SAYI ;w'deki bilgiyi SAYI registerine yaz.
movwf PORTC ;w'deki bilgiyi PORTC'ye yaz.
TEST_PORTE_B2:
btfsc PORTE0X02 ;PORTE'nin 2. portunu kontrol eder 0 ise bir sonrakini pas geçer.
decf SAYI ;SAYI registerini 1 azaltır
movlw SAYI ;Sayıyı w'ye yazar.
movwf PORTC ;w'yü PORTC'ye yükler
TEST_PORTE_B3:
btfsc PORTE0X04 ;PORTE'nin 3. ucunu konrol eder
movlw 0X00 ;w'ye 0X00 sayısını yaz.
movlw SAYI ;w'deki bilgiyi SAYI registerine yaz.
movwf PORTC ;w'yü PORTC'ye yükler
BEKLE:
movlw 0X5E ;w'ye 0X5E sayısını yaz.
movwf 0X00 ;w'deki bilgiyi 0X00 registerine yaz.
tekrar
nop ;boş bekle
nop ;boş bekle
nop ;boş bekle
nop ;boş bekle
decfsz 0X0C ;registerin içerigini 1 azaltır. REgister içerigi 0 ise sonraki konuma geçer sonuç w'ya yada f'e yüklenir.
goto tekrar ;tekrar'a git.
return ;geldigin yere git.
;
; BURADA MODLARI ÇAGIRACAK PROGRAM VE MODLARIN OLMASI
; GEREKLİ
;
goto BASLA ;BASLA'ya git.
end ;Programı bitir.
Konu KAPTANIDERYA tarafından (30. April 2008 Saat 11:09 AM ) değiştirilmiştir.
|