Yeni Başlayanlar için MikroC ile PIC PROGRAMLAMA (16F628A) Kitabı

Başlatan EmaNet, 19 Eylül 2012, 16:40:23

kemalserkan

Bugün yayınevine haber verelim.Biz gönderdik onlara ama unuttular herhalde


DieqO

hocam çok teşekkür ederim başarılı bir şekilde çalışıyo kitaptaki uygulamları yapmaya başladım her şey çok güzel gidiyo .

hikko

Başka bir konuda yardima ihtiyacin olduğunda zamanimiz elverdiği sürece elimizden geleni yapariz. Kolay gelsin.

fagus

Hocam programlayıcının baskı devresini yaptım;18F2550'yi programladım ;kartı bilgisayara taktığımda programda kart görülüyor.Ama programlamak istediğim hiçbir entegreyi tanımıyor.adres hatası veriyor.

emre94

Alıntı yapılan: hasan_can - 25 Şubat 2013, 21:36:00
Defalarca kontrol ettim. Yanlış yaptım mı diye her seferinde yeniden yaptım. Öncekilerle karşılaştırdım. Kitaptaki tarif ettiğiniz şekilde fuse ayarlarını yaptım. XP ve 7'de proteus 7.10 ve mikroC 5.8 test edilmiştir. Ancak değişen bir şey yok. Önceden belirttiğim gibi diğer PIC18F4550 kitabınızda ki LCD programları sorunsuz çalışıyor. 16F628'de olmuyor. Mümkünse 16f628 LCD kodlarını ve örneklerini 18F4550 kitabında olduğu gibi sitenizde yada burada yayınlayabilirmisiniz? Hatta bu arda MikroC ile ilgili dillerde İspanyolca bile kodları denedim, bir türlü beceremedim. 16f628'in CCS kodlarında sorun yok.
hocam merhaba kitabınızı satın aldım fakat kaynak kodlarını altaşın sitesinde bulamıyorum. Göndermeniz mümkünmü acaba yunusemreates07@gmail.com

silver_wolf

Selam Arkadaşlar;
Kitap yeni başlayanlar için iyi hazırlanmış. Almanızı tavsiye ederim.

Kitabın 98. sayfasında portd ve trisd terimleri kullanılmış fakat PIC16F628(A) ve PIC16F648(A)'da d portu yoktur. D portu yerine a portu yazılmalıdır. Yani kod aşağıdaki şekilde olunca  PIC16F628(A) ve PIC16F648(A) için olur ve derlenebilir. Fakat LCD veya LED eklenmediği için deneme kartında ve/veya Proteus(isis)'te kodun çalıştığı tam belli olmuyor. Sizden ricam aşağıdaki koda LCD eklemeniz ve asc2_kod_bul fonksiyonuna giden değer ile dönen değeri LCD yazdırmanız.

Saygılar.

char kod;     // char tipinde kod isimli global bir değişken tanımlandı.
              // Bütün fonksiyonlar tarafında kullanılabir.
void init()   // PIC'in ayar bölümün başlangıcı. init() isimli bir fonksiyon 
{             // tanımlanıyor, bu geriye herhangi bir değer döndürmeyeceği için
              // void ile başlıyor.
   portb = 0; // PORTB'nin bütün portları lojik sıfır
   trisb = 0; // PORTB bütün portları çıkış olarak set edildi
   porta = 0; // PORTA'nin bütün portları lojik sıfır
   trisa = 0; // PORTA bütün portları çıkış olarak set edildi
}  // pic'in ayar bloğunun sonu
char asc2_kod_bul(char karakter) // asc2_kod_bul isimli bir fonksiyon tanımlıyor
{  // karakter ve asc2_kod değişkenleri sadece bu fonksiyonda kullanılabilir
   unsigned char asc2_kod;

   if (karakter == ' ') asc2_kod = 0x20; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir ' ' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 20 değerini yaz
   if (karakter == '0') asc2_kod = 0x30; // Eğer fonksiyon çağırılken karakter 
                                         // parametresi eşittir '0' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 30 değerini yaz
   if (karakter == '1') asc2_kod = 0x31; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir '1' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 31 değerini yaz
   if (karakter == '2') asc2_kod = 0x32; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir '2' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 32 değerini yaz

   if (karakter == 'A') asc2_kod = 0x41; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir 'A' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 41 değerini yaz
   if (karakter == 'B') asc2_kod = 0x42; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir 'B' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 42 değerini yaz
   if (karakter == 'C') asc2_kod = 0x43; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir 'C' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 43 değerini yaz

   return asc2_kod; // asc2_kod değişkenini gönder
}
void main()  // Ana program başlangıcı
{
   init();   // init() fonksiyonu çağrılıyor
   while(1)  // Sonsuz döngü başlangıcı
   {
      kod = asc2_kod_bul('A'); // asc2_kod_bul fonsiyonu çağrılıyor
   } // sonsuz döngü sonu
} // ana program sonu
:020000004F2887
:0E0006008312031321088A00200882000800DC
:1000140083120313860183168601831285018316D6
:04002400850108004A
:10002800831203132308203A031D1C282030F100F3
:100038002308303A031D22283030F1002308313AD2
:10004800031D28283130F1002308323A031D2E28D9
:100058003230F1002308413A031D34284130F100C1
:100068002308423A031D3A284230F1002308433A54
:0E007800031D40284330F1007108F00008001D
:1000860003208A110A128000840AA00A0319A10A11
:08009600F003031D43280800DC
:10009E000A2041308312A30014207008A2005028B9
:0200AE005728D1
:02400E006A2125
:00000001FF




Selam Hocam;
PIC16F628A'da 8'den fazla iç içe fonksiyon çağırılabilir mi?

Mikro C'de değişkenler konusunu daha iyi kavramamız için soru verebilir misiniz?

MODBUS veya DMX512 ile ilgili kitabınız var mı?

Aşağıdaki kodda hata var mı?

Saygılar

char kod;     // char tipinde kod isimli global bir değişken tanımlandı.
              // Bütün fonksiyonlar tarafında kullanılabir.
unsigned short izin=0;
// LCD modül bağlantıları
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
// LCD modül bağlantıları bitti
void init()   // PIC'in ayar bölümün başlangıcı. init() isimli bir fonksiyon
{             // tanımlanıyor, bu geriye herhangi bir değer döndürmeyeceği için
              // void ile başlıyor.
   portb = 0; // PORTB'nin bütün portları lojik sıfır
   trisb = 0; // PORTB bütün portları çıkış olarak set edildi
   porta = 0; // PORTA'nin bütün portları lojik sıfır
   trisa = 0; // PORTA bütün portları çıkış olarak set edildi
   cmcon |= 7; // Bütün a portları dijital
   vrcon |= 0;
   option_reg = 0x80; // portb pull-up dirençleri aktif
}  // pic'in ayar bloğunun sonu
char asc2_kod_bul(char karakter) // asc2_kod_bul isimli bir fonksiyon tanımlıyor
{  // karakter ve asc2_kod değişkenleri sadece bu fonksiyonda kullanılabilir
   unsigned char asc2_kod;

   if (karakter == ' ') asc2_kod = 0x20; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir ' ' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 20 değerini yaz
   if (karakter == '0') asc2_kod = 0x30; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir '0' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 30 değerini yaz
   if (karakter == '1') asc2_kod = 0x31; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir '1' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 31 değerini yaz
   if (karakter == '2') asc2_kod = 0x32; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir '2' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 32 değerini yaz

   if (karakter == 'A') asc2_kod = 0x41; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir 'A' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 41 değerini yaz
   if (karakter == 'B') asc2_kod = 0x42; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir 'B' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 42 değerini yaz
   if (karakter == 'C') asc2_kod = 0x43; // Eğer fonksiyon çağırılken karakter
                                         // parametresi eşittir 'C' karakteri
                                         // ise asc2_kod değişkenine onaltılık
                                         // sayı sisteminde 43 değerini yaz
   Lcd_Out(2, 1, karakter);  // LCD display 2. satır, 1. sütuna giriş değerini
                        // gönder
   Lcd_Out(2, 3, kod);  // LCD display 2. satır, 3. sütuna çıkış değerini
                        // gönder

   return asc2_kod; // asc2_kod değişkenini gönder
}
void main()  // Ana program başlangıcı
{
   init();   // init() fonksiyonu çağrılıyor
   Lcd_Init();                 // LCD bağlantıları yapılandırıldı
   Lcd_Cmd(_LCD_CURSOR_OFF);   // LCD imleci ekrandan kaldırıldı
   Lcd_Cmd(_LCD_CLEAR);        // LCD display ekranını temizler
   while(1)  // Sonsuz döngü başlangıcı
   {

      kod = asc2_kod_bul('A'); // asc2_kod_bul fonsiyonu çağrılıyor

     if (izin=0)           // Sadece 1 defa ekrana yazdır
     {
        Lcd_Out(1, 1, 'A');    // LCD display 1. satır, 1. sütuna giriş değerini
                              // gönderi
        Lcd_Out(1, 3, kod);    // LCD display 1. satır, 3. sütuna çıkış değerini
                              // gönder
        izin=1;
     }
   } // sonsuz döngü sonu
} // ana program sonu