25 Ekim 2021, 13:20:23

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


XC8 Başlangıç

Başlatan Mucit23, 04 Mayıs 2014, 04:08:52

OxfordBlue

04 Ağustos 2015, 14:20:50 #30 Son düzenlenme: 04 Ağustos 2015, 14:24:13 OxfordBlue
merhabalar

(data>>8 )
(veri<<4)

Bu kodların yaptıkları işi bana açıklayabilirmisiniz?

Gökhan BEKEN

04 Ağustos 2015, 14:31:52 #31 Son düzenlenme: 04 Ağustos 2015, 14:34:43 Gökhan BEKEN
örnek:
unsigned char data=0xFF;
unsigned char sonuc=data>>8;
//sonuc değişkeninin değeri 0 olur, çünkü bütün bitleri sağa kaymış olduğundan yerlerine 0 gelir.

örnek:
unsigned char veri=0x0F;
unsigned char sonuc=veri<<4;
//sonuc değişkeninin değeri 0xF0 olur, çünkü sağdaki bitler 4 kere sola kaymıştır ve yerlerine 0 gelmiştir.


örnek:
unsigned char sayi=0xAB;
unsigned char sonuc=sayi<<0;
unsigned char sonuc2=sayi>>0;
//sonuc  ve sonuc2 değişkeninin değeri 0xAB olur, çünkü hiç bir kaydırma yapılmamış olur.
Özel mesaj okumuyorum, lütfen göndermeyin.

OxfordBlue

Hocam gayet açıklayıcı olmuş. Peki o zaman
    ADCON2bits.ACQT2=1;//A/D Acquisition Time Select bits
    ADCON2bits.ACQT1=1;
    ADCON2bits.ACQT0=1;
    ADCON2bits.ADCS2=0;  //fosc/4
    ADCON2bits.ADCS1=1;
    ADCON2bits.ADCS0=0;
    ADCON2bits.ADFM=1;  //right justified

ADCON0bits.CHS3=0;  //Choose AN0
    ADCON0bits.CHS2=0;
    ADCON0bits.CHS1=0;
    ADCON0bits.CHS0=0;
    ADCON0bits.GO=1;
    while(ADCON0bits.nDONE);
    AN0_Value=AN0_Value+(ADRESH<<8)+ADRESL;

Burda ADRESH=0 olarak yapılmış gibi duruyor.
(ADRESH<<8) burayı aradan çıkarırsam 128 eksik çıkıyor değer.

Gökhan BEKEN

ADRESH verisi 8 kere sola kaydırılıyor diye 0 oluyor dememek lazım. Diğer örnekte 8 kere sola kaydırılıp aynı değişkene yazılıyordu, değişken 8 bitlik olduğu için sonuç 0 oluyordu.
Burda 8 kere kaydırılıyor ama 16 bitlik bir register'a yazılıyor olabilir ki öyle olması gerekir. AN0_Value değişkeninin(veya register'inin) kaç bitlik olduğunu bilmek lazım.

Not: Kodları code tagı içine alırsanız okunması kolay olur. Lütfen dikkat edin.
Özel mesaj okumuyorum, lütfen göndermeyin.

OxfordBlue

04 Ağustos 2015, 18:02:19 #34 Son düzenlenme: 04 Ağustos 2015, 18:11:26 OxfordBlue
AN0_Value 16bitlik evet. ADRESH DA 16bit şimdi sorun ortadan kalktı
teşekkürler

OxfordBlue

Basit bir tek boyutlu dizi kullanmak istiyorum 401 tane unsigned char olan içinde.

unsigned char Data[400]=0;

Data[0]=10;
Data[1]=20;

Data[2]=Data[1]-Data[0];

Şeklinde kullanabilirmiyim ?

mehmet

Alıntı yapılan: OxfordBlue - 28 Ağustos 2015, 14:50:45
Basit bir tek boyutlu dizi kullanmak istiyorum 401 tane unsigned char olan içinde.

unsigned char Data[400]=0;

Data[0]=10;
Data[1]=20;

Data[2]=Data[1]-Data[0];

Şeklinde kullanabilirmiyim ?
Yapılabilir tabbi ki...

Mesela;

analog_oku();
switch (
Data[c])
{
     case 
0:
         
fonksiyon0();
         break;
     .....
     default:
         break;
}

...
...

for(
0100a++)
{
    
Data[a] = a;
}

Gökhan BEKEN

unsigned char Data[400]=0;
şeklinde tanımlama yapamazsınız.
ama şöyle olur: unsigned char Data[400]={1,2,3,4}; 
Özel mesaj okumuyorum, lütfen göndermeyin.

mehmet

İlk değer atama istenirse söyle yapılabilir...

unsigned char Data
[400];
...
for(
0400a++)
{
     
Data[a] = 0;
}
...

OxfordBlue


OxfordBlue

10 Eylül 2015, 16:19:43 #40 Son düzenlenme: 10 Eylül 2015, 16:35:44 OxfordBlue
unsigned char A1=2;
unsigned char Z=0;

switch (Z)
{
CASE 0:
..
BREAK;
CASE 1:
....
BREAK;
CASE A1:
...
BREAK;
}

2 'yi A1 yerine kullanabilirmiyim, başka uygulamalarda buna ihtiyacım olcak.

Timucin

Merhaba;
Dizi ve Pointer'lar konusunda kendimi geliştirmeye çalışıyorum. Şöyle bir noktaya takıldım; (XC8 V1.37  -  PIC16F876A)



const unsigned char MyDizi[6] @0x0123;
const 
unsigned char MyPointer;

MyPointer =  (const unsigned char *) &MyDizi;   // Burada MyPointer'in gösterdiği Adres 0x8123 ama program sorunsuz çalışıyor????



Burada MyPointer'in gösterdiği adres 0x8123 oluyor; yani derleyici kendi kendiliğine adrese 0x8000 ekliyor. Program Memory 0x8000'e çıkmadığı için program sorunsuz çalışıyor.
Halbuki aynı şey RAM için söz konusu değil



unsigned char MyDizi
[6] @0x01A0;
unsigned char MyPointer;

MyPointer =  (unsigned char *) &MyDizi;  // Burada MyPointer'in gösterdiği Adres 0x01A0 sorun yok !...



Const'daki bu durum küçük programlarda sorun yaratmıyor gibi ama komplex programlarda sorun yaratır mı? Bunu gidermenin bir yolu var mı?

Saygılarımla
Timuçin

quarko

Const olarak tanımladığınız bir pointer a öyle adres tanımlayamazsınız. Program memory de denediğiniz örnekte const u kaldırıp denerseniz veya const pointer ı tanımladığınız yerde adres ataması yaparsanız çalışacaktır.

Kolay gelsin.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Timucin

Merhaba
Cevap için çok teşekkür ediyorum; lakin sizin söylediğiniz derleyici ERROR veriyor ve derlemiyor;
Benim yukarıdaki mesajımda verdiğim kodlar problemsiz derleniyor; hem proteus'da hem de gerçekte hiç bir sorun olmadan çalışıyor;
Sadece derleyicinin otomatik olarak adrese neden 0x8000 eklediğini merak ettim. Beklenmeyen bir şey bu.

Saygılarımla
Timuçin


const unsigned char MyDizi[6] @0x0123;   // Global'de tanimlandi
unsigned char MyPointer;       // Main içinde tanimlandi

MyPointer =  (const unsigned char *) &MyDizi;   // error: (712) can't generate code for this expression




const unsigned char MyDizi[6] @0x0123;   // Global'de tanimlandi
unsigned char MyPointer;       // Main içinde tanimlandi

MyPointer =  (unsigned char *) &MyDizi;   // error: (712) can't generate code for this expression



Benim Constant'lı ,lk verdiğim kodlara ait ASM'sinden....


185                           
   186                           
;main.c14MyPointer = (const unsigned char*)&MyDizi;
   
187  0131  3081               
	
movlw
	
129                      [color=red][b][b]Neden MyPointerin highbyte'ına 0x81 yüklüyor?[/b][/b][/color]
   188  0132  00F1               
	
movwf
	
_MyPointer+1
   189  0133  3023               
	
movlw
	
35
   190  0134  00F0               
	
movwf
	
_MyPointer

    __CFG_PWRTE$OFF    0000               _MyDizi              0123                __end_of__initialization 012A     
    __pcstackCOMMON    0000                _MyDizi_absaddr 0123               __pnvCOMMON 0070                            [b][color=red]Halbuki MyDizi 0123 ??[/color][/b]
             __pmaintext    012E                 __stringtab         0003               end_of_initialization 012A  



Mucit23

xc8 de delay fonksiyonları nasıl sistemeeklenir? __delay_ms fonksiyonları tanımlı değil diye bir hata alıyorum. 

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.