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