3

16F877A EPROM SORUN!!!

Başlatan 3mZ, 21 Ocak 2012, 15:55:16

3mZ

Hocam tamamdır sorunu hallettim çok teşekkür ederim plus versiyonunun ücretli olduğunu yeni sizden duyuyorum ;)

ete

Aşağıdaki link programın üreticisinin ana sayfasıdır. Sayfanın altına doğru bakıver istersen;
Yazılanlar şunlar;

"MicroCode Studio is completely free for non-commercial use"  Micro Code Studio , ticari olmayan kullanımlar için tamamen ücretsizdir."

Hemen altında ise

"MicroCode Studio Plus    £29.95    buy item    view cart" denilmektedir.

Link'i;
http://www.mecanique.co.uk/code-studio/index.html

Hallettim demişsin ama nasıl olduğunu açıklamamışsın.!!!!

Ete

F®T

#17
Hocam bende sıkıntı devam ediyor.ben derleyemiyorum.3mz anlatırsan bizde sorunu görmüş olucaz  ;)
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

F®T

#18
Hocam mcs4000 ve pbp 2.47 ile şu düzeltme ile derledim.

KAYDET:
KI=(KIYMA+KI)
KU=(KUSBASI+KU)
TA=(TAVUK+TA)
DN=(DONER+DN)
DU=(DURUM+DU)
AYR=(AYRAN+AYR)

WRITE $00,KI
WRITE $01,KU
WRITE $02,TA                  'WRITE $00,KI,KU,TA,DN,DU,AYR  Bu satırda yazılım hatası veriyor.
WRITE $03,DN
WRITE $04,DU
WRITE $05,AYR

  PAUSE 10
GOSUB SIFIRLA1
RETURN
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

3MZ,
Yazdığın bu programdaki stack taşması hatasını görebilmen için bir yol söyleyeceğim.
Bir kaç satış yap veya yapmadan da olur. Toplam butonuna arka arkaya 5 veya 6 defa bas ve bırak.
Bu esnada isi ekranında  çalıştırma tuşlarının yanında bir mesaj ikaz kutusu var. Normalde orada  yeşil renkli bir "i" işareti ile yanında 9-10 message(s) yazısını görürsün. Bu dediklerimi yap ve oranın sarıya dönüp rakamların hızla arttığını göreceksin.
O mesaj kutusuna tıklarsan hataların nele rolduğunuda görmen mümkün elbette. Stack overflow ile stack underflow hatası verecektir program. Sebebini izah ettim ama anlamadın sanırım.

Toplam Tuşuna basınca Gosub ile gelinen OKUMA isimli alt programdan program TOPLAM kısmına atlamaktadır. Orada bilgileri ekrana verdikten sonra şayet toplam tuşuna basılıyor ise EKRAN isimli etikete atlamaktadır. İşte hata burada oluşuyor.
Zira Ekran isimli etiket programın zaten gosub ile dallandığı yerdir. Öncelikle ilk verilen Gosub Okuma komutuna karşılık bir return komutu görmelidir program. Aksi halde return üstüne bir kez daha return komutu alır ve stack kontrolü 6 cı seferde kaybolur. Bu hali ile program bir konumda kilitlencektir. Bu nedenle kısa yoldan soruna çözüm bulman gerekir.
Aynı sorunu Satış butonuda yaratmaktadır. Benzer sorun onda da var.

Ürün butonlarına basınca birden fazla adet birden artıveriyor. Satışlar birer birer olacağına göre oraya sınırlama koyman gerekir.
Ne koyacağını söyleyeyim;
WHILE (PORTD&%00111111)<63 or (PORTC & %00001111)<15:wend
Bu satırı okuma alt programının return dan bir önceki satıra koyman gerek. Gosub Gecikme isimli komutlarıda kaldırabilirsin.

Programın stack hatası vermeden çalışabilmesi için ;
- Ekran başlığı altındaki LCD satırlarını bir alt programa dönüştür ve altına bir return koyarak oraya gosub ile gidilip return ile dönülmesini sağla. Şu anda Ekran yazan yerede GOSUB EKran yaz.

Daha sonra Toplam alt programında il komut satırını;
if b9=1 then return şeklinde değiştir

SATIS isimli alt programda ise şu değişikliği yap,
if b10=1 then RETURN

EN sonda da OKUMA isimli alt programda da şu değişikliği yap;
....
...
  if b9=0 then GOSUB TOPLAM:GOSUB EKRAN
  if b10=0 then GOSUB DEVAM:GOSUB EKRAN
  if b11=0 then gosub SIFIRLA1
  if b12=0 then gosub KAYDET 
  WHILE (PORTD & %00111111)<63 or (PORTC & %00001111)<15:wend
  return

Hepsi bu kadar.

Ete


3mZ

Alıntı yapılan: ete - 21 Ocak 2012, 20:23:50
Aşağıdaki link programın üreticisinin ana sayfasıdır. Sayfanın altına doğru bakıver istersen;
Yazılanlar şunlar;

"MicroCode Studio is completely free for non-commercial use"  Micro Code Studio , ticari olmayan kullanımlar için tamamen ücretsizdir."

Hemen altında ise

"MicroCode Studio Plus    £29.95    buy item    view cart" denilmektedir.

Link'i;
http://www.mecanique.co.uk/code-studio/index.html

Hallettim demişsin ama nasıl olduğunu açıklamamışsın.!!!!

Ete

ETE Hocam beni yanlış anladınız heralde ben mcsp'i eski bir üye olduğum siteden indirmiştim ve 2 senedirde kullanıyorum hiçbir bir sorun yaşamadığım için sizden"Bu konuyu elli defa dile getirdim ama kimse beni dinlemiyor maalesef."bu sözü işitmek zorunda kaldım sitenin mutlaka bir köşesine yazmışsınızdır fakat siteyle işten güçten dolayı  pek haşır neşir olamadığım için ben görmemişimdir. Görseydim emin olun dediğiniz gibi yapardım!
"Hallettim demişsin ama nasıl olduğunu açıklamamışsın.!!!!"
Sorunu hallettim derken hocam sizin söylediğiniz şekilde hallettim anlamında demiştim ama yanlış anlaşılmış.
Evet derleme sorunu gerçektende mcs denmiş hocam. Dediğiniz gibi indirdim kurdum çok güzel derledi.

ETE"Hallettim demişsin ama nasıl olduğunu açıklamamışsın.!!!!"
FERİT"Hocam bende sıkıntı devam ediyor.ben derleyemiyorum.3mz anlatırsan bizde sorunu görmüş olucaz "

ETE Hocam ve FERİTT arkadaşım ikinizdende gerçekten özürdilerim açtığım konulara mesaj yazılıp yazılmadığını mailimden kontrol ettiğim için görmeyip silmişim haliyle bende konuya mesaj yazılmamış zannettim yeni açtım gördüm tekrar özür dilerim.

Çok fazla konuştum en iyisi konuya gireyim :)

ETE hocam en son gönderdiğiniz iletidekileri sorunu görmek için
Yazdığın bu programdaki stack taşması hatasını görebilmen için bir yol söyleyeceğim.
Bir kaç satış yap veya yapmadan da olur. Toplam butonuna arka arkaya 5 veya 6 defa bas ve bırak.
Bu esnada isi ekranında  çalıştırma tuşlarının yanında bir mesaj ikaz kutusu var. Normalde orada  yeşil renkli bir "i" işareti ile yanında 9-10 message(s) yazısını görürsün. Bu dediklerimi yap ve oranın sarıya dönüp rakamların hızla arttığını göreceksin.
O mesaj kutusuna tıklarsan hataların nele rolduğunuda görmen mümkün elbette. Stack overflow ile stack underflow hatası verecektir program. Sebebini izah ettim ama anlamadın sanırım.

dediklerinizi yapmadan önce programı normal denedim fakat böyle birşeyle karşılaşmadım defalarca satış yaptım kaydettim fakat yeşil ikon hiç değişmedi sizden aldığım isis 7.8 kullanıyorum.
Her neyse ondan sonra dediklerinizin hepsini uyguladım sorun yok önceki kısımlarda.
Fakat demin devrede önemli bir bölüm unutmuşum onu ekledim bazı sorunlarım var.
Fiyat ayarları diye bir bölüm ekledim ve bu sayfadaki değerleri eproma yazdırdım değerleri +5 -5 giriyorum kayıt ediyor normal program içerisinde dolaşırken bir sorun yok fakat isis çalıştırma durdurma bölümünden programı durdurup yeniden çalıştırdığımda kıyma ve kuş başı değerleri değişiyor write ve read komutlarının yanlarına pause10 yazdım 100 yazdım fakat değer gen değişiyor kapatıp açınca.
Dosya ilişiktedir birde bakın hocam diğer dediğiniz yerler istediğiniz gibi olmuşmu?
HÜRMETLER
3mZ





F®T

3MZ sorun değil özür dileyecek bişi yok ortada .bende senin sayende eksiğimin farkına vardım uğraşırken halloldu.zaten bi gün eksiğimiz biterse bizde göçüp gitmiş oluruz. ;D
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

KAZIMUGUR

Alıntı yapılan: ete - 21 Ocak 2012, 19:00:29
Peki benim derlediğim dosyayı kullan bakalım.
Ben bizzat eproma kayıt yapıldığını görüyorum.
Ete


Hocam bu cevaptaki ek için ; nasıl derleyebildiniz ?
Daha doğrusu neler kullandınız ?

"  WRITE $00,KI,KU,TA,DN,DU,AYR "

MCS  ve PBP ların hepside syntax error diyor.

ete

#23
MCS4000 ve PB260 ile hata vermeden derliyor. Ancak bazı versiyonlar aşağıdaki şekli kabul etmemektedir.
"WRITE $00,KI,KU,TA,DN,DU,AYR" bunu syntax hatası olarak görmektedirler. Dolayısıyla yazım şeklini;
WRITE $00,KI
WRITE $01,KU
şeklinde her birine yazım adresini vererek istiyor. Ancak burada bir başka sorun daha var. Bu komutların yer aldığı programda değişkenler WORD olaak tanımlanmış ve her biri 1 byte lık adreslere yazılmaya çalışılıyor. Derleyici bunuda bir hata olarak görüyor olabilir. Denemek için değişkenleri Byte yapıp derleme yapmak lazım (hata veren versiyonlarda). Yada byte değişkenlerini benzer şekilde kayıt etmek lazım. Ama genlede gördüğüm adressiz peş peşe yazılan yazma emirlerine itiraz ediyor derleyici. Son versiyon derleyicinin yamaları vardı. Sanırım bu konularıda düzeltiyor denemek lazım. Zira bende hata vermeden yapıyor işini.

Aradan bir kaç gün geçti belkide gerçek sytax hatası vardır programda. Bu nedenle benim verdiğim programı kullanın.
Ayrıca MCS program files içinde mechanique orjinal klasöründe Basic ise C:\ ana klasöründe yer almaktadır yada almalıdır.
Basic in bi hastalığı var. Bazen başka bir satırdaki hatayı diğer bir satır için gösteriyor. O satırı kapatıp hemen yeniden derleyin bu sefer gerçek hataya ulaşma şansınız doğuyor. Birden fazla satır kapatınca daha kolay ulaşabiliyorsunuz. Hata kalkmış ise kapatılan satırlardan birisi diyorsunuz ve teker teker açarak ulaşıyorsunuz.
Ete

ete

3mZ,

Stack işini gosub yerine goto kullanarak halletmişsin.

Değer değişmesi sorunu ise Word değişkenlerini 8 bitlik adrese kayıt etmenden kaynaklanıyor.
Word değişkeni 16 bitliktir. 2 adet byte lık yer kaplar hafızada.

BAkalım sen nasıl kullanmışsın;

WRITE $0,KI    burada KI değişkeni 16 bitliktir bu 16 bitlik bilgi şöyle kayıt edilmelidir.
WRITE $00, KI.byte0 , KI.Byte1
Okunurken ise aynı mantıkla 2 byte halinde okunmalıdır.
READ $00, KI.byte0 , KI.Byte1
Hex sayıları tek hane olarak yazma karekterlerine aykırı. Elin alışsın ift hane yaz daima.

Yazılan ve okunan bilgiler hemen tamamı word cinsinden. Bu nedenle her birine 2 adres ayırman gerekiyor.
Yukarıdaki örnek te KI değişkeni $00 ve $01 nolu adreslere kayıt edilmiş oldu. AYnı işi şöylede yapabilirsin;
WRITE $00, KI.byte0
WRITE $01, KI.Byte1
Her yazma emrinin sonuna 10 ms yazma gecikmesi koymayı ihmal etme.

Hemen anlayacağın gibi bir sonraki yazma emri olan
WRITE $1,KU   emride adres olarak $02 den başlamalı ve şu şekilde olmalıdır
WRITE $02, KU.byte0, KU,Byte1

Sonuç olarak yazma ve okuma komutlarını 2 byte lık sisteme göre adreslerinide ayarlayarak yeniden yazman gerekiyor.

Ete

3mZ

#25
KAZIMUĞUR&FERİTT
ETE Hoca vermişti ben linki tekrar veriyorum bu gönderdiğim linkte MCS 4.0 var. WRİTE VEYA READ yazım şeklinin birkaç şekli var hepsinide denedim derliyor.

HERKEZİN GÖNDERDİĞİM LİNKTEKİ MCS KULLANMASINI RİCA EDERİM!!!
Çünkü yazdığımız programlarda saçma sapan sorunlarla birbirimizi oyalamış oluyoruz aynı benim dün yaptığım gibi. :-[
Link;
http://www.mecanique.co.uk/software/mcsinstall.exe


ETE Hocam dediklerinizin hepsini uyguladım yardımlarınız için teşekkürler şu anda çok güzel çalışıyor dosya ilişiktedir rica etsem birde sizin isiste bakıp denermisiniz ben 27 satış yaptım bütün menüleri allak bullak ettim isis herhangi bir hata vermedi.

Size bu programda sormak istediğim 2 şey var.
1- WHILE (PORTD & %00111111)<63 or (PORTC & %00001111)<15:wend bu komutla ne yapmış olduk çözemedim portd ve portc nin sağındaki işaret tama olarak ne işe yarıyor burda ne anlamda kullanıldı?
2-WRITE $00, KI.byte0 , KI.Byte1 bu satırdan sonra ikinci bir değer gireceğim zaman $01 ilemi girmem lazım $02 ilemi?

READ $00,KI .byte1:PAUSE 10
READ $01,KU .byte1:PAUSE 10
READ $02,TA .byte1:PAUSE 10
READ $03,DN .byte1:PAUSE 10
READ $04,DU .byte1:PAUSE 10
READ $05,AYR.byte1:PAUSE 10
READ $06,KI .byte0:PAUSE 10
READ $07,KU .byte0:PAUSE 10
READ $08,TA .byte0:PAUSE 10
READ $09,DN .byte0:PAUSE 10
READ $10,DU .byte0:PAUSE 10
READ $11,AYR.byte0:PAUSE 10
READ $12,KIY.byte1:PAUSE 10
READ $13,KUS.byte1:PAUSE 10
READ $14,TAV.byte1:PAUSE 10
READ $15,DON.byte1:PAUSE 10
READ $16,DUR.byte1:PAUSE 10
READ $17,AY .byte1:PAUSE 10
READ $18,KIY.byte0:PAUSE 10
READ $19,KUS.byte0:PAUSE 10
READ $20,TAV.byte0:PAUSE 10
READ $21,DON.byte0:PAUSE 10
READ $22,DUR.byte0:PAUSE 10
READ $23,AY .byte0:PAUSE 10

Ben satırlarımı bu şekilde yaptım eğer örnekte verdiğimi  $01 ile başlarsam bu 24 satır 12 satıra inmiş olucak.

3mZ 






ete


1- WHILE (PORTD & %00111111)<63 or (PORTC & %00001111)<15:wend bu komutla ne yapmış olduk çözemedim portd ve portc nin sağındaki işaret tama olarak ne işe yarıyor burda ne anlamda kullanıldı?
Bu komut bütün tuşları aynı anda kontrol edip her hangi birinin basılı olup olmadığını kontrol eder. Basılı olduğu müddetçe orada bekler bırakılınca yoluna devam eder.
PortD de bağlı tuşları ele alalım. Toplam 6 adet tuş var. Bunlar pullup lı olarak bekliyorlar. BU durumda hiç bir tuşa basılmadığı zaman PortD yi okursan 63 değerini alırsın. Zira %00111111=63 dür. O halde bir tuşa basıldığı anda 63 değeri basılan tuşun konumuna göre küçülecek demektir. AYnı mantıkla PortC de bağlı 4 tuş okunduğu zaman değeri 15 dir. 15 den küçük ise bir tuş basılı demektir.  PORTC & (yani AND) (%00001111) komutu  PortC ninyalnızca ilk 4 bitini ayırıp test eder.

2-WRITE $00, KI.byte0 , KI.Byte1 bu satırdan sonra ikinci bir değer gireceğim zaman $01 ilemi girmem lazım $02 ilemi?
KI değişkeni 16 bitlik WORD değişkenidir. WRITE komutu 8 bitlik olarak çalışır. Hafızaları 8 bitliktir. Yani hafızanın her birine ancak byte yazabilirsin.  WORD iki adet byte dan oluştuğuna göre WORD yazmakiçin iki hafıza kullanman gerekir. Bir word değişkenini 2 adet byte değişkenine ayırmanın yolu onu byte0 ve byte1 şekilde tanımlamaktır.
O halde KI.Byte0 denildiği zaman KI nın ilk 8 biti anlaşılır. KI.Byte1 denildiği zaman ise KI nın ikinci 8 biti yani 8-15 nolu bitleri anlaşılır. Örnek verelim, KI=648 olsun  KI.Byte0=136 ($88) ve KI.Byte1=2 dir. Bunu KI haline çevirmek için
KI=2*256+136 demen gerekir.  Aslında 648 sayısının Hex formatlı haline bakarsan konu daha kolay anlaşılır. Desimal 648 = Hex $0288 dir. Bu sayıyı $02 ve $88 şeklinde ikiye ayırmış oluyoruz hepsi bu.
Yukarıdaki örneği (KI=648) hafızaya kayıt etmek için;
WRITE $00, 136    veya WRITE $00, $88
WRITE $01, 2        veya WRITE $01, $02
demen gerekir. Bundan sonra yeni bir hazfıza kullanman gerektiği zaman $02 den başlaman gerekiyor.
Temelkural her bir word değişkeni 2 adet hafızaya kayıt edilir. 0-1  ** 2-3  ** 4-5 .. şeklinde gider.
Umarım artık anlamışsındır.

3. Aşağıda yazdıkların eksik.  O kadar söylememe rağmen konuyu anlamamışsın.
Bir kutu yalnızca 8 bit alıyor ise sen oraya 16 biti nasıl sığdırırsın? olabilirmi böyle bir şey. Olamayacağı için
READ $00,KI .byte1:PAUSE 10  komutu yanlış oluyor. Doğrusu READ $00,KI.Byte0:Read $01, KI,Byte1
Ayrıca okuma komutlarının peşine pause yazman gerekmiyor. Bu gecikme yazma esnasında gereklidir. Okuma bir gecikme gerektirmiyor.
Bu nedenle aşağıdaki komutlar yukarıda anlattığım örneğe uygun yazılmalıdır. Pause 10 larda kaldırılmalıdır.
İki byte halinde okuma yapmışsın ama doğruolan bir değişkenin iki byte'ı bir birini takip eden hafızalarda olmasıdır.
Ayrı adreslerde olması seni şaşırtır. Sen yine dediğim gibi yap.

READ $01,KU .byte1:PAUSE 10
READ $02,TA .byte1:PAUSE 10
READ $03,DN .byte1:PAUSE 10
READ $04,DU .byte1:PAUSE 10
READ $05,AYR.byte1:PAUSE 10
READ $06,KI .byte0:PAUSE 10
READ $07,KU .byte0:PAUSE 10
READ $08,TA .byte0:PAUSE 10
READ $09,DN .byte0:PAUSE 10
READ $10,DU .byte0:PAUSE 10
READ $11,AYR.byte0:PAUSE 10
READ $12,KIY.byte1:PAUSE 10
READ $13,KUS.byte1:PAUSE 10
READ $14,TAV.byte1:PAUSE 10
READ $15,DON.byte1:PAUSE 10
READ $16,DUR.byte1:PAUSE 10
READ $17,AY .byte1:PAUSE 10
READ $18,KIY.byte0:PAUSE 10
READ $19,KUS.byte0:PAUSE 10
READ $20,TAV.byte0:PAUSE 10
READ $21,DON.byte0:PAUSE 10
READ $22,DUR.byte0:PAUSE 10
READ $23,AY .byte0:PAUSE 10

Ete


3mZ

Hocam çok sağolun teşekkür ederim çok iyi anladım.

Powered by EzPortal