TMR0 Kullanılarak 00:00:00:00 olduğunda çıkış veren de

Başlatan solidus, 30 Haziran 2009, 00:41:04

solidus

@ DEVICE pic16F84              ' System Device	
@ DEVICE pic16F84, WDT_ON      ' Watchdog Timer
@ DEVICE pic16F84, PWRT_ON     ' Power-On Timer
@ DEVICE pic16F84, PROTECT_OFF ' Program Code Protection
@ DEVICE pic16F84, XT_OSC

Define LCD_DREG     PORTB ' LCD data portunu belirle
Define LCD_DBIT     4 ' 4 bit'lik veri yolu
Define LCD_RSREG    PORTB ' LCD register seçme portunu belirle
Define LCD_RSBIT    2 ' LCD register seçme bitini belirle 
Define LCD_EREG     PORTB ' LCD enable portunu belirle
Define LCD_EBIT     3 ' LCD enable bitini belirle
Define LCD_LINES    2 ' LCD'deki satir sayisi
TRISA=%00001111
TRISB.1=0
salise     var byte
saniye     var byte 
dakika     var byte 
saat       var byte 
SAYAC      VAR BYTE 
saliseyeni var byte
saniyeyeni var byte    
dakikayeni var byte 
saatyeni   var byte

START_STOP VAR PORTA.0
ARTI       VAR PORTA.1 'Ayar arttırma butonu 
EKSI       VAR PORTA.2 'Ayar azaltma butonu
PIN_OUT    var PORTB.1 
'-----------------------------------------------------------------------------
PIN_OUT=0
clear  'tüm değişkenler sıfırlandı
pause 200

BASLA: 

lcdout $fe,$82,"Kronometre" 
LCDOUT $FE,$C0,DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye,":",DEC2 salise 
pause 100 
if START_STOP=1 then 
while START_STOP=1 
wend 
gosub SAYMAYABASLA
ELSE  
IF ARTI=1 THEN
GOsub AYAR_ARTI
ELSE
IF EKSI=1 THEN
GOSUB AYAR_EKSI
endif
ENDIF
ENDIF
GOTO BASLA 
 

SAYMAYABASLA: 
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git. 
OPTION_REG=%10000100 'Pull up dirençleri İPTAL- Bölme oranı 1/64. 
INTCON=%10100000 'Kesmeler aktif ve TMR0 kesmesi aktif 
TMR0=0 

ekransay: 
LCDOUT $FE,$C0,DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye,":",DEC2 salise 

if START_STOP=1 then 
saliseyeni =salise
saniyeyeni =saniye 
saatyeni   =saat 
dakikayeni =dakika 
while START_STOP=1 
wend 
goto duragan_zamani_goster 
else 
goto ekransay 
endif 

'programda duraklama yapınca tmr0'ı durdurmadım. 

duragan_zamani_goster: 
'LCDOUT $FE,$C0,DEC2 saatyeni,":",DEC2 dakikayeni,":",DEC2 saniyeyeni,":",DEC2 saliseyeni 

if START_STOP=1 then 
while START_STOP=1 
wend 
goto devamet 
else 
GOTO duragan_zamani_goster 
endif 

DEVAMET: 
saat=saatyeni :dakika=dakikayeni
saniye=saniyeyeni :salise=saliseyeni 

goto ekransay
 
AYAR_ARTI:

if ARTI=1 THEN
dakika=dakika+1
pause 50
endif
if dakika=60 then
dakika=00
saat=saat+1
if ARTI=1 then 
goto AYAR_ARTI
endif
endif
'endif
saniye=0:salise=0
RETURN

AYAR_EKSI:

if EKSI=1 THEN
dakika=dakika-1
pause 50
endif
if dakika=00 then
dakika=60
saat=saat-1
if ARTI=1 then 
goto AYAR_EKSI
endif
endif
'endif
saniye=0:salise=0
RETURN



 DISABLE 
KESME: 
SAYAC=SAYAC+1 
IF SAYAC=1 then 
SAYAC=0 
salise=salise-1 
IF salise=0 THEN 
salise=99 
saniye=saniye-1 
IF saniye=00 THEN 
saniye=59 
dakika=dakika-1 
IF dakika=00 THEN 
dakika=59 
saat=saat-1 
IF saat=00 THEN saat=23 
ENDIF 
ENDIF 
ENDIF 
ENDIF 
INTCON.2=0 
RESUME 
ENABLE 

END




Arkadaşlar ayarlanan süre sonunda portb.1 deki ledi yakmak istiyorum. Fakat kronometre deişik! :) çalışıyor. Çıkış satırlarını nereye ve nasıl ekleyeceğimi çözemedim. Vakti olan arkadaşlar ilgilenirlerse çok sevineceğim. Kodlar kısmen alıntıdır.
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

muhittin_kaplan


solidus

Alıntı yapılan: "muhittin_kaplan"wdt in eden on yada neden sıfırlamıyorsun

Dostum WDT yi OFF yapmanın burada nasıl bir etkisi olabilir ? Ben gene de denedim ama herhangi bir etkisi olmadı.
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

karbal656

saat,dakika,saniye,salise yi and işlemine tabi tutman gerek.
Protonda şöyle oluyor. picbasic te ona benzerdir.
If saatyeni=0 And dakikayeni=0 And saniyeyeni=0 And saliseyeni=0 Then PORTB.0=1

Zanedersem
ekransay:
etiketine koyarsan olur.

KONYALI

https://320volt.com/pic16f877-ile-lcd-kronometre-ve-geri-sayim-devresi
linkteki devrenin gerisayım kısmında ufak bi değişiklikle istediğinizi yapabilirsiniz
Kolay gelsin

solidus

@KONYALI ve @karbal656,
Yardımlarınız için teşekkür ederim. Buradaki devre işimi gördü 16f84a ya uyarlama ta fazla vakit almadı. Konu kapatılabilir..
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..