20-30 dk zaman gecikme programı

Başlatan crapsh, 22 Ocak 2013, 21:13:30

crapsh

Merhaba arkadaşlar,

Assembly dilinde kısa zaman gecikmeleri yazabiliyorum fakat böyle bir uzun zaman gecikme sağlamak için nasıl bir döngü yazılabilir önerileriniz nelerdir ? kullanmak istediğim pic 12f675. diğer dilleride bilmiyorum daha kolay olabilir yardım ederseniz çok sevinirim ...

hasqn54

#1
GECIKME 
  MOVLW  D'BURAYA KAÇ DK İSTİYOSAN YAZ DINMI TAMM DIR :D '
  MOVWF  SAYAC4         
DON4
  MOVLW  D'120'
  MOVWF  SAYAC1   
DON1       
  MOVLW  D'200'   
  MOVWF  SAYAC2   
DON2       
  MOVLW  D'250'   
  MOVWF  SAYAC3   
DON3       
 
DECFSZ  SAYAC3,F   
  GOTO  DON3   
  DECFSZ  SAYAC2,F   
  GOTO  DON2   
  DECFSZ  SAYAC1,F   
  GOTO  DON1
  DECFSZ  SAYAC4,F   
  GOTO  DON4       
RETURN       

camby

Şöyle bir link vardı:

http://www.piclist.com/tecHREF/piclist/codegen/delay.htm

-------------------

Adım adım git 1 saniyelik bir delay komutun varsa ve bunu 60 kere çağırırsan , 1dk elde edersin. 1dk 'lık bir delay fonksiyonun varsa ve bunu 60 kez çağırırsan 1 saat elde edersin , istediğin gibi şekillendirebilirsin. Her bir bit ile bekleme süreni 2'ye katlarsın.

Birim bekleme fonksiyonundaki hata , uzun hatalarında üstüste binecektir buna da dikkat etmek gerekir. Timer daha sağlıklı olabilir sonraki aşamalarda.

crapsh

#3
yardımınız için çok teşekkür ederim fakat şuan zaman registerlerini yazıyorum şu şekilde

SAYAC1   EQU   H'0C' ; zaman registerleri
SAYAC2   EQU   H'0D'
SAYAC3   EQU   H'0E'
SAYAC4   EQU   H'0F'

fakat hata veriyor nasıl düzeltebilirim ?

hata mesajı :

Message[302] : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302]  : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[113]    : Symbol not previously defined (TIMER)
Warning[207]  : Found label after column 1. (DON4)
Warning[207]  : Found label after column 1. (DON2)

Ayrıca bu 16f84 için bu programı 12f675 e yazmaya kalktığımda çok fazla hata veriyor. heralde registerleri portları tanımlamak biraz daha farklı yardımlarınız için tekrar teşekkür ederim.


16F84 sorununu çözdüm fakat 12f675 de aynısı uygulamada yardımınızı  bekliyorum arkadaşlar..

yusufburak

Bu komuta gelmeden önce workingin hangi bankta olduğunu kontrol edebilir misin ?
Öğretici aranıyor :)

fatih6761

Dikkatli okursanız daha net görürsünüz:
Alıntı yapılan: crapsh - 24 Ocak 2013, 13:09:45
hata mesajı :

Message[302] : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302]  : Register in operand not in bank 0.  Ensure that bank bits are correct.

Error[113]    : Symbol not previously defined (TIMER)
Warning[207]  : Found label after column 1. (DON4)
Warning[207]  : Found label after column 1. (DON2)

Evet Bank seçiminde sorun var ama öncelikli olan kırmızı yani Error. Burada TIMER tanımlanmamış diyor. Programın tamamını yollayabilirseniz daha kolay hallederiz. Ama öncelikle bu TIMER sembolünü düzeltin.
Sonrasında da Bank geçişlerini kontrol edin. Programın hangi noktasında hangi bankta olmanız gerektiğini tekrar hesaplayın.

crapsh

;led
   LIST   P=16F84   
   INCLUDE   "P16F84.INC"
SAYAC1   EQU   H'0B'
SAYAC2   EQU   H'0C'
SAYAC3   EQU   H'0D'
SAYAC4   EQU   H'0E'
   CLRF   PORTB
   BSF   STATUS,5
   CLRF   TRISB
   MOVLW   H'FF'
   MOVWF   TRISA
   BCF   STATUS,5
BASLA
   BTFSS   PORTA,0
   GOTO   BASLA      
   MOVLW   H'FF'
   MOVWF   PORTB
   CALL   TIMER
   CLRF   PORTA
   CLRF   PORTB
   GOTO   BASLA
TIMER 
   MOVLW   D'30'
   MOVWF   SAYAC4         
   DON4
   MOVLW   D'120'
   MOVWF   SAYAC1   
DON1       
   MOVLW   D'200'   
   MOVWF   SAYAC2   
DON2       
   MOVLW   D'250'   
   MOVWF   SAYAC3   
DON3       
 
   DECFSZ   SAYAC3,F   
   GOTO   DON3   
   DECFSZ   SAYAC2,F   
   GOTO   DON2   
   DECFSZ   SAYAC1,F   
   GOTO   DON1
   DECFSZ   SAYAC4,F   
   GOTO   DON4       
   RETURN
   END

bu 16f84 de çalışıyor bunu 12f675 e derleyemiyorum arkadaşlar.

RaMu

Hata nedenini anlamak için kodu görsek iyi olur. Ayrıca 20-30 dk bekleme için yazılacak program bu şekilde olursa bekleme esnasında pic başka herhangibir işlem yapamaz öyle 20-30 dk boşuna bekler, belki istenende budur bilemiyorum ama timer kullanıp kesmeye girerek bekleme döngüsü oluşturmak daha karlı olur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fatih6761

Öcenlikle kodda PORTA ve PORTB kollanmışsınız. 12F675'te bu portlar yok. Sadece GPIO var ve PORTA ile aynı bellek adresini ifade ediyor. Bu kısmı nasıl değiştireceksiniz?
Hata için ise MPASM veya MPLAB sürümünüzü güncelleyin. Benim bilgisayarımda başarıyla derleniyor. Kodda bir sorun yok.

emosamca

TIMER bir register değeri olabilir. Bence TIMERX gibi birşey kullan.

fatih6761

TIMER0  TIMER1 gibi kullanılmadıkça bir referansı yok. Ama istenirse değiştirilebilir. Hem kod anlaşılabilirliği açısından DELAY daha mantıklı.