pic16f628a hakkında kolay ama benim anlamadığım bir konu

hlyahkan

Paylaşımcı üye
Katılım
2 Nis 2012
Mesajlar
722
Puanları
133
arkadaşlar yardımınızı bekliyorum. istediğim program şu rb0 çıkışından sonsuz döngü şeklinde 1 saniye 1, 1 saniye 0 çıkış verecek.. rb1 çıkışından ise 120 dakika 1, 120 dakika 0 çıkış verecek program yazmak istiyorum ama yapamıyorum. yardımlarınız bekliyorum, hayırlı ramazanlar...
 

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
30
Eğer sapma istemiyorsan ve birden fazla işlem yaptıracaksan çok da kolay değil.. Bi miktar sapma sorun değil diyorsan da; kristal bilgileri, kullanacağın pic in modeli ve hangi dilde yardım istediğin lazım..
 
Konu Sah
hlyahkan

hlyahkan

Paylaşımcı üye
Katılım
2 Nis 2012
Mesajlar
722
Puanları
133
sadece bu işlem yaptırılacak 5 10 dk lık sapmalar bile fazla önemli değil. yazılacak dil farketmez asm olsa daha iyi olur az da olsa anlıyorum asm. çok teşekkürler hayırlı ramazanlar
 

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
30
O zaman kolay olması açısından 32768 kristale göre düşünelim.. Ve 16Flerden 16F628 kullandığınızı varsayalım..

16Flerde GOTO komutundaki $ işareti bulunduğu adresi gösterir.. GOTO $-h'05' demişsem hemen üstündeki 5 komut tekrar edilecek demektir.. Hemen üstündeki 5. komuta atlama yapar yani.. MPLAB simülatörde bi dene istersen.. Saatler sürecek denemesi sanırım.. :) TRIS ayarları ve konfigurasyonunu yaparsın sanırım.. Register tanımlamalarını da halledip altına bu kodu yapıştır tamamdır.. %100 çalışacak demiyorum, gözümden kaçan bişey olabilir ama,, bu şekilde yapabilirsin.. İstersen şu goto lara da sayılar yerine etiket ver.. Karışmasın diye böyle yaptım..


MOVLW d'120'
MOVWF DAKIKA

MOVLW d'30'
MOVWF SANIYE

MOVLW d'64' ;1 saniye bekler..
MOVWF SAYAC1
CLRF SAYAC0
NOP
DECFSZ SAYAC0, F
GOTO $-h'02'
BSF PORTB, 0 ;RB0=1 yapar..

MOVLW d'64' ;1 saniye bekler..
MOVWF SAYAC1
CLRF SAYAC0
NOP
DECFSZ SAYAC0, F
GOTO $-h'02'
BCF PORTB, 0 ;RB0=0 yapar..

DECFSZ SANIYE, F ;Eğer 30 defa buraya gelmemişse 1dk geçmemiş demektir..
GOTO $-h'0F'

DECFSZ DAKIKA, F ;1dk zaman geçti.. Her dk başı 120 den geriye say..
GOTO $-h'13'
MOVLW b'00000010' ;120dk bitince RB1 i invert eder..
XORWF PORTB, F
GOTO $-h'18'
 
Son düzenleme:
Konu Sah
hlyahkan

hlyahkan

Paylaşımcı üye
Katılım
2 Nis 2012
Mesajlar
722
Puanları
133
ayarları yapamadım kusura bakmayın :(
 

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
30
programlarken ne kullanıyorsunuz ki? MPLAB da bunu ekleseniz başına yeterli.. Önemli olan kristal 32768 Hz olacağı için LP osc u seçmeniz..

__CONFIG _BODEN_ON &_CP_ALL &_DATA_CP_OFF &_PWRTE_ON &_WDT_OFF &_LVP_OFF &_MCLRE_OFF &_LP_OSC

ORG h'00'
MOVLW h'07'
MOVWF CMCON

BSF STATUS, RP0
MOVLW b'11111100'
MOVWF TRISB
BCF STATUS, RP0


........yukarıdaki komutlar.....
 

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
30
Programı simüle etmeden yazdığımdan döngülerden birini unutmuşum,, çeşitli hatalar yapmışım vs.. Kusura bakmayın.. Düzeltmeleri yapıp yükleyeceğim tekrar..
 
Son düzenleme:

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
30
Alttaki kod çalışır halidir. Saniyelik döngülerini simüle ettim,, genellikle 1 saykıl sapma olmadan saniyelik pals veriyor.. 32768Hz LP osilatör ile çalıştırılmalıdır.. 120dk lık döngüyü deneyemedim,, uzun geldi.. :) Herhangi hata varsa düzeltirseniz sevinirim..

Kod:
;ERRORLEVEL    -205, -202, -230
LIST    P=16F628A;,F=INHX16
include    "P16F628A.inc"
PROCESSOR    "PIC16F628A"

__CONFIG _BODEN_ON &_CP_ON &_PWRTE_ON &_WDT_OFF &_LVP_OFF &_MCLRE_OFF &_LP_OSC

CBLOCK    h'20'
    SAYAC0
    SAYAC1
    SANIYE
    DAKIKA
ENDC

    ORG    h'00'
PORT_KUR    MOVLW    h'07'
    MOVWF    CMCON
    
    BSF    STATUS,    RP0
    MOVLW    b'11111100'
    MOVWF    TRISB
    BCF    STATUS,    RP0
    
    
BASLA
    MOVLW    d'120'
    MOVWF    DAKIKA
    
SNY_YENILE    MOVLW    d'30'
    MOVWF    SANIYE
    
SNYLK_PLS    MOVLW    d'8'        ;1 saniye bekler..
    MOVWF    SAYAC1
    MOVLW    d'250'
    MOVWF    SAYAC0
    NOP
    DECFSZ    SAYAC0,    F
    GOTO    $-h'02'
    DECFSZ    SAYAC1,    F
    GOTO    $-h'04'
    BSF    PORTB,    0    ;RB0=1 yapar..
    
    MOVLW    d'8'        ;1 saniye bekler..
    MOVWF    SAYAC1
    MOVLW    d'251'
    MOVWF    SAYAC0
    NOP
    DECFSZ    SAYAC0,    F
    GOTO    $-h'02'
    DECFSZ    SAYAC1,    F
    GOTO    $-h'04'
    BCF    PORTB,    0    ;RB0=0 yapar..
    
    NOP
    DECFSZ    SANIYE,    F    ;Eğer 30 defa buraya gelmemişse 1dk geçmemiş demektir..
    GOTO    SNYLK_PLS
    
    DECFSZ    DAKIKA,    F    ;1dk zaman geçti.. Her dk başı 120 den geriye say..
    GOTO    SNY_YENILE
    MOVLW    b'00000010'        ;120dk bitince RB1 i invert eder..
    XORWF    PORTB,    F
    GOTO    BASLA
    
END
Hex e çevilemezse diye.. Bu da hex kodu.. hex uxantılı bi dosya oluşturup içine attığınızda yüklenebilir hale gelir..

Kod:
:020000040000FA
:1000000007309F008316FC30860083127830A300EF
:100010001E30A2000830A100FA30A0000000A00BA2
:100020000E28A10B0E2806140830A100FB30A000FA
:100030000000A00B1828A10B182806100000A20B26
:0C0040000A28A30B0828023086060628B8
:02400E00401F51
:00000001FF
 

Sponsor Bağlantı

Forum istatistikleri

Konular
106,468
Mesajlar
750,317
Kullanıcılar
395,718
Son üye
ozpolatyusuf

Yeni konular

Üst