Ne kusuru, güzel soru soran kimseleri arıyor zaten gözlerimiz, siz sorun elimizden geldiğince cevaplayalım.
Aslında bu tanımlamayı ccs c de bende kullanmamıştım, vesile oldunuz öğrendim.
"bu portlara bu değerleri niçin verdik "
Portlara değer vermedik,
#byte ile portlara değer veremeyiz,
aslında bu derlenirken kod dahi oluşturmaz,
yaptığımız iş derleyiciye porta yazdığımızda 0x05 (5) adresini kasteddiğimiz söylemek,
porta nın 05 adresinde olduğunu bahsettiğim gibi datasheet ten öğrendik,
(5 adrsini mahmut diyede eşitleyebilirdik, bit_test(mahmut,0) olarak kullanırdık)
(yani porta nı 0. bitini test etmek için aslında bit_test (5,0) yazmak yeterlidir
anlaşılması kolay olsun diye porta yı eşitleyip kullanıyoruz)
kullandığınız picin datasheet ini açıp memory organization kısmına bakmanız lazım,
burada portların veya diğer registerların picin hafızasında nerede bulundukları yazar,
ben 16f877 ye baktığımda porta nın 0x05 adresinde olduğu yazıyordu o yüzden 5 olarak tanımladım,
biraz daha açıklamak lazım,
16f md. (mikrodenetleyici)miz 8 bitliktir yani 1 byte,
tanımlı olan tüm registerların (portlar, adcon, timer vs.) herbiri 8 bitlik yani 1 byte lık bir adreste bulunur,
bunlar gerçektede md içinde 1 byte lık register a sahiptirler,
biz misal
if ( bit_test(porta,0 == 1) )
veya if (bit_test(porta,0) ) (porta nın 0. biti 1 ise zaten if doğru olmuş olur)
bunu derleyici kodu compile (derle) dediğimizde
if (bit_test ( 0x05,0) ) olarak algılar,
işin dahada aslı
biz bu şekilde bir kod yazdığımızda kod asm ye dönüşür şunun gibi birşey olur
btfss porta,0 ;port a nın sıfırıncı bitini test et 1 ise bu satırın altındaki satırı işlemeden sonraki satıra atla
goto x ;0 ise bu satır
goto y ;1 ise bu satır işlenir
ve bu asm kod derlenirken derleyici
btfss porta,0 yi btfss 0x05,0 olarak görür
sonra bunu btfss yide kapsayan 14 bitlik bir komuta dönüştürür,
sonra bunlar pc de işleyebilmek için intel hex gibi formatlara dönüştürülür,
bu kısımlara hiç girmeyeyim zaten gereklide değil,
sadece şunu belirtelim 16 f md lerde yazılan herbir kod 14 bitlik bir sayıya dönüşür
bu md nin işleyebileceği anladığı bir komuttur ve program hafızasına yazılır, (programlayıcı kit vs. ile)
O kadar uzattık mevzuyu aslında mesele kısaca şu,
# byte ....... ccs c de bir derleyici komutudur,
kullanılan md ile ilgili tanımlama yapmayada yarar,
bu tanımlama yapılarak md nin registerlarına vereceğimiz herhagibir isimle erişim sağlanmış olur, bu sayede
bit_test ( _ , _ ) gibi byte üzerinde işlem yapan ccs c komutları port registerları içinde kullanılabilir olur.
Aslında bunu sormanızın sebebi asm ile program yazmamanız,
md. programlamaya önce asm ile başlayın dememizin sebebi bu vb. durumlar,
buradanda tekrar dile getirelim, asm şart.