eeproma interrupt ile yazma?

Başlatan Maxim, 09 Aralık 2015, 08:15:57

Maxim

eeproma 10ms bekleme yapmadan yazmak istiyorum
bu interrupt ile mümkün sanırım
hiç deneyen kullanan oldumu bunu?

ete

Aslında EECON1 registerinin 1 nolu bitini kontrol ederek bekleme yapman gerekmez.
Tek yapman gereken şey önce YAZ bayrağını yazma ihtiyacı olduğunda Set etmek. Sonra, program yaz=1 ise gidip eproma yazacak. Yazma kısmında ise EECON1.1=0 ise yazacak değil ise yazmayacak. Yazdığı zaman YAZ=0 yapacak yazamıyor ise YAZ=1 olarak kalacak ve geri dönecek bir sonraki çevrimde tekrar bakacak aynı bite ve sıfır olmuş ise yazacak.
Bu şekilde yapabilirsin. Unutmayın eproma yazılırken her hangi bir kesme açık ise mutlaka yazma anında kaptılmalıdır. Aksi halde yanlış yazmalar veya hiç yazamama durumları söz konusu olabiliyor. Data sheetler bunu özellikle ikaz ediyor.

İşi kesme ile yapacaksanız şunu dikkate almak gerekiyor. Yazdırma işi kesme içinde yapılmıyor. Kesme, yalnızca yazma işi tamamlanınca kesme bayrağı set edilerek yazdırma işinin tamamlandığını gösteriyor. Bu durumda kesme ile bu işi yapmak için adımlar şöyle olmalı.
- Genel kesmeler açılmalı (INTCON.7=1)
- Yardımcı kesmeler açılmalı (INTCON.6=1)
- Eprom Kesmesi aktif edilmeli (PIE1.7=1) Bu aktivasyon eproma yazma alt programında yazmandan önce yapılabilir!!!!!.
- Eprom Keme bayrağı sıfırlanmalı (PIR1.7=0)
bu işlemlerden sonra kesme aktif edilmiş olacaktır.
- Eproma yazma isteği geldiğinde ,Program yazma alt programına gitmeli ve orada YAZ=1 ise eproma bilgiyi yazmadan geri dönmelidir. Zira bu bir önceki yazma işleminin henüz devam ettiğini gösterecektir. İşlem sona erdiğinde Kesme bayrağı (PIR1.7=1) set edileceği için program otomatikman kesme etiketine gidecek ve orada;
  YAZ=0 yapılacak
   PIR1.7=0  yapılıp geri dönülecektir. Kesme de kapatılabilir (PIE1.7=0) ve br sonraki yazma işleminde tekrar aktive edilebilir. 
Toparlarsak, Eproma yazma işleminde kesme yalnızca yazma işleminin bittiği anda oluşturulmaktadır. Buda size bir işaret olur ve o anda kendi bayrağınızı (YAZ) ve kesme bayrağını sıfırlayarak bir sonraki yazma işlemi için programı hazır edersiniz.

Ete



Maxim

Ete abi verdiğin bilgiler için çok teşekkür ederim
henüz çalışmamda sonuçlanmış birşey olmasada, proton+ ile ilgili öğrendiğim birkaç şeyi paylaşmak istedim

eskiden ewrite eproma yazma komutundan sonra 10ms bekleme yapardım
hatta bekleme süresi şöyle imiş, ben bunun için 10ms yeterli sanırdım.

byte cinsinden yazma yaparsak bekleme 10ms
float ise 40ms zaman alıyor
proton artık bu beklemeyi otomatik yapıyor, onuda proteusta fark ettim
yani bekleme satırı yazmamıza gerek yok artık.

diğer yeni özellik ise
interrupt sırasında eeproma yazma yaparken interruptlar otomatik olarak kapatılıyor
default olarak kapatılıyor ama onun içinde bir kontrol mekanizması var genede
Declare MemWrite_Int_Control = 1 komutu bu işe yarıyor.
eğer kapatılmasın istiyorsak Declare MemWrite_Int_Control = 0



Powered by EzPortal