A- Gerekli Malzemeler:
1 – Bilgisayar
2 – 2 adet RS232 kapısı bulunan bilgisayar yada USB-Seri dönüştürücü
B- Açıklamalar:
Bu uygulamada ISIS ortamında RS232 simülasyonu yapacağız. Bunun için ISIS’in COMPIM nesnesini kullanarak bilgisayarın seri kapısından veriler göndereceğiz ve bu verileri bir program aracılığıyla okuyacağız. Aynı şekilde bilgisayardaki programdan bir veri gönderildiğinde de devremiz bu veriyi alabilecek.
Bunu yapabilmek için bilgisayarın 2 seri kapısını kullanacağız. Eğer bilgisayarınızda seri kapı yoksa veya bir tane varsa (ki bende 1 tane var) USB-Seri çevirici kullanarak USB kapısını seri kapı gibi kullanabilirsiniz.
C- Uygulama:
PIC’e seri kapıdan “1″ karakteri gelirse PIC bu karakteri geri yollayacak, “2″ karakteri gelirse “Merhaba” mesajını yollayacak ve “3″ karakteri gelirse “3″ karakterini iki ile çarpıp geri yollayacak. Diğer veriler için ise verinin algılanamadığına dair bir mesaj gönderecek.
D- Devre Şeması (ISIS):
E- Kod (CCS C):
pic_3.c :
- // Include dosyaları
- #include “D:\scozturk\pic_3\pic_3.h”
- #include <input.c> // Girdi çıktı fonksiyonlaru için
- #include <string.h> // String ilklemleri için
- // Kapı Tanımlamaları
- #BYTE a_kapisi = 0x05
- #BYTE b_kapisi = 0x06
- #BYTE c_kapisi = 0x07
- #BYTE d_kapisi = 0x08
- #BYTE e_kapisi = 0x09
- // Ön ayarların yapıldığı fonksiyon
- void ayarlar()
- {
- setup_adc_ports(NO_ANALOGS);
- setup_adc(ADC_OFF);
- setup_psp(PSP_DISABLED);
- setup_spi(FALSE);
- setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
- setup_timer_1(T1_DISABLED);
- setup_timer_2(T2_DISABLED,0,1);
- setup_uart(9600); // RS232’yi 9600 Baud’a ayarla
- }
- // Ana fonksiyon
- void main()
- {
- int veri; // Veri değişkeni
- ayarlar(); // PIC’i ayarla
- set_tris_b(0x00); // B kapısını çıkış olarak ayarla
- b_kapisi = 0x00; // B kapısını sıfırla
- veri = 0; // Değişkene ilk değeri ver
- delay_ms(3000); // 3 sn gecikme
- printf(“Merhaba ben RS232”); // Giriş mesajını gönder
- delay_ms(1000); // 1 sn gecikme
- printf(“1-2-3 komut yollayin!:”); // Komut mesajını yaz
- for (;1;) // Sonsuz döngü
- {
- veri = getc(); // Seri kapıdan gelen veriyi al
- if(veri == ‘1’) // Veri 1 karakteri mi?
- {
- putc(veri); // Evet. Veriyi geri gönder.
- }
- else if(veri == ‘2’) // Veri 2 karakteri mi?
- {
- printf(“Merhaba!”); // Evet. O zaman Merhaba mesajını gönder.
- }
- else if(veri == ‘3’) // Veri. 3 karakteri mi?
- {
- veri = veri * 2; // Evet. Veriyi 2 ile çarp.
- putc(veri); // Veriyi seri kapıdan yolla.
- }
- else // Başka bir veri mi?
- {
- printf(“ALGILANAMADI”); // Verinin algılanamadığını söyle
- }
- }
- }
pic_3.h :
- #include <16F877.h>
- #device *=16
- #device adc=8
- #FUSES NOWDT //No Watch Dog Timer
- #FUSES HS //High speed Osc (> 4mhz)
- #FUSES NOPUT //No Power Up Timer
- #FUSES NOPROTECT //Code not protected from reading
- #FUSES NOBROWNOUT //No brownout reset
- #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
- #FUSES NOCPD //No EE protection
- #FUSES NOWRT //Program memory not write protected
- #FUSES NODEBUG //No Debug mode for ICD
- #use delay(clock=20000000)
- #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
F- Devrenin Resmi: