B

seri iletisim sorunu yardim

Başlatan bltcy, 21 Nisan 2014, 14:37:00

bltcy


hocam merhaba . seriiletişim dersinizden ilham alarak yeni bi devre yapayım dedim . :) 2 adet 16f628 kullanarak .
Birine 10 adet buton bağlı , d,iğer,ine 10 adet led bağlı . anlaşılacağı uzere birinden butona bastığım zaman diğerinden bir led yanacak. isisde devreyi cizdim . şöylede bir program kodu yazdım

VER KISMI

CMCON=7 
OPTION_REG.7=0
PortA=0
TrisA=0
PortB=0
TrisB=1

SYMBOL CIKIS=PORTA.0
SYMBOL TUS1=PORTB.0
SYMBOL TUS2=PORTB.1
SYMBOL TUS3=PORTB.2
SYMBOL TUS4=PORTB.3
SYMBOL TUS5=PORTB.4
SYMBOL TUS6=PORTB.5
SYMBOL TUS7=PORTB.6
SYMBOL TUS8=PORTB.7
SYMBOL TUS9=PORTA.1
SYMBOL TUS10=PORTA.6
SYMBOL PARA=PORTA.7
VER VAR BYTE

PAUSE 200
VER=0

BASLA: VER=0
IF TUS1=0 THEN
VER=11
gosub gonder
WHILE TUS1=0
WEND
endIF
IF TUS2=0 THEN
VER=22
gosub gonder
WHILE TUS2=0
WEND
endif

IF TUS3=0 THEN
VER=33
gosub gonder
WHILE TUS3=0
WEND
endIF
IF TUS4=0 THEN
VER=44
gosub gonder
WHILE TUS4=0
WEND
endif

IF TUS5=0 THEN
VER=55
gosub gonder
WHILE TUS5=0
WEND
endIF
IF TUS6=0 THEN
VER=66
gosub gonder
WHILE TUS6=0
WEND
endif

IF TUS7=0 THEN
VER=77
gosub gonder
WHILE TUS7=0
WEND
endIF
IF TUS8=0 THEN
VER=88
gosub gonder
WHILE TUS8=0
WEND
endif

IF TUS9=0 THEN
VER=99
gosub gonder
WHILE TUS9=0
WEND
endIF
IF TUS10=0 THEN
VER=  111
gosub gonder
WHILE TUS10=0
WEND
endif


PAUSE 100
GOTO BASLA

GONDER:
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]
SEROUT2 CIKIS,1646,["E","T","E",ver]

return
END



AL KISMI

PORTA=0
PORTB=0
TRISA=%00000001
TRISB=%00000000

AL VAR BYTE
SYMBOL GIRIS=PORTA.0
SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTB.1
SYMBOL LED3=PORTB.2
SYMBOL LED4=PORTB.3
SYMBOL LED5=PORTB.4
SYMBOL LED6=PORTB.5
SYMBOL LED7=PORTB.6
SYMBOL LED8=PORTB.7
SYMBOL LED9=PORTA.1
SYMBOL LED10=PORTA.6


CMCON=7
CLEAR
PAUSE 500
PORTB=0

BASLA:
SerIn2 GIRIS,1646,[WAIT ("ETE"),AL]
SerIn2 GIRIS,1646,[WAIT ("ETE"),AL]
SerIn2 GIRIS,1646,[WAIT ("ETE"),AL]
IF AL=11 THEN
TOGGLE LED1
ENDIF

IF AL=22 THEN
TOGGLE LED2
ENDIF

IF AL=33 THEN
TOGGLE LED3
ENDIF

IF AL=44 THEN
TOGGLE LED4
ENDIF

IF AL=55 THEN
TOGGLE LED5
ENDIF

IF AL=66 THEN
TOGGLE LED6
ENDIF

IF AL=77 THEN
TOGGLE LED7
ENDIF

IF AL=88 THEN
TOGGLE LED8
ENDIF

IF AL=99 THEN
TOGGLE LED9
ENDIF

IF AL=111 THEN
TOGGLE LED10
ENDIF


PAUSE 200
GOTO BASLA
END


AMA  BİR TÜRLÜ ÇALIŞTIRAMADIM . NERDE HATA YAPMIS OLABİLİRİM HOCAM . ŞİMDİDEN SAĞOLUN .

ete

Kusur-1: programların hiç birinde sigorta ayarı yok. Olmadan işlemci çalışmaz.

Kusur-2: İşlemcinin hangi frekansta çalışacağı belirtilmemiş. Seri haberleşmede her bitin yollanma süresi baud rate'e göre hesaplanır. Bunda da çalışma frekansı göz önünde tutulur. Frekan belirtmezseniz default sanırım 4Mhz kullanılıyor ama siz yinde ihmal etmeyin DEFINE OSC 4 şeklinde frekansı bir satırda verin.

Kusur-3:
İşlemci bacakları ya giriş yada çıkış olarak çalışır. Buton bağlı olan pinlere giriş yapılır. İşlemciye de şu pinler Giriştir diye komut ile bilgi verilir. Bunu komutuda TRIS registeridir. Örneğin B portundan buton bağlı olan pinlerin TRIS registerinde karşılığı olan bitleri "1" olmalıdır. 1 olan bitler giriş pini sıfır olan pinler ise çıkış pini olarak işlem görür. Sen butonlar için bir tek PORTB.0 pinini giriş yapmışsın diğerleri çıkış olarak çalışıyor.  Programa bakılırsa TRISB=%11111111 şeklinde değer almalı. TRISA registeri ise, TRISA=%11000010 şeklinde değer almalıdır.

Kusur-4:
her veri paketinin başına bir uyandırma verisi eklenmelidir. Bu senkron yakalama işini kolaylaştırır ve haberleşme emniyetini artırır.   SEROUT2 CIKIS,1646,[REP$AA\5,REP$00\5,REP$FF\5]

Kusur-5: 2 adet yollama satırı yeterli olurken bir sürü yollama komutu kullanılması programın çalışmasını engeller.
2 adet yeterlidir En fazla 3 tane kullanın.

Kusur-6: Yalnızca tuşa basılınca bilgi yollanması karşıda verinin kesildiği noktanın tespitini zorlaştırır.
Tuşu bırakınca bir kereliğine Ver=0 bilgisi karşıya yollanmalıdırki o taraf ta kendini ayarlasın.
IF VER>0 THEN
  PAUSE 100
  VER=0
  gosub gonder
ENDIF

Kusur-7:Alma kısmında yalnızca tek satır alma kullanın. Bunuda bir alt programa yerleştirip GOSUB ile oraya gidip okuma yaptırın. Her hangi bir veri alınmış ise örneğin VER=11 bilgisi geldi diyelim,
Led'i Toggle yaptırın ancak yeniden veri almaya gidip aynı bilgi geldiği müddetçe başka işlem yapmayın.
Ne zamanki vericiden Veri=0 bilgisi geldi (tuş bırakılınca gelecektir) o zaman sizde o döngüden çıkın.
IF AL=11 THEN
  TOGGLE LED1
  WHILE AL=11
      GOSUB BILGIbak
  WEND 
ENDIF

Hepsi bu kadar bu dediklerimi yap devren çalışacaktır.

Ete



bltcy

Alıntı yapılan: ete - 21 Nisan 2014, 17:22:23
Kusur-1: programların hiç birinde sigorta ayarı yok. Olmadan işlemci çalışmaz.

Kusur-2: İşlemcinin hangi frekansta çalışacağı belirtilmemiş. Seri haberleşmede her bitin yollanma süresi baud rate'e göre hesaplanır. Bunda da çalışma frekansı göz önünde tutulur. Frekan belirtmezseniz default sanırım 4Mhz kullanılıyor ama siz yinde ihmal etmeyin DEFINE OSC 4 şeklinde frekansı bir satırda verin.

Kusur-3:
İşlemci bacakları ya giriş yada çıkış olarak çalışır. Buton bağlı olan pinlere giriş yapılır. İşlemciye de şu pinler Giriştir diye komut ile bilgi verilir. Bunu komutuda TRIS registeridir. Örneğin B portundan buton bağlı olan pinlerin TRIS registerinde karşılığı olan bitleri "1" olmalıdır. 1 olan bitler giriş pini sıfır olan pinler ise çıkış pini olarak işlem görür. Sen butonlar için bir tek PORTB.0 pinini giriş yapmışsın diğerleri çıkış olarak çalışıyor.  Programa bakılırsa TRISB=%11111111 şeklinde değer almalı. TRISA registeri ise, TRISA=%11000010 şeklinde değer almalıdır.

Kusur-4:
her veri paketinin başına bir uyandırma verisi eklenmelidir. Bu senkron yakalama işini kolaylaştırır ve haberleşme emniyetini artırır.   SEROUT2 CIKIS,1646,[REP$AA\5,REP$00\5,REP$FF\5]

Kusur-5: 2 adet yollama satırı yeterli olurken bir sürü yollama komutu kullanılması programın çalışmasını engeller.
2 adet yeterlidir En fazla 3 tane kullanın.

Kusur-6: Yalnızca tuşa basılınca bilgi yollanması karşıda verinin kesildiği noktanın tespitini zorlaştırır.
Tuşu bırakınca bir kereliğine Ver=0 bilgisi karşıya yollanmalıdırki o taraf ta kendini ayarlasın.
IF VER>0 THEN
  PAUSE 100
  VER=0
  gosub gonder
ENDIF

Kusur-7:Alma kısmında yalnızca tek satır alma kullanın. Bunuda bir alt programa yerleştirip GOSUB ile oraya gidip okuma yaptırın. Her hangi bir veri alınmış ise örneğin VER=11 bilgisi geldi diyelim,
Led'i Toggle yaptırın ancak yeniden veri almaya gidip aynı bilgi geldiği müddetçe başka işlem yapmayın.
Ne zamanki vericiden Veri=0 bilgisi geldi (tuş bırakılınca gelecektir) o zaman sizde o döngüden çıkın.
IF AL=11 THEN
  TOGGLE LED1
  WHILE AL=11
      GOSUB BILGIbak
  WEND 
ENDIF

Hepsi bu kadar bu dediklerimi yap devren çalışacaktır.

Ete

Hocam sagolun . Ama sigorta ayari nasil yapilir ?

ete

Önemli Bilgiler başlığı altında bir yazı yayınladım. Bu konu ile ilgili orayı okuyuver lütfen.

Ete

bltcy


bltcy

Alıntı yapılan: ete - 21 Nisan 2014, 19:37:38
Önemli Bilgiler başlığı altında bir yazı yayınladım. Bu konu ile ilgili orayı okuyuver lütfen.

Ete


hocam sigorta ayarini biliomusum adinin o oldugunu bilmiyormusum .

Ama pbp de bunlari yazinca hata verior bende pic programmer de pic i yazdirioken yapiyorum o ayarlari . Hata vemesinin sebebi ne olar . Sizin yazdiginiz ornek programlarin bile hex. Ini alirken onlari silmeden islem basarisiz diyor .

ete

Açıklamalarımı okumadığın sürece o hatalrdan kurtulamayacaksın. Konu başlığını dikkatlice oku lütfen.
Ete

bltcy

#7
Alıntı yapılan: ete - 21 Nisan 2014, 21:40:58
Açıklamalarımı okumadığın sürece o hatalrdan kurtulamayacaksın. Konu başlığını dikkatlice oku lütfen.
Ete


Hocam dediklerinizi yaptım . program sımulasyonda calıştı . yanan ledlere değişken aracılığı ile LOW yaptırmak istedim

. VER Kısmnında kı tusa bastıgımda karşılığı olan led yanıyor . ama say değişkeni sıfır olduğu zaman kapanmıyor .


Yine ne hata yapmışolabilim hocam

programlar şoyle

VER PROGRAMI
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [Ahmet BALTACI...EDITOR OPTIONS]                  *
'*  Notice  : Copyright (c) 2014 [Ahmet BALTA.EDITOR OPTIONS]   *
'*          : All Rights Reserved                               *
'*  Date    : 19.04.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
CMCON=7 '16F628 de  komparatör pinleri iptal hepsi giris çıkıs
OPTION_REG.7=0 'Dahili  pull-up lar AKTİF yapıldı ayrıca pull-up direncine gerek yok
PortA=0
TrisA=%00000000
PortB=0
TRISB=%00111111
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'——————————————————————————
SYMBOL CIKIS=PORTA.0
SYMBOL TUSA=PORTB.0
SYMBOL TUSB=PORTB.1
SYMBOL TUSC=PORTB.2
SYMBOL TUSD=PORTB.3
SYMBOL TUSE=PORTB.4
VER VAR BYTE

'——————————————————————————
PAUSE 100
VER=0
Input portb.4
'——————————————————————————
BASLA:

IF TUSA=0 THEN
VER=88
GOSUB GONDER
WHILE TUSA=0
WEND
endIF



IF TUSB=0 THEN
VER=66
gosub gondeR
WHILE TUSB=0
WEND
endif

IF TUSC=0 THEN
VER=33
gosub gonder
WHILE TUSC=0
WEND
endIF

IF TUSD=0 THEN
VER=44
gosub gonder
WHILE TUSD=0
WEND
endif

IF TUSE=0 THEN
VER=55
gosub gonder
WHILE TUSE=0
WEND
endif

VER=0
gosub gonder

PAUSE 10

GOTO BASLA

'—————–ALT PROGRAMLAR——————————-
GONDER:
SEROUT2 CIKIS,396,["E","T","E",ver]
SEROUT2 CIKIS,396,["E","T","E",ver]
RETURN

END


AL PROGRAMI
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [Ahmet BALTACI...EDITOR OPTIONS]                  *
'*  Notice  : Copyright (c) 2014 [Ahmet BALTA.EDITOR OPTIONS]   *
'*          : All Rights Reserved                               *
'*  Date    : 19.04.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
PORTA=0
PORTB=0
TRISA=%00000001
TRISB=%00000000

@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'—————————degiskenler——————————
AL VAR BYTE
GIRIS VAR PORTA.0
LEDA VAR PORTB.0
LEDB VAR PORTB.1
LEDC VAR PORTB.2
LEDD VAR PORTB.3
LEDE VAR PORTB.4
SAY_0 VAR BYTE 
SAY_1 VAR WORD 
SAY_2 VAR WORD 
SAY_3 VAR WORD 
SAY_4 VAR WORD 

'—————————–B A S L A N G I Ç —————————
CMCON=7
CLEAR
PAUSE 500
PORTB=0 'tüm çıkıslar low seviyesinde

'——————————————————————————-
BASLA:

SerIn2 GIRIS,396,[WAIT ("ETE"),AL]
IF AL=88 THEN
  LEDA=1
  SAY_0=10 
ENDIF

IF AL=66 THEN
  SAY_1=10
  AL=0
  LEDB=1
ENDIF

IF AL=33 THEN
  SAY_2=10
  AL=0
  LEDC=1
ENDIF

IF AL=44 THEN
  SAY_3=10
  AL=0
  LEDD=1
ENDIF

IF AL=55 THEN
  SAY_4=10
  AL=0
  LEDE=1
ENDIF

AL=0


IF LEDA=1 then
  SAY_0=SAY_0-1
  IF SAY_0=0 THEN LEDA=0
ENDIF

IF SAY_1>0 THEN
  SAY_1=SAY_1-1
IF SAY_1=0 THEN LEDB=0
ENDIF

IF SAY_2>0 THEN
  SAY_2=SAY_2-1
IF SAY_2=0 THEN LEDC=0
ENDIF
IF SAY_3>0 THEN
  SAY_3=SAY_3-1
IF SAY_3=0 THEN LEDD=0
ENDIF
IF SAY_4>0 THEN
  SAY_4=SAY_4-1
IF SAY_4=0 THEN LEDE=0
ENDIF

'IF al=0 THEN portb=0

PAUSE 10
GOTO BASLA
END


LED E HİÇ YANMIYOR . SURE DOLDUGU ZAMAN LED LER SONMUYOR AMA SURE DOLDUGU ZAMAN BI TUSA BASARSAM ILK YAKTIGIM LED SONUYOR  BASKA BIR TUSA BASARSAM IKI YAKTIGIM SONUYOR BU SEKILDE DEVAM EDIYOR


SAYGILAR HOCAM ....

ete

Programı sürekli değiştiriyorsun ve değişimlere mantığı uyuşturmuyorsun.
Biraz düşün bakalım.
Verici tarafında PORTB.0 tuluna bastım. Alıcı tarafında komut TOGGLE olsa idi hiç sorunun olmayacak idi.
Zira bir kere basınca PORTB.0 pinindeki led yanacak bırakıp tekrar basınca sönecek idi.
Bu şekilde yapınca yalnızca yanıyor. Peki söndürme ile ilgili bir komut varmı programda? hiç yok!!!!. Elbette ledler sönmeyecektir. Söndürmüyorsun çünki. O halde ne yapmak lazım? elindeki tek ip ucu olan VER=0 gönderilmesi durumunda karşıda da AL=0 olduğunda PORTB=0 demen gerekir ki yanık olan ledlerin tamamı sönsün.
Demekki alıcı tarafına,
IF AL=0 THEN PORTB=0 demen yeterli olacaktır.

E ledi hiç yanmıyor çünki o pin aktif değil. Her iki tarafta da aktif değil. Simulasyonda bunu hemen anlayabilirsin pin gri renkte duruyor. Sebebi ne olaki acaba? Bu pin Low Voltaj Programlama kullanıldığı zaman programlama voltajının girildiği pin dir.
Sen sigorta ayarlarında LVP_OFF demediğin için LVP aktif durumda oluyor. Sİgorta ayarlarına LVP_OFF ilave edersen o pinde doğru çalışacaktır. Bu ilaveyi her iki parogramda da yapman lazım. Yada aşağıdakini kopyala ,
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF

Bunları yaparsan program kusursuz çalışacaktır.

Ete

bltcy

Alıntı yapılan: ete - 22 Nisan 2014, 14:16:29
Programı sürekli değiştiriyorsun ve değişimlere mantığı uyuşturmuyorsun.
Biraz düşün bakalım.
Verici tarafında PORTB.0 tuluna bastım. Alıcı tarafında komut TOGGLE olsa idi hiç sorunun olmayacak idi.
Zira bir kere basınca PORTB.0 pinindeki led yanacak bırakıp tekrar basınca sönecek idi.
Bu şekilde yapınca yalnızca yanıyor. Peki söndürme ile ilgili bir komut varmı programda? hiç yok!!!!. Elbette ledler sönmeyecektir. Söndürmüyorsun çünki. O halde ne yapmak lazım? elindeki tek ip ucu olan VER=0 gönderilmesi durumunda karşıda da AL=0 olduğunda PORTB=0 demen gerekir ki yanık olan ledlerin tamamı sönsün.
Demekki alıcı tarafına,
IF AL=0 THEN PORTB=0 demen yeterli olacaktır.

E ledi hiç yanmıyor çünki o pin aktif değil. Her iki tarafta da aktif değil. Simulasyonda bunu hemen anlayabilirsin pin gri renkte duruyor. Sebebi ne olaki acaba? Bu pin Low Voltaj Programlama kullanıldığı zaman programlama voltajının girildiği pin dir.
Sen sigorta ayarlarında LVP_OFF demediğin için LVP aktif durumda oluyor. Sİgorta ayarlarına LVP_OFF ilave edersen o pinde doğru çalışacaktır. Bu ilaveyi her iki parogramda da yapman lazım. Yada aşağıdakini kopyala ,
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF

Bunları yaparsan program kusursuz çalışacaktır.

Ete

Peki hocam portb0 dersem butun ledler ayni anda sonmezmi . Ben herhangi tusa herhangi bir zamanda bastigim da ayarladigim sure kadar o ledin yanmasini sure sonunda o ledin sonmesini istiyorum . Misal  Tus bire baslim leda yandi 2 dkka yanma suresi var . Tus bire bastikdan 30 sn sonra tus 2 ye basdim ledb yandin . . Led a suresini doldurdu sondu . Led b yanmaya devam ediyor . Suresi dolunca sonuyor . Bu dediginizi yaptigimda bu istedigim mi olacak yok . Butun ledler ayni andami sonecek .

ete

Verdiğim şekli ile bütün ledler anında söner.
Senin istediğini bu programla yapmak imkansız. Aslında mantık olarak sende gerekeni yapmışsın.
LEDA=1 ve ardından SAY_0=10  demişsin.
Program normal döngüsünü yapsa istediğin sorunsuz yerine gelir. Ancak unutulmaması gerekenbir husus var oda SERIN komutları programı veri gelinceye kadar bloke eder. Bu nedenle ikinci bir veri gelinceye kadar program orada bekler.
Bu sorunu aşmanın bir kaç yolu var.
Birincisi süre tutma işini TMR0 kesmesine bırakırsın
İkincisi vericiden sürekli olarak tuşa basılmamış ise sıfır verisini aralıklarla yollarsın

En kolayıda ikinci önerdiğim yol olsa gerek.
Bu nedenle yukarıda senin vermiş olduğun iki programı bu esasa göre değiştirdim yeniden oraya kayıt ettim. Oradan alıp çalıştırabilirsin.

Ete

bltcy

Sagolun hocam ewe gidince bi deneyecegeim

bltcy

Alıntı yapılan: ete - 22 Nisan 2014, 15:26:17
Verdiğim şekli ile bütün ledler anında söner.
Senin istediğini bu programla yapmak imkansız. Aslında mantık olarak sende gerekeni yapmışsın.
LEDA=1 ve ardından SAY_0=10  demişsin.
Program normal döngüsünü yapsa istediğin sorunsuz yerine gelir. Ancak unutulmaması gerekenbir husus var oda SERIN komutları programı veri gelinceye kadar bloke eder. Bu nedenle ikinci bir veri gelinceye kadar program orada bekler.
Bu sorunu aşmanın bir kaç yolu var.
Birincisi süre tutma işini TMR0 kesmesine bırakırsın
İkincisi vericiden sürekli olarak tuşa basılmamış ise sıfır verisini aralıklarla yollarsın

En kolayıda ikinci önerdiğim yol olsa gerek.
Bu nedenle yukarıda senin vermiş olduğun iki programı bu esasa göre değiştirdim yeniden oraya kayıt ettim. Oradan alıp çalıştırabilirsin.

Ete
SAĞOLUN HOCAM DEDİĞİNİZİ YAPTIM OLDU . BUSEFERDE LED VE BOTONLARI COĞALTTIM 10 AR TANE KOYDUM . ALICI KISIMDAKI LEDA ADLI LED DISINDA HEPSI SONMESI GEREKEN ZAMANDA SONUYOR AMA LED A ERKEN SONUYOR DEĞİŞKEN DEĞERİNİ YUKSELTIYORUM DAHA ERKEN SONUYOR SEBEBI NE OLABILIR HOCAM . PROGRAM SOYLE
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [Ahmet BALTACI...EDITOR OPTIONS]                  *
'*  Notice  : Copyright (c) 2014 [Ahmet BALTA.EDITOR OPTIONS]   *
'*          : All Rights Reserved                               *
'*  Date    : 19.04.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

PORTA=0
PORTB=0
TRISA=%00000001
TRISB=%00000000

@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'—————————degiskenler——————————
AL VAR BYTE
GIRIS VAR PORTA.0
LEDA VAR PORTB.0
LEDB VAR PORTB.1
LEDC VAR PORTB.2
LEDD VAR PORTB.3
LEDE VAR PORTB.4
LEDF VAR PORTB.5
LEDG VAR PORTB.6
LEDH VAR PORTB.7
LEDI VAR PORTA.1
LEDK VAR PORTA.2


SAY_0 VAR BYTE 
SAY_1 VAR WORD 
SAY_2 VAR WORD 
SAY_3 VAR WORD 
SAY_4 VAR WORD 
SAY_5 VAR WORD
SAY_6 VAR WORD
SAY_7 VAR WORD
SAY_8 VAR WORD
SAY_9 VAR WORD
'—————————–B A S L A N G I Ç —————————
CMCON=7
CLEAR
PAUSE 500
PORTB=0
PORTA=0
'tüm çıkıslar low seviyesinde

'——————————————————————————-
BASLA:

SerIn2 GIRIS,396,[WAIT ("ETE"),AL]
IF AL=10 THEN
  SAY_0=500
  AL=0
  LEDA=1
ENDIF

IF AL=20 THEN
  SAY_1=500
  AL=0
  LEDB=1
ENDIF

IF AL=30 THEN
  SAY_2=500
  AL=0
  LEDC=1
ENDIF

IF AL=40 THEN
  SAY_3=500
  AL=0
  LEDD=1
ENDIF

IF AL=50 THEN
  SAY_4=500
  AL=0
  LEDE=1
ENDIF

IF AL=60 THEN
  SAY_5=500
  AL=0
  LEDF=1
ENDIF

IF AL=70 THEN
  SAY_6=500
  AL=0
  LEDG=1
ENDIF

IF AL=80 THEN
  SAY_7=500
  AL=0
  LEDH=1
ENDIF

IF AL=90 THEN
  SAY_8=500
  AL=0
  LEDI=1
ENDIF

IF AL=100 THEN
  SAY_9=500
  AL=0
  LEDK=1
ENDIF


AL=0


IF SAY_0>0 then
  SAY_0=SAY_0-1
  IF SAY_0=0 THEN LEDA=0
ENDIF

IF SAY_1>0 THEN
  SAY_1=SAY_1-1
IF SAY_1=0 THEN LEDB=0
ENDIF

IF SAY_2>0 THEN
  SAY_2=SAY_2-1
IF SAY_2=0 THEN LEDC=0
ENDIF
IF SAY_3>0 THEN
  SAY_3=SAY_3-1
IF SAY_3=0 THEN LEDD=0
ENDIF
IF SAY_4>0 THEN
  SAY_4=SAY_4-1
IF SAY_4=0 THEN LEDE=0
ENDIF

IF SAY_5>0 then
  SAY_5=SAY_5-1
  IF SAY_5=0 THEN LEDF=0
ENDIF

IF SAY_6>0 THEN
  SAY_6=SAY_6-1
IF SAY_6=0 THEN LEDG=0
ENDIF

IF SAY_7>0 THEN
  SAY_7=SAY_7-1
IF SAY_7=0 THEN LEDH=0
ENDIF
IF SAY_8>0 THEN
  SAY_8=SAY_8-1
IF SAY_8=0 THEN LEDI=0
ENDIF
IF SAY_9>0 THEN
  SAY_9=SAY_9-1
IF SAY_9=0 THEN LEDK=0
ENDIF
'IF al=0 THEN portb=0

PAUSE 10
GOTO BASLA
END

ete

Erken söner çünki say_0 değişken tipi Byte olarak kalmış diğerleri word. Sen 500 değerini verince say-0=(500-256)=244 değerini alabiliyor. Direk 255 versen biraz daha uzun sürede sönebilirdi.
En iyisi onunda tipini word yap sorun ortadan kalksın.
Ete

bltcy

Alıntı yapılan: ete - 23 Nisan 2014, 07:19:34
Erken söner çünki say_0 değişken tipi Byte olarak kalmış diğerleri word. Sen 500 değerini verince say-0=(500-256)=244 değerini alabiliyor. Direk 255 versen biraz daha uzun sürede sönebilirdi.
En iyisi onunda tipini word yap sorun ortadan kalksın.
Ete
HOCAM DUN 2 SAAT PROGRAMI INCELEDIM GOREMEDIM UYKUSUZLUKDAN OLSA GEREK :) SAĞOLUN HOCAM . SAYGILAR ...

Powered by EzPortal