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):

devre_sema1.JPG

E- Kod (CCS C):

pic_3.c :

  1. // Include dosyaları
  2. #include “D:\scozturk\pic_3\pic_3.h”
  3. #include <input.c>      // Girdi çıktı fonksiyonlaru için
  4. #include <string.h>     // String ilklemleri için
  5. // Kapı Tanımlamaları
  6. #BYTE a_kapisi = 0x05
  7. #BYTE b_kapisi = 0x06
  8. #BYTE c_kapisi = 0x07
  9. #BYTE d_kapisi = 0x08
  10. #BYTE e_kapisi = 0x09
  11. // Ön ayarların yapıldığı fonksiyon
  12. void ayarlar()
  13. {
  14. setup_adc_ports(NO_ANALOGS);
  15. setup_adc(ADC_OFF);
  16. setup_psp(PSP_DISABLED);
  17. setup_spi(FALSE);
  18. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  19. setup_timer_1(T1_DISABLED);
  20. setup_timer_2(T2_DISABLED,0,1);
  21. setup_uart(9600);                   // RS232’yi 9600 Baud’a ayarla
  22. }
  23. // Ana fonksiyon
  24. void main()
  25. {
  26. int veri;                           // Veri değişkeni
  27. ayarlar();                          // PIC’i ayarla
  28. set_tris_b(0x00);                      // B kapısını çıkış olarak ayarla
  29. b_kapisi = 0x00;                    // B kapısını sıfırla
  30. veri = 0;                           // Değişkene ilk değeri ver
  31. delay_ms(3000);                     // 3 sn gecikme
  32. printf(“Merhaba ben RS232”);        // Giriş mesajını gönder
  33. delay_ms(1000);                     // 1 sn gecikme
  34. printf(“1-2-3 komut yollayin!:”);   // Komut mesajını yaz
  35. for (;1;)   // Sonsuz döngü
  36. {
  37. veri = getc();                   // Seri kapıdan gelen veriyi al
  38. if(veri == ‘1’)                  // Veri 1 karakteri mi?
  39. {
  40. putc(veri);                   // Evet. Veriyi geri gönder.
  41. }
  42. else if(veri == ‘2’)             // Veri 2 karakteri mi?
  43. {
  44. printf(“Merhaba!”);           // Evet. O zaman Merhaba mesajını gönder.
  45. }
  46. else if(veri == ‘3’)             // Veri. 3 karakteri mi?
  47. {
  48. veri = veri * 2;              // Evet. Veriyi 2 ile çarp.
  49. putc(veri);                   // Veriyi seri kapıdan yolla.
  50. }
  51. else                             // Başka bir veri mi?
  52. {
  53. printf(“ALGILANAMADI”);       // Verinin algılanamadığını söyle
  54. }
  55. }
  56. }

pic_3.h :

  1. #include <16F877.h>
  2. #device *=16
  3. #device adc=8
  4. #FUSES NOWDT                     //No Watch Dog Timer
  5. #FUSES HS                        //High speed Osc (> 4mhz)
  6. #FUSES NOPUT                     //No Power Up Timer
  7. #FUSES NOPROTECT                 //Code not protected from reading
  8. #FUSES NOBROWNOUT                //No brownout reset
  9. #FUSES NOLVP                     //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10. #FUSES NOCPD                     //No EE protection
  11. #FUSES NOWRT                     //Program memory not write protected
  12. #FUSES NODEBUG                   //No Debug mode for ICD
  13. #use delay(clock=20000000)
  14. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

F- Devrenin Resmi:

devre_resim1.JPG