PIC 16f84 de İki Farklı Gecikme Oluşturmak

Katılım
1 Kas 2006
Mesajlar
30
Puanları
1
Yaş
39
Merhaba ustalar yapmaya uğraştığım 16f84 te iki farklı gecikme devresi kullanmak yani RA0 2 sn yanıcak 10 dk sönük kalacak bunu yapmak için nasıl bir kod kullanmam gerekiyor. Aşağıdaki gibi bir uygulam denedim fakat olmadı acaba hatam nerede ????
Yardımcı olursanız sevinirim....
Kod:
;****************************************************************************
; PROGRAM BASLANGICINDA ISLEMCI ILE ILGILI TANIMLAMALAR YAPILMALIDIR
;****************************************************************************
TANIMLAMALAR:
 list      p=16F84              ; DERLEYICIYE ISLEMCI TANITILIR
 #include <p16F84.inc>          ; PIC16F84 TANIMLAMA DOSYASI

 __CONFIG   _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC
;****************************************************************************
;
;****************************************************************************
DEGISKENLER:
     SAYAC4 EQU H'0020'
        SAYAC1 EQU H'0021'
        SAYAC2 EQU H'0022'
        SAYAC3 EQU H'0023' 
        msb  EQU H'0024'
        lsb  EQU H'0025'
BASLANGIC:
PORTLARI_AYARLA:
 CLRF PORTB   ; RESET portb(port a yı sil)
 CLRF PORTA   ; RESET portA(port b yi sil)
 BSF STATUS, RP0  ; BANK 1 GECILIR
 MOVLW B'00000000'  ; RA0-5=GIRIS
 MOVWF TRISA
   MOVLW B'00000000'  ; RA0-5=GIRIS
 MOVWF TRISB
 BCF STATUS, RP0  ; BANK 0 GECILIR
 
;****************************************************************************
; makina deneme 2 zaman gecikmesi
;**************************************************************************** 
PROGRAM:

    ;1.ADIM
 MOVLW B'00000001' ;AKU YE SABIT BIR SAYI YUKLENIR
 MOVWF PORTA  ;AKUDEKI SAYI PORTB YE YUKLENIR
   CALL     SAAT
    ;2.ADIM
 MOVLW B'00000000' ;AKU YE SABIT BIR SAYI YUKLENIR
 MOVWF PORTA  ;AKUDEKI SAYI PORTA YA YUKLENIR
 CALL BEKLET_100MS  
  ;3.ADIM
 MOVLW B'00000010' ;AKU YE SABIT BIR SAYI YUKLENIR
 MOVWF PORTA  ;AKUDEKI SAYI PORTA YA YUKLENIR
 CALL SAAT   
 
    ;4.ADIM
 MOVLW B'00000000' ;AKU YE SABIT BIR SAYI YUKLENIR
 MOVWF PORTA  ;AKUDEKI SAYI PORTA YA YUKLENIR
 CALL BEKLET_100MS  
                        
 
 GOTO PROGRAM  ;ALGORITMA TEKRARLANIR
; 4MHz CLOCK ICIN BEKLETME RUTINLERI
BEKLET_100MS:
 bekle_10_dk
   
 movlw 0x2A
 movwf SAYAC1
 movlw 0x16
 movwf SAYAC2
 movlw 0x24
 movwf SAYAC3
 movlw 0x04
 movwf SAYAC4
Bekle_0
 decfsz SAYAC1, f
 goto $+2
 decfsz SAYAC2, f
 goto $+2
 decfsz SAYAC3, f
 goto $+2
 decfsz SAYAC4, f
 goto Bekle_0
   
 nop
        nop
    RETURN
SAAT
DLY  ;YAKLASIK 100 MILI SANIYE
  CLRWDT
         movlw   D'600'
         movwf   msb
  GOTO DLY1
     DLY1 
  movlw   D'300'
         movwf   lsb
     DLY2     
  decfsz  lsb,F 
         goto    DLY2 
         decfsz  msb,F 
         goto    DLY1 
   RETURN
     END
 
Moderatör tarafında düzenlendi:
output_high(PIN_A0);
delay_ms(2000);
output_low(PIN_A0);
for(a=0;a<10;a++) delay_ms(60000);

Assemblerdan vazgec, kendini sinirlarsın başka birsey olmaz. Kasmaya hic gerek yok. Kazancın da olmaz
 
bunu hemen deneyeceğim katkın için teşekkür ederim ama bunu hangi dilde yazdınız
 
sanırım c programı ile yazılmış
 
sayın silvestir ustam sabahtan beri bunu programımda kullanmaya çalışıyorum fakat pic c bilmediğim için uygulayamadım acaba sizden programın tamamını yazmanızı istesem çok şey mi istemiş olurum ?

arkadaşlar picc bilmiyorum lütfen yadım edin. Sabahtan beri kafam şişti ama daha bir arpa boyu yol alamadım
 
Moderatör tarafında düzenlendi:
CCS C denilen programa göre yazmış arkadaş.
İsabetli bir seçim.
Bu program olmadan derleyemezsin.
İnternetten araştır , Serdar Çiçek hocanın " CCS C ile pic programlama " kitabını al.
Çok güzel öğretici bir kitap.
Movlf... movwf .....yazmaktan kurtulursun demek istiyor.
Tabii bu işi devamlı yapacaksan.
İstediğin süreç peşi sıra devam edecekse aşağıdaki gibi ek gerekir.
Sadece bir kez yanık/sönük olacaksa yukarıdaki gibi yazmak lazım.

Tekrarlanan :

Kod:
#include <F84.h>
int a;
void main()
{
while(true)
{ 
output_high(PIN_A0);
delay_ms(2000);
output_low(PIN_A0);
for(a=0;a<10;a++) delay_ms(60000);
}
}


Buna göre hex :

Kod:
:1000000000308A001828000012308400000803190C
:10001000172801308D008C018C0B0C288D0B0B28C0
:100020004A308C008C0B12281528800B09280800F8
:1000300084011F30830583160510831205140830D0
:100040009100FA3092000420910B212883160510AC
:100050008312051090011008093C031C3828F03069
:100060009100FA3092000420910B3128900A2B283D
:040070001B286300E6
:02400E00F23F7F
:00000001FF
;PIC16F84
 
bu iş ile sürekli uğraşacağım dediğiniz kitabı int. alabilirmiyim en kısa zamanda edineceğim tüm bilgi ve yardımlarınız için teşekkür ederim
 
sayın kazımuğur verdiğiniz kodları derlerken bana hata veriyor acaba benim kullandığım pic c programımı hatalı delay_ms lerden sonraki parantezler hatalı diyor acaba hatam nerede
 
Projesine wizard ile başlamışsa ve kristal seçimi yapmışsa ayrıca yazılmasına gerek yoktur.
 

Forum istatistikleri

Konular
128,302
Mesajlar
916,552
Kullanıcılar
450,139
Son üye
muhamedarslantas38

Yeni konular

Geri
Üst