Klavyeah
Üye
- Katılım
- 28 Ağu 2006
- Mesajlar
- 269
- Puanları
- 1
- Yaş
- 39
Seri Portun PIC Mikro denetleyicilerle Pratik Kullanımı
Hatırlayacağınız gibi daha önceki makalede assambly dilini kullanarak PIC’i programlamıştık. Bu yazımda ise hem anlaması hem de üzerinde değişiklik yapması oldukça kolay olan C diliyle PIC programlayacağız. C bilmeyenler için yeri geldikçe bahsedeceğiz değişiklikleri yaparak programı kendi amaçlarına göre değiştirebilirler.
Bilgisayar yazılımı olarak Visual Basic veya başka bir programlama dili bilenler kendi programlarını yazabilirler. Bilgisayar programcılığı ile arası pek iyi olmayanlar Hyperterminal’i (Start>Programs>Accessories>Communications>Hyperterminal) kullanabilirler. Eğer belirttiğim yolda Hyperterminal’e ulaşamıyorsanız Program Ekle/Kaldır’dan Hyperterminal’i yüklemeniz gerekiyor.
Kullandığım C derleyicisi CCS PIC C adıyla download edilebilir. Bu derleyici ile ilgili sorunlarınızı bize bildirirseniz yardımcı olamaya çalışırız.
Seri portla haberleşmede kullanılacak PIC için C kodu aşağıda verilmiştir. Program 16F84 için yazılmış olmasına rağmen;
#include <16F84.h> satırını değiştirerek istediğiniz bir PIC mikro denetleyiciyi kullanabilirsiniz.
#use delay(clock=4000000), satırı ile kullandığınız kristal osilatörün hızını, #use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2) satırı ile de seri haberleşmede kullanacağınız bacakları belirtiyorsunuz.
Hyperterminal’in iletişim hızı 9600 baud olarak ayarlanmış olmalıdır. iç USART’ı olan PIC’ler için RX ve TX bacaklarını kullanmanız daha verimli olacaktır (örneğin PIC 16F877 için RC7 RX ve RC6 TX bacakları kullanılmalıdır).
#byte port_b = 6 satırı PORTB’nin Register’lar (Register Map) arasındaki yerini gösterir. PORTA için bu satır #byte port_a = 5 şeklinde değiştirilmelidir. port_A veya port_B isimleri keyfidir siz bu isimleri programda da değiştirmek şartıyla istediğiniz gibi değiştirebilirsiniz. set_tris_b( 0x00 ); satırı PORTB’nin çıkış olacağını belirtiyor.
Bir portu giriş yapmak için bu satır set_tris_b( 0xFF ); şeklinde değiştirilmelidir.
While (TRUE) satırı sonsuz bir döngü yaratmak için kullanılmıştır.
Programda önce data adında bir değişken tanımlanıyor ve Hyperterminalden okunan tuş bu değişkene atanıyor. Daha sonra boş değişken PORTB’ye gönderiliyor. data değişkenini kullanmayıp port_b = getch(); satırı ile de aynı iş yapılmış olur. delay_ms(1000); satırı 1000 mili saniye yani 1 saniyelik gecikme sağlamak için kullanılmıştır.
Böylece basılan tuşun ascii değeri en az 1 saniye PORTB’deki LED’lerde görülür.
Herhangi bir tuşun ASCII karşılığını öğrenmek için aşağıda verdiğimiz tabloyu kullanabilirsiniz.
PIC mikro denetleyicinin bacaklarını seri portun Rx ve Tx girişlerine doğrudan girmek yerine arada MAX232 entegresini kullanmak verilerin hatasız iletimi açısından gereklidir. MAX232 entegresi -12, +12 V seviyesindeki seri port sinyallerini TTL (+5, 0 V) seviyesine veya TTL seviyesini -12 V, +12 V sinyallerine çevirir. Resimde PA1 ve PA2 PIC16F84’ün PORTA 1 ve 2 bacaklarıdır.
PC seiportu ile PIC’in MAX232 ile birbirine bağlanması
Bilgisayardan PIC’e Seri Portla Bilgi Göndermek
Bilgisayardan PIC’e Seri Portla Bilgi Göndermek için gerekli devre
//klavyeden girilen tuş değeri portb ye bağlı ledlerde görülür
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)
#byte port_b = 6 //portb nin ramdeki yeri
main() {
int data;
set_tris_b( 0x00 ); //portb çıkış
printf("calisiyor…\n\r");
while (TRUE)
{
data = getch();
port_b = data; //gönderilen sayıyı portb de göster
delay_ms(1000);
}//sürekli tekrarla
}
PIC’ten Bilgisayara Seri Port ile Bilgi Göndermek
şimdi de PIC’ ten bilgisayara seri port ile bilgi gönderelim. Bunun için gereken devre şeması ve C kodları aşağıda verilmiştir. Sekizli anahtarlarla istenen değer girilir. Pullup dirençleri PIC’in bacaklarının boşta kalıp hatalı değerler okumasını önlemek içindir. RESPAK 8 Sekiz adet direnç içeren pakettir.
Gönderilen bilginin ASCII değeri Hyperterminal de görülecektir. Gerektiğinde yazının sonunda verilen ASCII tablosundan yararlanabilirsiniz.
PIC’ten Bilgisayara Seri Port ile Bilgi Göndermek için gerekli devre
// portb deki data bilgisayara gönderilir
#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)
#byte port_b = 6 //portb nin ramdeki yeri
main() {
int data;
set_tris_b( 0x00 ); //portb çıkış
printf("calisiyor...\n\r");
while (TRUE)
{
data = port_b; //bilgisayara gönderilecek data portb'de
printf("%d", data);
delay_ms(1000);
}//sürekli tekrarla
}
ASCII TABLOSU
http://www.indiririz.com/klavyeah/Seri_Portun_PIC_Mikro_denetleyicilerle.zip
Hatırlayacağınız gibi daha önceki makalede assambly dilini kullanarak PIC’i programlamıştık. Bu yazımda ise hem anlaması hem de üzerinde değişiklik yapması oldukça kolay olan C diliyle PIC programlayacağız. C bilmeyenler için yeri geldikçe bahsedeceğiz değişiklikleri yaparak programı kendi amaçlarına göre değiştirebilirler.
Bilgisayar yazılımı olarak Visual Basic veya başka bir programlama dili bilenler kendi programlarını yazabilirler. Bilgisayar programcılığı ile arası pek iyi olmayanlar Hyperterminal’i (Start>Programs>Accessories>Communications>Hyperterminal) kullanabilirler. Eğer belirttiğim yolda Hyperterminal’e ulaşamıyorsanız Program Ekle/Kaldır’dan Hyperterminal’i yüklemeniz gerekiyor.
Kullandığım C derleyicisi CCS PIC C adıyla download edilebilir. Bu derleyici ile ilgili sorunlarınızı bize bildirirseniz yardımcı olamaya çalışırız.
Seri portla haberleşmede kullanılacak PIC için C kodu aşağıda verilmiştir. Program 16F84 için yazılmış olmasına rağmen;
#include <16F84.h> satırını değiştirerek istediğiniz bir PIC mikro denetleyiciyi kullanabilirsiniz.
#use delay(clock=4000000), satırı ile kullandığınız kristal osilatörün hızını, #use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2) satırı ile de seri haberleşmede kullanacağınız bacakları belirtiyorsunuz.
Hyperterminal’in iletişim hızı 9600 baud olarak ayarlanmış olmalıdır. iç USART’ı olan PIC’ler için RX ve TX bacaklarını kullanmanız daha verimli olacaktır (örneğin PIC 16F877 için RC7 RX ve RC6 TX bacakları kullanılmalıdır).
#byte port_b = 6 satırı PORTB’nin Register’lar (Register Map) arasındaki yerini gösterir. PORTA için bu satır #byte port_a = 5 şeklinde değiştirilmelidir. port_A veya port_B isimleri keyfidir siz bu isimleri programda da değiştirmek şartıyla istediğiniz gibi değiştirebilirsiniz. set_tris_b( 0x00 ); satırı PORTB’nin çıkış olacağını belirtiyor.
Bir portu giriş yapmak için bu satır set_tris_b( 0xFF ); şeklinde değiştirilmelidir.
While (TRUE) satırı sonsuz bir döngü yaratmak için kullanılmıştır.
Programda önce data adında bir değişken tanımlanıyor ve Hyperterminalden okunan tuş bu değişkene atanıyor. Daha sonra boş değişken PORTB’ye gönderiliyor. data değişkenini kullanmayıp port_b = getch(); satırı ile de aynı iş yapılmış olur. delay_ms(1000); satırı 1000 mili saniye yani 1 saniyelik gecikme sağlamak için kullanılmıştır.
Böylece basılan tuşun ascii değeri en az 1 saniye PORTB’deki LED’lerde görülür.
Herhangi bir tuşun ASCII karşılığını öğrenmek için aşağıda verdiğimiz tabloyu kullanabilirsiniz.
PIC mikro denetleyicinin bacaklarını seri portun Rx ve Tx girişlerine doğrudan girmek yerine arada MAX232 entegresini kullanmak verilerin hatasız iletimi açısından gereklidir. MAX232 entegresi -12, +12 V seviyesindeki seri port sinyallerini TTL (+5, 0 V) seviyesine veya TTL seviyesini -12 V, +12 V sinyallerine çevirir. Resimde PA1 ve PA2 PIC16F84’ün PORTA 1 ve 2 bacaklarıdır.
PC seiportu ile PIC’in MAX232 ile birbirine bağlanması
Bilgisayardan PIC’e Seri Portla Bilgi Göndermek
Bilgisayardan PIC’e Seri Portla Bilgi Göndermek için gerekli devre
//klavyeden girilen tuş değeri portb ye bağlı ledlerde görülür
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)
#byte port_b = 6 //portb nin ramdeki yeri
main() {
int data;
set_tris_b( 0x00 ); //portb çıkış
printf("calisiyor…\n\r");
while (TRUE)
{
data = getch();
port_b = data; //gönderilen sayıyı portb de göster
delay_ms(1000);
}//sürekli tekrarla
}
PIC’ten Bilgisayara Seri Port ile Bilgi Göndermek
şimdi de PIC’ ten bilgisayara seri port ile bilgi gönderelim. Bunun için gereken devre şeması ve C kodları aşağıda verilmiştir. Sekizli anahtarlarla istenen değer girilir. Pullup dirençleri PIC’in bacaklarının boşta kalıp hatalı değerler okumasını önlemek içindir. RESPAK 8 Sekiz adet direnç içeren pakettir.
Gönderilen bilginin ASCII değeri Hyperterminal de görülecektir. Gerektiğinde yazının sonunda verilen ASCII tablosundan yararlanabilirsiniz.
PIC’ten Bilgisayara Seri Port ile Bilgi Göndermek için gerekli devre
// portb deki data bilgisayara gönderilir
#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)
#byte port_b = 6 //portb nin ramdeki yeri
main() {
int data;
set_tris_b( 0x00 ); //portb çıkış
printf("calisiyor...\n\r");
while (TRUE)
{
data = port_b; //bilgisayara gönderilecek data portb'de
printf("%d", data);
delay_ms(1000);
}//sürekli tekrarla
}
ASCII TABLOSU
http://www.indiririz.com/klavyeah/Seri_Portun_PIC_Mikro_denetleyicilerle.zip
Moderatör tarafında düzenlendi: