registerlere erişim

Başlatan ahmetbudak, 30 Ocak 2014, 22:51:57

ahmetbudak

iyi akşamlar
arkadaşlar ccs c de registerlere direkt erişim yokmudur
mesela 16f877 de ADCON0 REGİSTERİ ne setup ADC fonksiyonu ile değil de
ADCON0=0b00110011;
g,b, erişim olmuyor mu?
cevaplar için şimdiden teşekkürler

Bayramsumbul

Evet var yani ben kullanıyordum.Şu çiplerin define v.b dosyalarının olduğu klasörde vardı register isimleri.Belkide aynısıydı,bilgisayara geçince bakarım.
Bir Elektronik Meraklısının Serüveni...

pwm.c

#2
#byte ADCON0 = 0x001F

bu tanımlama kodunu en başa eklediğinde ADCON0 registerine ulaşabilirsin.
eğer başka registerlerde eklemek istiyorsan .inc dosyasından adresini öğrenip yukarıdaki gibi yazabilirsin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

ahmetbudak

Alıntı yapılan: pwm.c - 30 Ocak 2014, 23:28:44
#byte ADCON0 = 0x001F

bu tanımlama kodunu en başa eklediğinde ADCON0 registerine ulaşabilirsin.
eğer başka registerlerde eklemek istiyorsan .inc dosyasından adresini öğrenip yukarıdaki gibi yazabilirsin.
cevap için teşekkür ederim

RaMu

Veya
Kullanacağın picin datasheet ini açıyorsun
registers bölümünden istediğin register ın adresine bakıyorsun
yukarıda anlatıldığı gibi
#byte PORTB = 0x0006
gibi bu adresi derleyiciye tanımlayıp
(tanımlarken istediğin ismide verebilirsin tabiki)
programın içerisinde kullanabiliyorsun.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ahmetbudak

Alıntı yapılan: RaMu - 30 Ocak 2014, 23:49:12
Veya
Kullanacağın picin datasheet ini açıyorsun
registers bölümünden istediğin register ın adresine bakıyorsun
yukarıda anlatıldığı gibi
#byte PORTB = 0x0006
gibi bu adresi derleyiciye tanımlayıp
(tanımlarken istediğin ismide verebilirsin tabiki)
programın içerisinde kullanabiliyorsun.
peki hocam mesela ADCON0 REG. İN 0. bitine nasıl erişiriz CCS C de
cevabınız için tşk.

pwm.c

Bit tanımlaması yaparak ulaşabilirsin.
#bit  ADON = 0x001F.0
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

RaMu

#7
if (ADCON0,0)
{
adcon0 ın 0. biti 1 ise buraya yazılanı işler
}

tabi bu saçma oldu, port için daha güzel bir örnek bu.

Misal adcon0 a35h yğklemek istiyorsun;
ADCON0=35h;
direk yazdın bitti,

direk bit işlemleri için;
bit_set(ADCON,0);         // adcon0 ın 0. bitini bir yap

yani standart ccsc deki registerlara ne yapabiliyorsan bit byte işlemleri olarak
aynı onları yapabilirsin.
bit_clear(ADCON0,1);    //adcon0 ın 1. bitini sıfır yap


Not;
pwm.c hocam bu yukarıdaki kullanımlar hata vermiyor değilmi,
ben yanlış hatırlıyor olabilirim,
port için portb=45h;
felan gibi deneme yapmıştım ama
diğerlerini net hatırlamıyorum,
ben kullanılabiliyor diye hatırlıyorum,
pwm.c hocam net hatırlıyorsanız doğrulayın,
net değilse ben bir yazar denerim ona göre.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

frederic

Alıntı yapılan: pwm.c - 30 Ocak 2014, 23:28:44
#byte ADCON0 = 0x001F

bu tanımlama kodunu en başa eklediğinde ADCON0 registerine ulaşabilirsin.
eğer başka registerlerde eklemek istiyorsan .inc dosyasından adresini öğrenip yukarıdaki gibi yazabilirsin.

Hocam bu .inc dosyası nerede acaba?

pwm.c

#9
PIC kullanan herkes MPLAB programınıda kurmuş olması gerekir.
.inc dosyaları MPASM programının olduğu yerdedir.
C:\Program Files\Microchip\MPASM Suite
MPLABX yüklü ise:
C:\Program Files\Microchip\MPLABX\mpasmx
içinde mevcut.
yada proteus programı yüklü ise:
C:\Program Files\Labcenter Electronics\Proteus 7 Professional\Tools\MPASM
içinde bulabilirsiniz.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

ahmetbudak

hocam şu kodları yazıp derlediğimde derleme hatası vermiyor
fakat ISIS te

(PIC16 MEMORY) PC=0X001F attemt to write unimplmented memory location 0x009c with 0x07 ignored
uyarısı verip PORTB Yİ ARALIKLI OLARAK 1 VE 0 YAPMIYOR

#include <main.h>


#byte TRISB=0x86
#byte PORTB=0x06
void main()
{


TRISB=0x00;
PORTB=0x00;


   while(TRUE)
   {
      delay_ms(200);
      PORTB=0xFF;
      delay_ms(200);
   }

}

RaMu

set_tris_b(0x00);
şeklinde yazabilirsin tris leri tanımlamana gerek yoktur.

Kodunda zaten yakıp söndürme yapmıyorsun,
başta sönük sonra yanıyor ve whle içinde kalıp duruyor, hiç söndürmeden.

   while(TRUE)
   {
      delay_ms(200);
      PORTB=0xFF;
      delay_ms(200);
      PORTB=0x00;       //ledler sönsün gibi
   }
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

pwm.c

Alıntı yapılan: ahmetbudak - 31 Ocak 2014, 00:43:16
hocam şu kodları yazıp derlediğimde derleme hatası vermiyor
fakat ISIS te

(PIC16 MEMORY) PC=0X001F attemt to write unimplmented memory location 0x009c with 0x07 ignored
uyarısı verip PORTB Yİ ARALIKLI OLARAK 1 VE 0 YAPMIYOR

kodlarını denedim herhangibi hata mesajı yok ve isisde de normal çalışıyor.
portların sönmeme sorununu RaMu zaten açıklamış. tekrarına gerek yok.

son bir tavsiye daha, register kullanmak istiyorsan ve registersiz yapamıyorsan CCS yerine XC yada MikroC yi tercih et. CCS ile devam edeceksen registerlere çok bulaşma. sadece lazım olduğunda yukarıda gösterdiğim gibi ekleyebilirsin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

frederic

Alıntı yapılan: pwm.c - 31 Ocak 2014, 00:41:35
PIC kullanan herkes MPLAB programınıda kurmuş olması gerekir.
.inc dosyaları MPASM programının olduğu yerdedir.
C:\Program Files\Microchip\MPASM Suite
MPLABX yüklü ise:
C:\Program Files\Microchip\MPLABX\mpasmx
içinde mevcut.
yada proteus programı yüklü ise:
C:\Program Files\Labcenter Electronics\Proteus 7 Professional\Tools\MPASM
içinde bulabilirsiniz.

Elinize sağlık hocam.