avatar_anlhlc

Kesme Tipi saat

Başlatan anlhlc, 29 Mart 2017, 17:24:49

anlhlc

Arkadaşlar merhaba kesme tipi saat yapmaya calışıyorum bana göre bi sorun yok ama programım çalışmıyor. Saniye 1 oluyo ve hemen sıfırlıyor bu hep böyle devam ediyor program kodları aşağıdadır yardımcı olursanız cok sevinirim kolay gelsin

PORTA=0:PORTB=0
  TRISB=%00000000
  TRISA=%00000000
  '---------------------------------------------------------------
@ DEVICE PIC16F628A
@ DEVICE PIC16F628A,WDT_OFF
@ DEVICE PIC16F628A,PWRT_ON
@ DEVICE PIC16F628A,PROTECT_OFF
@ DEVICE PIC16F628A,MCLR_OFF
@ DEVICE PIC16F628A,INTRC_OSC_NOCLKOUT
'------------------------------------------------------------------
DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 7
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 6
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
'------------------------------------------------------------------
ON INTERRUPT GOTO KESME
OPTION_REG=%10000101
INTCON=%10100000
TMR0=0
CMCON=7
'------------------------------------------------------------------
SAYAC VAR BYTE
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
'------------------------------------------------------------------
CLEAR
PAUSE 200
LCDOUT $FE,1
BASLA:
LCDOUT $FE,$84,DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
GOTO BASLA
'------------------------------------------------------------------
DISABLE
KESME:
SAYAC=SAYAC+1
IF SAYAC=61 THEN
SAYAC=0
SN=SN+1
ENDIF
IF SN=60 THEN
SN=0
DAK=DAK+1
ENDIF
IF DAK=60 THEN
DAK=0
SAAT=SAAT+1
ENDIF
IF SAAT=24 THEN
SAAT=0
GUN=GUN+1
ENDIF
IF GUN=365 THEN
GUN=0
ENDIF

INTCON.2=0
RESUME
ENABLE
END


ete

#1
SN=61*256*64
bu matematik ifadeye iyi bak!!!!.
SN değişkenin Byte cinsinden yalnızca 0-255 arası sayıları taşıyabilir. Peki sen ne yapmışsın çarpım parametren bile 255 den büyük (256) bu çarpım sonucu hep sıfır olur. Bu yüzden programında doğru çalışmaz.

Kesme tipi saat yapılırken timer0 ın belirli süre sayıp kesme oluşturması ve bu kesmelerin belirli bir adedininde 1000 us ye ye yaklaşması prensip alınır.
Kısaca diyelimki TMR0'ı öyle bir ayarladınki her kesme süresi 10 ms sürüyor. Peki 1sn=1000 ms olduğuna göre sana 10 adet kesme gerekir. Demekki kesmeleri sayacaksın 10 kesme olunca SN=SN+1 yapacaksın. Öyle hesapla sn hesaplanmaz.
Öncelikle TMR0 sayacını ne kadarlık süre için kuruyorsun ona odaklan. Sonra kaç kesme lazım sana onu belirle ve gelen kesmeleri say.
Bu işle ilgili örnek var iken yeniden olayı keşfetmek zorunda değilsin. Zaten keşfedememişsin. Bence örneğe bak.
Saat projeleri içinde olması gerek. Hatta ders notlarında kesme ile ilgili kısımda bile olması gerekir.

Ete

anlhlc

Eyvallah hocam sorunu çözdüm anladım.
Teşekkürler..

Powered by EzPortal