C

kontrol hakkında

Başlatan cruze, 12 Haziran 2014, 04:55:08

cruze

aşagıda verdiğim program da süre sonuna gelindiğinde 16f84a nın A portunun 1.inci bitinin lojik bir olmasını istiyorum,bu bite bir röle bağlayarak zaman ayarlı bir devre ile uğraşacağım.biraz uğraştım süreyi sayıyor ama süre sonunda işlem yapmıyor.hata nerede olduğunu söyleyebilirmisiniz.
@ DEVICE PIC16F84A, XT_OSC
@ DEVICE PIC16F84A, WDT_OFF
@ DEVICE PIC16F84A, PWRT_OFF
@ DEVICE PIC16F84A, PROTECT_OFF

PORTA=0
PORTB=0
TRISA=%00000000
TRISB=%00000000
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
ON INTERRUPT GoTo KESME
OPTION_REG=%10000101   
INTCON=%10100000
TMR0=0
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
SAYAC VAR BYTE
CLEAR
PAUSE 200
LCDOUT $FE,1
LOW PORTB.2
SN=0
DAK=0
SAAT=20
SAYAC=60
BASLA:
      LCDOUT $FE,$84,DEC2 SAAT,":",DEC2  DAK,":",DEC2 SN
      IF SAAT=0 AND DAK=0 AND SN=0 THEN
         LCDOUT $FE,$C0,"SARJ TAMAMLANDI"
      ELSE
         LCDOUT $FE,$C0," SARJ  EDILIYOR "
      ENDIF   
      GOTO BASLA
DISABLE
KESME:
      SAYAC=SAYAC-1
      IF SAYAC=0 then
        SAYAC=60
        SN=SN-1
        IF SN=255 THEN
          SN=59
          DAK=DAK-1
          IF DAK=255 THEN
            DAK=59
            SAAT=SAAT-1
            IF SAAT=255 THEN
              SAAT=0
              INTCON=0
              LCDOUT $FE,1
              HIGH PORTA.0:SN=0:DAK=0
            ENDIF
          ENDIF
        ENDIF     
      ENDIF
INTCON.2=0
RESUME
ENABLE
END


ete

Saatin sıfır olduğu noktada işlem tamamlanmış demektir. Orada ayrıca ,
IF SAAT=0 and DAK=0 ... gibi bir ifade kullanılmaması gerekir.
Ayrıca kesme içinde ŞARJ tamamlandı yazısını yazmakla onu görebileceğini sanma zira program kesmeden çıkarçıkmaz hemen BASLA etiketi altındaki lcd komutlarını çalıştırp kesmede yazılanları siler ve bu işlem bir kaç mikra saniye içinde olduğu için sende önceki yazılanları göremezsin. Bu nedenle kontrol işini ana programa dahil etmek gerekir.
Sigorta ayarlarından sonuncusu yanlış idi onuda düzelttim.
Programın Olması gereken şeklini senin program üzerine kod tag kullanarak yeniden yazdım.
Böylece oradan alabilirsin çalışan programı.

Ete

Powered by EzPortal