Seri Portun PIC Mikro denetleyicilerle Pratik Kullanımı Hazırlayanlar: Ali KILIÇ , Galip KILIÇ 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. İç 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
#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
PIC16F84 İle seri portun pratik kullanımı
Hazırlayanlar: Galip kılıç
Bu yazımda seri portun pratik kullanımı üzerinde duracağım. Bu iş içinr bir PC, bir PIC 16F84 entegresine, bir DB9 konnektörüne, birkaç LED’e ve dirence ihtiyacımız olacak. Bir de porta bilgi göndermek için küçük bir yazılıma ihtiyacımız olacak.
PC’nizin arkasında bilgisayarın dünyayla haberleşmesini sağlayan çeşitli portlar vardır. Örneğin benim bilgisayarımın arkasında bir adet LTP (printer portu), iki adet RS232 DB9 (9 pinli) seri port (communication portu olarak da bilinir), iki USB portu (Universal Serial Bus) yüksek hızlı seri iletim için ve PS/2 bağlantı portları, mause ve klavye için bulunur. Bu portlar birçok yeni bilgisayar için standarttır.
Aşağıda RS232 için DB9 konnektörü görülüyor. 9 pinden RXD (Receive Data) ve TXD (Transmit Data) ve tabii ki GND (Ground) yani ikinci, üçüncü ve beşinci pinler bizi ilgilendiriyor. Bu pinler Türkçe’ye sırasıyla alıcı, verici ve toprak olarak çevrilebilir. Diğer pinler modem veya benzeri uygulamalar için kullanılır. Bizim uygulamamızda bir DB9 konnektörün ikinci, üçüncü ve beşinci pinlere kablo bağlantısı yapacağız. Diğer uçlar bağlantısız olabilir.
1. CD (Carrier Detect)
2. RXD (Receive Data)
3. TXD (Transmit Data)
4. DTR (Data terminal Ready)
5. GND (Ground)
6. DSR (Data Set Ready)
7. RTS (Request To Send)
8. CTS (Clear To Send)
9. RI (Ring Indicator)
Bilgi alışverişi yapacağımız entegre Microchip (www.microchip.com ) firması tarafından üretilen 16F84 entegresidir. PIC (Programmable Interface Controller) bircok defa progamlanabilen bir mikrodenetleyicidir. Bilindiği gibi mikrodenetleyici içerisinde CPU (işlenci), RAM (Rastgele erişimli bellek) ve giriş/çıkış birimleri olan bir entegredir. Yani bir nevi bir bilgisayardır. PIC16F84 (ayrıntılar için appendix’e bakınız) PIC öğrenmeye başlamak için en uygun entegredir. Bu entegreyi programlayabilmek için kendine has olan assambly dilini kullanmak gerekir. Yazılan kodları internetten ücretsiz indirebileceğiniz MPASM derleyicisi ile derleyebilirsiniz. Kodları yazmak için NOTPED kullanabileceğiniz gibi aynı zamanda simulatör içeren MPLAB editörünü de kullanabilirsiniz. Temel komut sayısı 34 tanedir. Eger assembly dili size zor geliyorsa aynı işi Pascal,C,BASIC gibi gelişmiş dilleri kullanarak da yapabilirsiniz. Bu dillerin PIC için özel geliştirilmiş derleyicileri vardır. Bu derleyicilerin demo versiyonları internetten bulunabilir.
PIC16F84 entegresi ile ilgili genel bilgiler aşağıda verilmiştir. Ayrıca bacaklarla ilgili ayrıntılı bilgiyi aşağıda bulabilirsiniz.
Yukarıdaki dökümandan da anlaşılacağı gibi 14. bacağa +5 Voltluk gerilim uygulanır, 5. bacak ise toprağa bağlanır. 16F84 ün 5 adet A, 8 adet B bacağı giriş veya çıkış olarak kullanılabilir. Yani toplam 13 giriş veya çıkışımız vardır. –MCLR girişi PIC’i resetlemek için kullanılır. PIC için gerekli saat darbeleri ise 15. ve 16. bacaklara bağlana osilatör ile sağlanır. Farklı osilatör çeşitleri olmasına rağmen kristal tipi (XT) osilatörler hem zamanlama açısından güvenilirdir hem de kullanımı pratiktir. Benim bu uygulamada kullandığım XT osilatör 4 MHz’lik bir osilatördür.
Yazılan kodu MPASM ile hexadecimal koda dönüştürdükten sonra PIC programlayıcı ile (Ben PIC Prog kullandım.) PIC programlanır. PIC programlayıcı çeşitli devreler
Bu yazımızın asıl amacı seri port ile haberleşmek olduğundan PIC hakkında genel bilgiler verdim. Daha ayrıntılı bilgi için bana e-posta gönderebilirsiniz.
Şimdi 16F84 ile yapacağımız devrelerimize bakalım. Birinci devre bilgisayardan alınan bilgiyi B portuna bağlı 8 LED’de gösterecektir. İkinci devrede ise B portuna girilen 8 bitlik bilgi bilgisayara girilecektir. Aşağıda sırasıyla 8 bitlik bilginin PIC’e gönderilmesi ve daha sonra 8 bitlik bilginin PIC yardımıyla bilgisayara alınması anlatılacaktır.
Bilgisayar ile PIC haberleşmesinde arayüzü Visual Basic ile yaptım. Arayüzün görünümü aşağıda (Şekil 3) görülmektedir. testver butonu text penceresine yazılan sayıyı veya karekteri PIC’e göndermek için kullanılacaktır. testalal butonu PIC’ten alınan 8 bitlik bilgiyi text penceresine yazdıracaktır. exit butonu ise programdan çıkmamızı sağlayacaktır.
Arayüzde görünmeyen ve comm port ile ilgili işlemler yapmamızı sağlayan Mscomm kontrolörü çalışma alnında görülür. Bu kontrolörü yüklemek için sırasıyla projects > componenets > microsoft comm control seçilir. Bu işlem yapıldıktan sonra vb çalışma alanının görünümü aşağıda görüldüğü gibidir. (Şekil 4)
Program ile ilgili kodlar sırasıyla şöyledir (Şekil 5). testver butonu için :
Private Sub ver_Click() MSComm1.Settings = "9600,N,8,1" 'rs232 ile ilgili ayarlar MSComm1.PortOpen = True 'port açiliyor MSComm1.Output = Text1.Text 'text penceresine yazilan deger pic'e gonderiliyor MSComm1.PortOpen = False 'port kapatiliyor End Sub
Yorumlardan da anlaşılacağı gibi önce comm port ile ilgili ayarlar yapılmaktadır. Bu ayarlar bilginin 9600 baud (bit per second), parity bitsiz (no parity), 8 bitlik data ve bir stop biti ile gönderildiğini veya alındığını gösteriyor. MSComm1.PortOpen=True deyimi portun açıldığını MSComm1.Output porta bilgi gönderildiğini (Gönderilen bilgi text1’e yazılan sayı veya karekterdir) ve MSComm1.PortOpen=False portun kapandığını belirtiyor.
Buton testal için yazılan kodkar şunlardır.
Private Sub al_Click() MSComm1.Settings = "9600,N,8,1" 'rs232 ile ilgili ayarlar MSComm1.PortOpen = True 'port açiliyor deger = Asc(MSComm1.Input) 'pic'ten okunan 8 bitin ascii karsiligi aliniyor Text1.Text = deger 'okunan bilgi text penceresinde görünüyor MSComm1.PortOpen = False 'port kapatiliyor End Sub
Yukardaki kaynak kodunda testver butonunda kullanılan kodlara benzer kodlar vardır. Dışardan gelen bilgiyi almak için MSComm1.Input deyimi kullanılmıştır. Asc fonksiyonu alınan karekterin ascii değerini almak için kullanılmıştır. Ascii tablosunu herhangi bir programlama kitabının arkasında bulabilirsiniz. deger değişkenin dim deger as integer olarak tanımlanması daha uygun olabilir. Portun MSComm1.PortOpen = False satırı ile kapatılması programın “port zaten açık” hatası vermemesi açısından önemlidir.
exit butonu programdan çıkılmasını sağlamaktadır.
Şimdi sıra kullanacağımız devrede. Şekil 6’da kurulacak devre görülüyor. Devrede kullanılan PIC’e daha önce programlama devresi ve programlama yazılımıyla seri porttan gelecek bilgiyi alması için programlanması gerekmektedir
İlgili asm kodu aşağıda verilmiştir. Bu kodu bir NOTPED’e asm uzantılı kaydedebilir ve daha sonra MPASM derleyicisi ile hex uzantılı koda dönüştürebilirsiniz.
PIC’e bilgi göndermek için kullanılacak asm kodu şöyledir:
list p=16f84 ;************************************************************** ;* ;* ---------------------------------- ;* PORTA: ;* 0 ;* 1 ;* 2 ;* 3 seri Input txd pin3 of rs232 ;* 4 ;* PORTB: ;* 0 LED ;* 1 LED ;* 2 LED ;* 3 LED ;* 4 LED ;* 5 LED ;* 6 LED ;* 7 LED ;* ; Include date for 16F84 #includecycl_1 Equ 0x20 ; sayıcı cycl_2 Equ 0x21 ; sayıcı rs232in Equ 0x22 ;temp variable to pass its value to portb Byte Equ 0x23 ;variable used to locate 8 bit Temp Equ 0x24 ;temp variable for pause time in Equ 3 ;RA3 is input ;************************************************************** ; Port B is set as output ;porta and portb is clearified Init bsf STATUS, RP0 ; bank1 git movlw B'00000000' ; portb çıkış movwf TRISB bcf STATUS, RP0 ; bank0 git clrf PORTA ; portA temizle clrf PORTB ; portB temizle ;main program starts here Loop call ser_RX ; ser_RX dallan movfw rs232in movwf PORTB ; w içeriğini portB ‘e göster goto Loop ;********************************************************** ;receive one Byte to 'byte', 'rs232in' and w respectively ser_RX clrf Byte ; byte temizle movlw 8 movwf cycl_1 ; 8 times for 8 bits btfss PORTA, in ; wait until Startbit goto ser_RX ; if no startbit goto ser_RX call Pause ; pause for 1/2 Bit (48 usec) btfss PORTA, in ; test porta again goto ser_RX RX_2 call Wait ; wait 1 Bit (94 usec) btfsc PORTA, in ; bcf STATUS, C ; high -> 0 btfss PORTA, in ; bsf STATUS, C ; low -> 1 ; rrf Byte, f ; pass carry flag to Byte reg. decfsz cycl_1, f ; 8 bits goto RX_2 ; call Wait ; wait 1 Bit (94 usec) btfsc PORTA, in ; Stop-Bit 1 goto ser_RX ; if no StopBit 1 call Wait btfsc PORTA, in ; Stop-Bit 2 goto ser_RX ; if no StopBit 2 movf Byte, w movwf rs232in ; Byte pass through rs232in return ;********************************************************** ;one bit waiting time ; ; receive 4 MHz 10 MHz ; 2400 Bps = 69d 173d ; 4800 Bps = 34d 86d ; 9600 Bps = 15d 43d Wait movlw D'15' ; 9600 / 4 MHz receive movwf cycl_2 ; Wait1 nop nop nop ; decfsz cycl_2, 1 goto Wait1 return ;********************************************************** ;1/2 bit waiting time ; 4 MHz 10 MHz ; 2400 Bps = 416T = 63d 157d ; 4800 Bps = 31d 78d ; 9600 Bps = 15d 39d ; Pause movlw D'15' ; 9600 / 4 MHz movwf Temp ; Pause2 decfsz Temp, f ; Pause for 1/2 Bit goto Pause2 ; return ; ;********************************************************** end
PIC programlandıktan sonra Visual Basic ile hazırladığımız programımızda text penceresine bir sayı yazıp testver butonuna tıklandığında yazılan sayı 8 LED’de görülecektir.
PIC’ten bilgisayara bilgi almak için Şekil 7 deki devre kullanılabilir.
1 kiloohmluk dirençlere lojik 0 veya lojik 1 verildiğinde ve Visual Basic programımızda testal butonuna tıklandığında dirençlere uygulanan 8 bitlik bilgi ile ilgili bir sayı text penceresinde görünür. PIC’e yüklememiz gereken hex kodu aşağıda verilen asm kodun derlenmesiyle elde edilir.
PIC’ten bilgi almak için kullanılacak asm kodu şöyledir:
list p=16f84 ;************************************************************** ;* ;* ;* ---------------------------------- ;* PORTA: 0 ;* 1 ;* 2 seriel input ;* 3 ;* 4 ;* PORTB: 0 resistor ;* 1 resistor ;* 2 resistor ;* 3 resistor ;* 4 resistor ;* 5 resistor ;* 6 resistor ;* 7 resistor ;* ;************************************************************** ; Include data for 16F84 processor #include;Variab defined Temp Equ 0x20 cycl_1 Equ 0x21 ; counter cycl_2 Equ 0x22 ; counter Byte equ 0x23 out EQU 2 ;RS-232 is output from RA2 ;************************************************************** ; ; Pin RA2 is output pin Init bsf STATUS, RP0 ; goto bank1 movlw B'00111011' ; RA2 output movwf TRISA ; bcf STATUS, RP0 ; return to bank0 clrf PORTA ; ;this asm firstly send "a" to computer i changed it to send data ;applied to portb (alisur) Loop movf PORTB,w ;pass portb to w reg. call Send_RS ; Data sent via RS-232 goto Loop ;*************************************************************** ;send Bytes, in Register W Send_RS ; give one Byte serielly movwf Byte ; Byte in w movlw 8 ; it will send 8 bit movwf cycl_1 bcf PORTA, out call Wait_s ; 1 Stopbit (1) bsf PORTA, out call Wait_s ; 1 Startbit (0) Send_1 rrf Byte, f ; bit will be send pass thruogh carry flag btfsc STATUS, C bcf PORTA, out ; Low when Bit = 1 btfss STATUS, C bsf PORTA, out ; High when Bit = 0 call Wait_s ; 1 Bit duration wait decfsz cycl_1, f ; is it 8 bit? goto Send_1 ; no bcf PORTA, out ; Byte ended, 2 Stopbit (1) send call Wait_s ; call Wait_s ; (Mod.1) return ;********************************************************** ;wait duration of one bit ; ; send 4 MHz 10 MHz ; 2400 Bps = 69d 173d ; 9600 Bps = 15d 43d Wait_s movlw D'15' ; 9600 / 4 MHz send movwf cycl_2 ; Wait1 nop nop nop decfsz cycl_2, 1 goto Wait1 return end
PIC16F877 İle data bus (verİ yolu) uygulaması
Hazırlayan: Galip KILIÇ
Bilgisayar veya ana makine (ana makine mikro denetleyici içeren bir kart olabilir) ile diğer uydu makinelerin haberleşmesi çeşitli yollarla gerçekleştirilebilir. Bu makineler bir fabrikadaki seri üretim makineleri olabileceği gibi bir evdeki televizyon, müzik seti, klima, fırın, ışıklar, kombi gibi ev aletleri olabilir. PIC16F877 mikro denetleyici içeren bir kontrol kartı ile uydu makinelerden bilgiler toplanabilir veya onlara komutlar gönderilerek iş yaptırılabilir. Ana makine veya bilgisayar (PC) ile uydu makineler arasındaki iletişim için çeşitli protokoller kullanılabilir.
Bu protokollerden en uygunu RS232’dir. RS232 hakkında ayrıntılı bilgi için Seri Portun PIC mikro denetleyicilerle pratik kullanımı (ETMD Bizden Haberler Şubat 2004 Sayı 15), Paralel Portun Kullanımı, Seri Portun PIC mikro denetleyicilerle pratik kullanımı (http://www.etmd.org.tr/yazilar.asp ). Uydu makineler ile ana makine veya bilgisayarın birbirine bağlanmasında data bus (veri yolu) denilen bağlantılar kullanılır (Şekil 1). PIC kartları ile bilgisayar arasındaki bağlantı Şekil 2’de gösterilmiştir.
Bu yazının amacı yukarıdaki şekilde görüldüğü gibi iki iletken ile bir çok mikroişlemciyi birbirine bir BUS üzerinden birbirine bağlayarak seri port üzerinden bilgisayar veya ana makine ile haberleştirmektir.
Seri port üzerinden PIC ile haberleşme bu konularla uğraşan meraklılar için önemli konulardan biridir. Bu konuya bir ışık tutmak ve amatör olarak bu işi uğraş edinen insanlara yardımcı olmak için bu küçük uygulamayı denemelerden sonra yayınlamaya karar verdim. Devre denenmiş ve çalışması kontrol edilmiştir.
Bu uygulamada bir yada birden çok PIC’in iki kablo ile bilgisayar ile haberleşmesini sağlayacağız. RS232 protokolü ile haberleşme yapıldığı, için arka arkaya bağlanacak PIC sayısı kullanılacak bağlantı iletkeninin uzunluğunu 12 metre ile sınırlandırmaktadır. Eğer bu mesafenin daha uzun olması istenirse RS485 protokolü ile ( yaklaşık 800-1000 mt.) PIC’ler arasında daha iyi bir Data Bus (Veri Yolu) sistemi kurulabilir.
Aşağıdaki assambly kodlar Data Bus (Veri Yolu) sisteminin birinci PIC’in kodlarıdır.
Özetle çalışma sistemi şöyledir: Kodlar PIC16f877’ye doğru yüklenip devre doğru kurulduğunda bilgisayarın klavyesinde “1” tuşuna basıldığında uydu makinedeki PIC mikro denetleyici
DT "<** Su anda klavyede 1 tusuna bastiniz **>" Satırında yazılı olan bilgiyi Hyper teminale gönderecektir. Hyper terminalde aşağıdaki yazı görünecektir. <** Su anda klavyede 1 tusuna bastiniz **> “1” değerini PIC aşağıdaki satır ile anlamakta, gönderilen değeri bu satır ile karşılaştırdıktan sonra gelen değerin kendisine gönderdiğini anlayıp DT satırındaki değeri hyper terminalle göndermektedir. SUBLW D'49' ;klavyeden gönderilen 1’in ascii karşılığı 49’dur. BUS sistemine 2. işlemcisine aşağıdaki kodlarda şu değişiklikler yapılarak 2. işlemci programlanır. SUBLW D'49' satırındaki 49 yerine “2” nin ascii değeri olan 50 yazılmalı yani bu satır SUBLW D’50’ ile değiştirilmelidir. DT "<** Su anda klavyede 1 tusuna bastiniz **>" Satırı yerine 2. PIC’in göndereceği satır ise DT "<** Su anda klavyede 2 tusuna bastiniz **>" Şeklinde değiştirilmelidir. Diğer BUS sistemindeki PIC16f877’ler içinde buna uygun değişiklikler yapılarak istenildiği kadar işlemci BUS sistemine bağlanabilir. Diyelim ki 3 16F877 bağladınız durumda: Klavyeden “1” tuşuna bastığınızda hyper terminale DT "<** Su anda klavyede 1 tusuna bastiniz**>" bilgisi Klavyeden “2” tuşuna bastığınızda hyper terminale DT "<** Su anda klavyede 2 tusuna bastiniz**>" bilgisi Klavyeden “3” tuşuna bastığınızda hyper terminale DT "<** Su anda klavyede 3 tusuna bastiniz**>" bilgisi gönderilecektir. Not: 1 ascii değeri 49 2 ascii değeri 50 3 ascii değeri 51
Progam
;Windows hyper Terminali 19200 bps, N,8,1 ile bilgi gönderme bu göndermede el sıkışması YOK olarak ; Program adı : Seri port üzerinden birden çok PIC ile haberleşme. LIST P=16F877,C=140 ERRORLEVEL 1,-(305) #INCLUDE "P16F877.INC" __CONFIG _PWRTE_ON&_XT_OSC&_LVP_OFF&_WDT_OFF TEMP EQU 7FH SAYAC1 EQU 8FH ORG 0 ;program başlangıç satırı GOTO MSTART MSTART BCF STATUS,RP1 BCF STATUS,RP0 ;BANK0 geç. MOVLW 0X00 MOVWF PORTA MOVWF PORTB MOVWF PORTC MOVWF PORTD MOVWF PORTE BCF STATUS,RP1 BSF STATUS,RP0 ;BANK1 bank geç. CLRF TRISA CLRF TRISD CLRF TRISE MOVLW 0XFF MOVWF TRISB MOVLW 0XFF MOVWF TRISC ; Baud Values with BRGH = 0 ; ((20000000/9600)/64)-1 = 32 ; movlw d'6' ; 9600 baud @ 4 Mhz Fosc brgh=0 ; movlw d'25' ; 9600 baud @ 4 Mhz Fosc brgh=1 ; movlw d'207' ; 1200 baud @ 4 Mhz Fosc brgh=1 ; movlw d'2272' ; 110 baud @ 4 Mhz Fosc brgh=1 ; movlw d'103' ; 2400 baud @ 4 Mhz Fosc brgh=1 ; movlw d'52' ; 4800 baud @ 4 Mhz Fosc brgh=1 ; movlw d'12' ; 19200 baud @ 4 Mhz Fosc brgh=1 MOVLW D'12' ;19200 BAUD AT 4 MHZ FOSC MOVWF SPBRG MOVLW B'00100100' MOVWF TXSTA ;Enable Async Transmıssıon,Brgh=1 Hıgh Speed BCF STATUS,RP1 BCF STATUS,RP0 ;BANK0 MOVLW B'10010000' MOVWF RCSTA ;ENABLE ASYNC RECEPTION CLRF TEMP SETTLE DECFSZ TEMP GOTO SETTLE MAIN CLRF TEMP CALL RXLOOP SUBLW D'49' ;klavyeden gönderilen 1’in ascii karşılığı 49’dur. BTFSC STATUS,Z CALL PRN GOTO MAIN PRN MOVF TEMP,W CALL TABLE CALL TXLOOP INCF TEMP,F SUBLW D'62' ; '>' GREATER SYMB BTFSS STATUS,Z GOTO PRN CALL TAB MOVF PORTB,w CALL TXLOOP CALL ENTER CALL LF RETURN ENTER MOVLW D'13' ;code for return CALL TXLOOP RETURN TAB MOVLW D'9' ;code for tab CALL TXLOOP RETURN LF MOVLW D'10' ;code for linefeed CALL TXLOOP RETURN TXLOOP NOP BTFSS PIR1,TXIF ; Verinin hazır olup olmadığı kotrol edilir. GOTO TXLOOP MOVWF TXREG ; giriş verisi W registerine aktarılır. RETURN RXLOOP NOP BTFSS PIR1,RCIF GOTO RXLOOP MOVF RCREG,W RETURN TABLE ADDWF PCL,F DT "<** Su anda klavyede 1 tusuna bastiniz: haberlesme icin**>" RETURN END
Uygulama Devresi
Emeği geçen kişilere Teşekkürler
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/07/02 Etiketler: aktarım, ASCII, ccs, databus, iletişim, microchip pic projeleri, pic rs232, PIC16F84 örnekleri, PIC16F84A, PIC16F877 örnekleri, port, rs232, seri port haberleşmesi, seri port kullanımı, veri yolu
Bu devreyi LSC232F ile kod değişikliği yapmadan yapabilirsin
usb rs232 çevirici seriport olmayan bilgisayarlar için
bunun interneten kullanılması mumkunmu
Merhaba ben pic uygulamalarında yeniyimde bu c ile yazılmış pic kodunu hex kodlarını nasıl çevirebilirim ? yardımcı olursanız sevinirim.
recep onu microbasic yapıyor
Bu programı ısıste nasıl deneriz.Veya klavyeden verilen komutu ısısten alabilirmiyiz.
Ben kayan yazı yapmak istiyorum ve klavyeden verilen harfleri ekranda görmek istiyorum. Ama bunu ısıste önce denemek istiyorum. İsis programıyla klavyeyi nasıl birleştirebilirim.
gardaş sağ olun ellerinize sağlık
bilgiler için teşekkür ederim ben de herhangi bir sensörden rs 232 vasıtasıyla akan yazıları lcd de göstermek için bir devre tasarlamak istiyorum fakat bu konuda fazla bilgim yok yardımcı olursanız teşekkür ederimm
Ellerinize saglık çok faydalı bilgiler verilmiş.
Ben bir pcb kazıma; baskı devre makinesi yapmaya çalışıyorum mekanizma tamam devrede tamam tek sıkıntım çizim programıyla bu devreyi nasıl uyumlu hale getireceğiz programın adı önemli değil han gisi bu iş için uygunsa onu kullanırız yeterki çizdiğim resmi plakete basabileyim konu hakkında bilgisi ya da elinde dokümanı olan arkadaşların yardımını bekliyorum emeği geçen herkeze şimiden teşekkürler
mail adresim [email protected]
hocam linkler ölü kontrol edermisin
linkler yenilendi
hocam ilginize teşekkürler önce sizden bir isteğim daha var ben c# bilmiyorum eğer sakıncası yoksa arayüzün kodlarını ve exe sini bana atabilirmisiniz mailim [email protected]
iyi çalışmalar
Öncelikle merhabalar arkadaşlar
ben uzun zamandır bilgisayar usb portuyla haberleşicek bi pic18f2550 ya da 4550 ile lanet bi led açıp kapatmak istiyorum ancak hiçbir yerde ne driver yazmayı öğrenebildim ne de C# da yazılımı yazmayı ya bu konuda basitçe yardımcı olabilicek kimse yokmu ?
arayüz kullanmadan hyper terminal vasıtasıyla iletişim arayüzünü kullanabilirsin kurulum ve kullanımı nette bir çok yerde var.ancak ben arayüzümü kendim yapıp kullanmak istiyorum dersen üstteki c# kodları yeterli olacaktır.bir buton bir textfield ile işini halledebilirsin.yukarıda ise c# için serialport komutları var buda bağlantını sağlayacaktır.geriye ise sadece denemek kalır ;)kolay gelsin
Şimdi şunu sorayım o zaman Hyper terminalde drivere ihtiyaç yokmu mesela ben Pic i programladıktan sonra kalan tek şey bilgisayara bağlayıp “hyper terminal” den komut göndermek mi oluyor bu kadar mı driver falan ihtiyaç yokmu ?
tabi ki usb to rs232 dönüştürücü kullanmak gerekiyor bu donusturucunun driver i zaten ayrı olarak cihazı aldıgında veriliyor usb nin hangi portuna taktıysan hyper terminalde o com port u seçip o şekilde bilgi gönderebilirsin.nete yazarsana rs232 ile ilgili bir çok bilgi var örnek bir video;
[youtube]https://www.youtube.com/watch?v=E6Bsr0y9Qsw[/youtube]
https://www.youtube.com/watch?v=E6Bsr0y9Qsw
Şimdi her şey tamam pic e komut gönderip led açıp kapatabiliyorum şimdiki hedefim bir fırçasız bruscless motora seviyeli akım göndermek yani esc sine hız kontrol sisteminin bağlı olduğu alıcıya Bi şekilde pic i uydurup bilgisayardan hızını arttırabilmek eğer bunuda yaparsam hayalimi gerçekleştirebilirim 🙂
bu mantık ile tankalara bağlı sensörlerden gelen bilgileri bilgisayara kaydedebilirmiyiz otomatik olarak
Ben üniversitedeki son dersim olan mikroislemciler ile ilgili buna benzer bir proje yapmak zorundayım ve yardıma ihtiyacım var. Yardımcı olabilir misiniz
rs232 ile 2 arduinoyu nasıl haberleştirebilirim