360 derece sayıcı

Başlatan onurinci, 25 Haziran 2020, 02:48:52

onurinci

hocam ,benim için düzelttiğiniz sayıcı devresine ek olarak Limit LED'i ilave ettim,birde 7 segment devresi çok karışık,burayı iptal edip LCD'ye çevirdim ,gayet sağlıklı çalışıyor istediğim gibi sayıyor,durumu saklıyor,fakat sıfırla butonuna basarsam,sıfırlanıyor fakat koma'ya giriyor dahada işlem yapmıyor,bir yerde hata yapıyorum,fakat bulamadım...

@ DEVICE pic16F628A, WDT_OFF, PWRT_ON, PROTECT_OFF, MCLR_off, INTRC_OSC_NOCLKOUT
DEFINE OSC 4
TRISA=%00000111           
TRISB=%00000000
CMCON= 7

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 1
DEFINE LCD_EREG PORTB	
DEFINE LCD_EBIT 0
DEFINE LCD_RSREG PORTB	
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4		
DEFINE LCD_LINES 2
              
BIRLER    VAR  BYTE 56         
ONLAR     VAR  BYTE 57         
YUZLER    VAR  BYTE 58 
'ARA       VAR  BYTE 59 
DUR       VAR  WORD 70 
SAYAC     VAR  WORD 72     
YAZ       VAR  BIT
PORTA=0
PORTB=0  
SYMBOL YUKARI=PORTA.0
SYMBOL  ASAGI=PORTA.1
SYMBOL  RESET=PORTA.2
symbol alarm= PORTA.3
CLEAR
pause 200

    lcdout $fe,1
    PAUSE 200 
;************** READING EEPROM *************************************************
READ 10,SAYAC.BYTE1,SAYAC.BYTE0
IF SAYAC=65535 THEN SAYAC=0

gosub ekran
DUR=360  'BURAYA DURULACAK SAYI YAZILMALIDIR
;************** MAIN PROGRAM ***************************************************
BASLA:
'****** Alarm routine ************************************
IF SAYAC>5 and SAYAC<355 THEN  ' buraya Alt Üst Limitler yazılacak
   ALARM=0
ELSE
  ALARM=1
ENDIF
'*********************************************************  


 
       IF PORTA.2=0 THEN CLEAR
       IF  YUKARI=0 THEN GOSUB ARTI
       IF   ASAGI=0 THEN GOSUB EKSI
       
       GOSUB EKRAN
       IF YAZ=1 THEN GOSUB KAYIT     
       GOTO  BASLA
;************** COUNT UP ********************************************************
ARTI: 
     IF SAYAC=DUR THEN RETURN
     SAYAC=SAYAC+1:YAZ=1
     IF SAYAC=1000 THEN SAYAC=999
     PAUSE 100
     RETURN
;************** COUNT DOWN *****************************************************
EKSI:
     IF SAYAC=0 THEN RETURN
     SAYAC=SAYAC-1 :YAZ=1    
     PAUSE 100
     RETURN
;************* LCD *************************************************************
EKRAN:
lcdout $fe,$80,dec SAYAC,"  ","Degree "
      
;************* EEPROM **********************************************************
KAYIT:
      WRITE 10,SAYAC.BYTE1,SAYAC.BYTE0:PAUSE 10
      YAZ=0
      RETURN

END

elektro77

#1
IF PORTA.2=0 THEN CLEAR diye bir code yazmışsınız ama alt programlarda CLEAR isimli bir alt program olmadığı için program kilitleniyor gibi geldi bana.

EKSI:
     IF SAYAC=0 THEN RETURN
     SAYAC=SAYAC-1 :YAZ=1   
     PAUSE 100
     RETURN
birde burada bir limitleme yapmamışsınız. Sayaç 0 dan sonra nereye gidecek. Return mu olacak.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Elektro77,
CLEAR bir komuttur. Görevi bütün değişkenleri sıfırlamaktır. Ancak program başlangıcında ve Basla satırından evvel bir kereliğine kullanılabilir. Program içinde kullanmak yanlış olur.

Onurinci,
Reset tuşuna basıınca CLEAR yerine SAYAC=0:GOSUB EKRAN:GOTO BASLA
komutlarını kullanmalısın. Böylece çalışır sistemin sorunsuzca.

Ete

onurinci

hocam çok teşekkür ederim..

Powered by EzPortal