Degısken sayısı neden bukadar az

Başlatan XX_CİHAN_XX, 07 Aralık 2005, 22:37:05

XX_CİHAN_XX

Arkadaşlar CCS C de unsigned int8 olarak 170 adet global degısken tanımlıyabılıyoruz.16f877 de 332 adet register tanımlayabılmemıze ragmen ccs de nerdeyse bunun yarısı kadar degısken tanımlıyabılıyoruz bunun sebebı nedır acaba?
Bunu 16f877 için asm de oldugu gıbı 332 adet regıster olmasada en azından 250 adet degısken tanımlamak mumkun mu yoksa ccs de 16f877 için degısken açma limiti 170 lemı sınırlı.
Bu arada bir kayan yazı uygulaması ıcın bu kadar çok degıskene ıhtıyacım var yoksa naapayım yuzlerce degıskenı :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

piedos

Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

Petek

Alıntı yapılan: "XX_CİHAN_XX"Arkadaşlar CCS C de unsigned int8 olarak 170 adet global degısken tanımlıyabılıyoruz.16f877 de 332 adet register tanımlayabılmemıze ragmen ccs de nerdeyse bunun yarısı kadar degısken tanımlıyabılıyoruz bunun sebebı nedır acaba?
Bunu 16f877 için asm de oldugu gıbı 332 adet regıster olmasada en azından 250 adet degısken tanımlamak mumkun mu yoksa ccs de 16f877 için degısken açma limiti 170 lemı sınırlı.
Bu arada bir kayan yazı uygulaması ıcın bu kadar çok degıskene ıhtıyacım var yoksa naapayım yuzlerce degıskenı :)
170 değil 128 tane. SPR lerden kullanmadıkların olursa onları da dahil edebilir. Ama bu her zaman geçerli değil. Diğer banklardaki değişkenleri pointer olarak tanımlayacaksın. Yada en basiti 2. 3. veya 4. banklarda indisi 80'i geçmeyecek şekilde read_bank, write_bank fonksiyonlarını kullanacaksın.

Tanımladığın değişken adresini sabit girersen (1. bank haricinde) derleyici o adresteki bilgiye ulaşıyor. Ama bunu tavsiye etmem.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Alıntı yapılan: "Petek"
170 değil 128 tane. SPR lerden kullanmadıkların olursa onları da dahil edebilir. Ama bu her zaman geçerli değil. Diğer banklardaki değişkenleri pointer olarak tanımlayacaksın. Yada en basiti 2. 3. veya 4. banklarda indisi 80'i geçmeyecek şekilde read_bank, write_bank fonksiyonlarını kullanacaksın.

Tanımladığın değişken adresini sabit girersen (1. bank haricinde) derleyici o adresteki bilgiye ulaşıyor. Ama bunu tavsiye etmem.
ilgilendiğiniz için teşekkür ederim.Ben ccs yi daha yeni yeni ögrenmeye başlıyorum.Şimdiye kadar asm kullanıyordum.
SPR ne anlama gelıyor onu bile bilmiyorum o yuzden mumkunse bir ornek ile acıklamanızı rica edicem.2. 3. veya 4. banlarda dedıgınız gıbı 79 adet degısken acılabılmesı gerekır.Yani asm dekı gıbı bank degıstırerek degıskenlerı kullanın dıyordunuz pekı degıskenlerı tanımlarkende bank degıstırecekmıyım bunula ilgili basıt bır ornek gosterırsenız cok sevınırım
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Petek

Alıntı yapılan: "XX_CİHAN_XX"SPR ne anlama gelıyor onu bile bilmiyorum o yuzden mumkunse bir ornek ile acıklamanızı rica edicem.2. 3. veya 4. banlarda dedıgınız gıbı 79 adet degısken acılabılmesı gerekır.Yani asm dekı gıbı bank degıstırerek degıskenlerı kullanın dıyordunuz pekı degıskenlerı tanımlarkende bank degıstırecekmıyım bunula ilgili basıt bır ornek gosterırsenız cok sevınırım

SPR özel amaçlı registerler (microchipin terminolojisi, datasheetlerde öyle geçiyor). Örnek olarak fsr registeri. Assemblerda hiç pointer kullanmıyorsanız fsr bir baytlık ram alanı olarak kullanılabilirsiniz. Derleyici kullanılmayan donanım modüllerini tespit edip, onlara ait registerlerde kullanılabilecek alanları çıkartıp, kendi kullanımına açar. Burada sizin kullanıcı olarak bilmeniz gereken fazla bir şey yok (assembler kullanıcısı olarak aslında hepsini bilmenizde fayda var :)

Bank 2, 3 ve 4 teki (yada 1, 2 ,3) alanı dizi olarak kullanacaksanız write_bank ve read_bunk fonksiyonlarını kullanmanız yeterli (helpten kullanımını bulabilirsinia).

Değişken tanımlarsanız işiniz daha zor, zira bank1 den bir değişkeni alıp, bank 0 a taşıyıp, orada gerekli işlemi yapıp sonucu tekrar bank1'e aktarmak hem program alanı olarak, hem zaman olarak kayıp demektir. O nedenle en sık kullanacağınız değişkenlerin bank0 da olması program verimliliği açısından önemli.

Kullandığın işlemcinin header dosyasına 8örnek 16F877.h)  bakarsan orada diğer banklardaki registerlerin nasıl tanımlandığını görebilirsin. Aynen bunun gibi, belirli bir adres aralığını rezerve eder, o aralıkta değişkenlerini sabit adresleri ile tanımlayabilirsin).

Kolay gelsin
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Alıntı yapılan: "Petek"
SPR özel amaçlı registerler (microchipin terminolojisi, datasheetlerde öyle geçiyor). Örnek olarak fsr registeri. Assemblerda hiç pointer kullanmıyorsanız fsr bir baytlık ram alanı olarak kullanılabilirsiniz. Derleyici kullanılmayan donanım modüllerini tespit edip, onlara ait registerlerde kullanılabilecek alanları çıkartıp, kendi kullanımına açar. Burada sizin kullanıcı olarak bilmeniz gereken fazla bir şey yok (assembler kullanıcısı olarak aslında hepsini bilmenizde fayda var :)
Bende bu yuzden zaten assemblerdan vaz gecıp ccs ye basladım ama dedıgım gıbı daha yenıyım o yuzden help dosyasından write_bank ve read_bank fonksiyonlarının nasıl kullanıldıgını ınceledım fakat bu komutların baska sayfalara degısken tanımlama konusunda bana yardımcı olacagına pek sanmıyorum.Yada ben anlıyamadım bu komutların kullanılısını soyle bir yontem denedım ama hata verıyor ve bır turlu dezeltıpte herbanka regıster acmayı basaramadım bir yol gosterırsenız çok sevınirim.

#include <16F877.h>
#BYTE    STATUS      =0X03    //status u tanımla
//---------------------------------------------------------------
bit_clear(STATUS,6);            //0. sayfaya tanımla
bit_clear(STATUS,5);            //0. sayfaya tanımla
unsigned int8 temp[7][8];     //56 adet regıster dızısı tanımla
bit_clear(STATUS,6);            //1. sayfaya tanımla
bit_set(STATUS,5);            //1. sayfaya tanımla
unsigned int8 tempa[7][8];     //56 adet regıster dızısı tanımla
bit_clear(STATUS,5);            //2. sayfaya tanımla
bit_set(STATUS,6);            //2. sayfaya tanımla
unsigned int8 tempb[7][8];     //56 adet regıster dızısı tanımla
bit_set(STATUS,6);            //3. sayfaya tanımla
bit_set(STATUS,5);            //3. sayfaya tanımla
unsigned int8 tempc[7][8];     //56 adet regıster dızısı tanımla
bit_clear(STATUS,6);            //0. sayfaya gerı don
bit_clear(STATUS,5);            //0. sayfaya gerı don
//---------------------------------------------------------------
void main(){

}

             Sevgiler&Saygılar
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Petek

Alıntı yapılan: "XX_CİHAN_XX"...o yuzden help dosyasından write_bank ve read_bank fonksiyonlarının nasıl kullanıldıgını ınceledım fakat bu komutların baska sayfalara degısken tanımlama konusunda bana yardımcı olacagına pek sanmıyorum. Yada ben anlıyamadım bu komutların kullanılısını....

Kayan yazı uygulaması yapacağım dediniz. Ben de size read_bank ve write_bank fonksiyonlarını dizi gibi kullanabileceğinizi söyledim.

3 adet bank ve her bankta 80 bayt var. Bu da 3x80 lik bir dizi demektir.

write_bank(1, index, c);
write_bank(2, index, c);
write_bank(3, index, c);
c=read_bank(1, index);

Bu şekilde 240 bayta ulaşabilirsiniz. Amacınız kayan yazıdaki verileri saklamak değil mi?

Alıntı Yap
soyle bir yontem denedım ama hata verıyor ve bır turlu dezeltıpte herbanka regıster acmayı basaramadım bir yol gosterırsenız çok sevınirim.

#include <16F877.h>
#BYTE    STATUS      =0X03    //status u tanımla
//---------------------------------------------------------------
bit_clear(STATUS,6);            //0. sayfaya tanımla
bit_clear(STATUS,5);            //0. sayfaya tanımla
unsigned int8 temp[7][8];     //56 adet regıster dızısı tanımla
bit_clear(STATUS,6);            //1. sayfaya tanımla
bit_set(STATUS,5);            //1. sayfaya tanımla
unsigned int8 tempa[7][8];     //56 adet regıster dızısı tanımla
bit_clear(STATUS,5);            //2. sayfaya tanımla
bit_set(STATUS,6);            //2. sayfaya tanımla
unsigned int8 tempb[7][8];     //56 adet regıster dızısı tanımla
bit_set(STATUS,6);            //3. sayfaya tanımla
bit_set(STATUS,5);            //3. sayfaya tanımla
unsigned int8 tempc[7][8];     //56 adet regıster dızısı tanımla
bit_clear(STATUS,6);            //0. sayfaya gerı don
bit_clear(STATUS,5);            //0. sayfaya gerı don
//---------------------------------------------------------------
void main(){

}
             Sevgiler&Saygılar
16F877.h dosyasına baktınız mı? Bank 1 deki değişkenleri nasıl tanımladığına bakın. Örnekler orada var. Diğer banklarda dizi nasıl tanımlanır bir bakmam lazım. Ama mantık olarak diğer banklara pointer ile ulaşmak gerekir (fsr ve indf registerleri bu amaçla tasarıma eklenmiştir, hatta 18 serisinde bunlardan 3 tane var)

Kolay gelsin
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

İlginizzden ve yardımlarınızdan dolayı çok teşkkür ederim ancak verdiğiniz örneği uyguladıgımda yıne hata mesajı aldım.Yanlıs yaptıgım noktayı gosterırsenız sevınırım.
Aşagıdakır kodlarda yapmak istedıgım sey bank 1 e 3 tane degısken tanımlamak ve ana programda bu degıskenlerı okuyabılmek.

#include <16F877.h>
//---------------------------------------------------------------
write_bank(1,index1,c);
write_bank(1,index2,c);
write_bank(1,index3,c);
//---------------------------------------------------------------
void main(){
c=read_bank(1, index);
}

Bunu derledıgımde hata verıyor.Acaba yine nerde yanlış yaptım.Yardım ederseniz cok sevınırım.Teşekkurler,
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Petek

Alıntı yapılan: "XX_CİHAN_XX"...
Aşagıdakır kodlarda yapmak istedıgım sey bank 1 e 3 tane degısken tanımlamak ve ana programda bu degıskenlerı okuyabılmek.
Öncelikle terminolojide anlaşmak lazım. Eğer kullanımınıza açık dizi şeklinde bir alanınız varsa ve bu alana veri yükleyecekseniz artık bireysel değişken kavramını unutmanız lazım.

Şunu diyebilirsiniz: bank1 de ilk üç baytı şu amaçla kullanacağım. Diyelim ki bank 1'in ilk üç baytına 'A', 'B', 'C' harflerini saklayacaksınız.

#include <16f877.h>
#device ADC=10
#fuses HS,NOPROTECT, NOWDT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=19200, xmit=PIN_c6, rcv=PIN_c7)

//---------------------------------------------------------------
unsigned char c, index=0;

//---------------------------------------------------------------

void main(){

write_bank(1,index++, 'A');
write_bank(1,index++, 'B');
write_bank(1,index++, 'C');

// bunları tersten okutup seri porta göndereceğinizi varsayalım

c=read_bank(1, --index);
printf("%c", c);
c=read_bank(1, --index);
printf("%c", c);
c=read_bank(1, --index);
printf("%c", c);
}
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Alıntı yapılan: "Petek"
Alıntı yapılan: "XX_CİHAN_XX"...
Aşagıdakır kodlarda yapmak istedıgım sey bank 1 e 3 tane degısken tanımlamak ve ana programda bu degıskenlerı okuyabılmek.
Öncelikle terminolojide anlaşmak lazım. Eğer kullanımınıza açık dizi şeklinde bir alanınız varsa ve bu alana veri yükleyecekseniz artık bireysel değişken kavramını unutmanız lazım.

Şunu diyebilirsiniz: bank1 de ilk üç baytı şu amaçla kullanacağım. Diyelim ki bank 1'in ilk üç baytına 'A', 'B', 'C' harflerini saklayacaksınız.

#include <16f877.h>
#device ADC=10
#fuses HS,NOPROTECT, NOWDT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=19200, xmit=PIN_c6, rcv=PIN_c7)

//---------------------------------------------------------------
unsigned char c, index=0;

//---------------------------------------------------------------

void main(){

write_bank(1,index++, 'A');
write_bank(1,index++, 'B');
write_bank(1,index++, 'C');

// bunları tersten okutup seri porta göndereceğinizi varsayalım

c=read_bank(1, --index);
printf("%c", c);
c=read_bank(1, --index);
printf("%c", c);
c=read_bank(1, --index);
printf("%c", c);
}

Cok teşekkur ederım simdi daha iyi anladım.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

Ya bu konu ile ilgili bişey daha sorma ihtiyacı duydum.Yukarıdakı ornekte  bank1 e tek tek degısşken tanımlamışsınız.
*Peki bir dizi degısken tanımlamak gerekırse bunu nasıl yapıcagız?
*Birde yukarıdakı ornekte bank1e acılan ve kullanılan 3 adet index degıskenı glabal mıdır yoksa yerek degıskenmıdır?
Ben daha oncede soledıgım gıbı kayan yazı uygulaması ıcın ekran datalarını saklamam gereken bir degısken grubu olusturmam gerekkıyor.
Dolayısıyla cok fazla degıskene ihtiyacım var.Daha dogrusu ekranda kullanacagım led sayısı/8 kadar 8 bitlik degısken tanımlama gerek dolayısıyla bank0 dakı degısken sığası bana yetmıyor.
Ayrıca bu degıskenlerı dızı seklınde tanımlamak sanırım benım ıcın daha iyi olucak dolayısıyla sorum şu,
*Bank0 ve/veya diğer banklarda global olarak ve/veya dizi şeklinde 192 adet degısken tanımlamam gerekıyor.
*Bunu nasıl yaparım bir tavsiye bir yol gösterirseniz çok sevinirim.
                Saygılar&Sevgiler
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Petek

Alıntı yapılan: "XX_CİHAN_XX"Ya bu konu ile ilgili bişey daha sorma ihtiyacı duydum.Yukarıdakı ornekte  bank1 e tek tek degısşken tanımlamışsınız.
*Peki bir dizi degısken tanımlamak gerekırse bunu nasıl yapıcagız?

Bank 1 e tek tek değişken falan tanımlamadım. Bank 1 80 baytlık bir dizi olduğunuz düşün. Bu dizinin ilk elemanına (index=0) bir değer atadım. Bunu seri porttan okuduğun bilgi olarak ta kabul edebilirsin. Dizinin ikinci elemanına (index=1) başka bir değer atadım.

Aynı şeyi seri porttan okuduğum verileri saklamak için yapsaydım şöyle de olabilirdi:
for (i=0;i<80;i++) write_bank(1, i, getch());

Alıntı Yap
*Birde yukarıdakı ornekte bank1e acılan ve kullanılan 3 adet index degıskenı glabal mıdır yoksa yerek degıskenmıdır?
Örneğe bakarsan mainden önce tanımlanmış. Dolayısıyla global değişken. Üç adet index değişkeni tanımlanmadı. Sadece bir tane var. ilk değeri index=0. kullanıldıkça index++ ile (yani index=index+1) 1, 2 değerlerini alıyor.

Alıntı YapBen daha oncede soledıgım gıbı kayan yazı uygulaması ıcın ekran datalarını saklamam gereken bir degısken grubu olusturmam gerekkıyor.
Dolayısıyla cok fazla degıskene ihtiyacım var.Daha dogrusu ekranda kullanacagım led sayısı/8 kadar 8 bitlik degısken tanımlama gerek dolayısıyla bank0 dakı degısken sığası bana yetmıyor.
O zaman bank2 ve bank3 ü de kullanacaksın.

for (i=0;i<80;i++) write_bank(2, i, getch());
for (i=0;i<80;i++) write_bank(3, i, getch());
gibi

Alıntı Yap
Ayrıca bu degıskenlerı dızı seklınde tanımlamak sanırım benım ıcın daha iyi olucak dolayısıyla sorum şu,
*Bank0 ve/veya diğer banklarda global olarak ve/veya dizi şeklinde 192 adet degısken tanımlamam gerekıyor.
daha önce de dediğim gibi bank1,2,3 ü 3 adet 80 elemanlı (her elemanı 1 bayt) olan dizi olarak kullanabilirsin.

Alıntı Yap
*Bunu nasıl yaparım bir tavsiye bir yol gösterirseniz çok sevinirim.
                Saygılar&Sevgiler
yukarıda anlattığım gibi :)

Yapmak istediğin şeyi kodla, gerisini beraber geliştiririz. Elinde aaa(3,80) şeklinde bir dizi olduğunu varsay ve ona göre ne yapmak istiyorsan yap, en sonunda onu CCS'nin anlayacağı şekle dönüştürürüz beraber.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

@Petek
Yaptığınız ve yapacagınız yardımlr için şimdiden teşekkürler.
#include <16F877.h>
unsigned int8 temp[14][5];    //70 adet degişken tanımlandı
unsigned int8 c;

void main (){
write_bank(0,temp[0][0],0);
write_bank(1,temp[0][0],0);
write_bank(2,temp[0][0],0);
write_bank(3,temp[0][0],0);
//----------------------------
write_bank(0,temp[0][1],0);
write_bank(1,temp[0][1],0);
write_bank(2,temp[0][1],0);
write_bank(3,temp[0][1],0);
//----------------------------
write_bank(0,temp[0][2],0);
write_bank(1,temp[0][2],0);
write_bank(2,temp[0][2],0);
write_bank(3,temp[0][2],0);
//----------------------------
//           *
//           *
//           *
//           *
//           *
//----------------------------
write_bank(0,temp[13][4],0);
write_bank(1,temp[13][4],0);
write_bank(2,temp[13][4],0);
write_bank(3,temp[13][4],0);
//----------------------------

c=read_bank(1,temp[7][4]);

}

Yukarıda yazdıgım kodlar sorunsuz derlenıyor ancak yapmak istediğim şeyi dogru yapabilmişmiyim sormak istedim.
Yukarıda yapmak istediğim şey:
Bank0/1/2/3 te 70 adet ayrı degısken dızısı kullanabılmek.
Bank0/1/2/3 te birbirinden farklı 70 er adet GLOBAL degısken dızısı oluturdugumu düşünürsek bunların herbırıne "0" degerı yuklemeye calıstım ve butun degıskenlere (70*4 kadar degıskene) "0" datasını yukledıkten sonra içlerinden herhangi birini(temp[7][4] isimli değişkeni) okuyup c degişkenine yüklemeye çalıştım.
Sizce dogru mu yapmışım veya daha dogru bır yolu var mı bilgilendirirsenız sevınırım. Teşekkürler.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Petek

Alıntı yapılan: "XX_CİHAN_XX"@Petek
Yaptığınız ve yapacagınız yardımlr için şimdiden teşekkürler.
#include <16F877.h>
unsigned int8 temp[14][5];    //70 adet degişken tanımlandı
unsigned int8 c;

void main (){
write_bank(0,temp[0][0],0);
write_bank(1,temp[0][0],0);
write_bank(2,temp[0][0],0);
write_bank(3,temp[0][0],0);
//----------------------------
write_bank(0,temp[0][1],0);
write_bank(1,temp[0][1],0);
write_bank(2,temp[0][1],0);
write_bank(3,temp[0][1],0);
//----------------------------
write_bank(0,temp[0][2],0);
write_bank(1,temp[0][2],0);
write_bank(2,temp[0][2],0);
write_bank(3,temp[0][2],0);
//----------------------------
//           *
//           *
//           *
//           *
//           *
//----------------------------
write_bank(0,temp[13][4],0);
write_bank(1,temp[13][4],0);
write_bank(2,temp[13][4],0);
write_bank(3,temp[13][4],0);
//----------------------------

c=read_bank(1,temp[7][4]);

}

Yukarıda yazdıgım kodlar sorunsuz derlenıyor ancak yapmak istediğim şeyi dogru yapabilmişmiyim sormak istedim.
Yukarıda yapmak istediğim şey:
Bank0/1/2/3 te 70 adet ayrı degısken dızısı kullanabılmek.

write_bank(0,temp[13][4],0); bu satırdaki temp[13][4] nün işi ne orada? Yoksa şunu mu düşündünüz:  "write_bank komutu, bank 0 da tanımlı değişkenimizin temp[13][4] nolu elemanına 0 değeri atıyor". Böyle düşünmüş iseniz yanlış. Sizin temp[13][4] boyutlu bir dizi tanımlamanıza gerek yok. elinizde bütün banklarda 80 baytlık bir alan var. Bunu bir dizi düşünün fakat isim vermeyin buna. Hayali dizi. Bu dizinin elemanlarına write_bank yada read_bank komutları ile erişiyorsunuz. Hepsi bu. Aslında write_bank ve read_bank fonksiyonlarında yapılan işlem aynen şu: her bir banktaki ram alanına (yada hayali dizilerimizin) her bir baytına o baytın "memory map"teki adresini fsr registerine yazıp, değerini indf registerinden okuma veya yazma işlemi yapar. Bank2 ve 3 için ilave olara irp flağini set eder.

Alıntı Yap
Bank0/1/2/3 te birbirinden farklı 70 er adet GLOBAL degısken dızısı oluturdugumu düşünürsek bunların herbırıne "0" degerı yuklemeye calıstım ve butun degıskenlere (70*4 kadar degıskene) "0" datasını yukledıkten sonra içlerinden herhangi birini(temp[7][4] isimli değişkeni) okuyup c degişkenine yüklemeye çalıştım.
Sizce dogru mu yapmışım veya daha dogru bır yolu var mı bilgilendirirsenız sevınırım. Teşekkürler.

yapmanız gereken aynen şu beş satırdaki gib.
for (i=0;i<70;i++) write_bank(0, i, 0);
for (i=0;i<70;i++) write_bank(1, i, 0);
for (i=0;i<70;i++) write_bank(2, i, 0);
for (i=0;i<70;i++) write_bank(3, i, 0);
c=read_bank(1,40);

Yalnız bank 0 da öyle istediğiniz gibi 70 bayt size tahsis edilmiş değil, derleyiciye bu alanı sen kullanma bana rezerve et diyeceksiniz. Helpten CCS nin adres rezervleme komutuna bakın.

daha derli toplu kullanılabilen read_bank ve write_bank komutlarının yerine fsr ve indf registerlerini kullanarak aynı işlemleri yaptırabilirsiniz.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Alıntı Yap
yapmanız gereken aynen şu beş satırdaki gib.
for (i=0;i<70;i++) write_bank(0, i, 0);
for (i=0;i<70;i++) write_bank(1, i, 0);
for (i=0;i<70;i++) write_bank(2, i, 0);
for (i=0;i<70;i++) write_bank(3, i, 0);
c=read_bank(1,40);
Olayı şimdi kavradım sanırım çok teşekkürler.Ancak son birsoru sormak istiyorum.
Atıyorum bank1 dekı regıster sıgasından 40. adrese adrese 0x7F datasını yukleyecegım
Şu sekılde yapabılırım degıl mı
write_bank(1, i=40, 0x7F);
birde,
c=read_bank(1,40);
derken bank1de bulunan adres map in 40. adresinde bulunan degeri c degıskenıne yuklemıs oluyoruz degıl mı?
onun yerıne
c=read_bank(1,i=40);
dersekde olur mu?
Çok teşekkurler.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.