PIC16F877 İLE DATA BUS (VERİ YOLU) UYGULAMASI


Şekil 1
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***8217;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***8217;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***8217;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***8217;ler arasında daha iyi bir Data Bus (Veri Yolu) sistemi kurulabilir.

Aşağıdaki assambly kodlar Data Bus (Veri Yolu) sisteminin birinci PIC***8217;in kodlarıdır.

Özetle çalışma sistemi şöyledir: Kodlar PIC16f877***8217;ye doğru yüklenip devre doğru kurulduğunda bilgisayarın klavyesinde ***8220;1***8221; 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 **>

***8220;1***8221; 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.

SUBLWD'49';klavyeden gönderilen 1***8217;in ascii karşılığı 49***8217;dur.

BUS sistemine 2. işlemcisine aşağıdaki kodlarda şu değişiklikler yapılarak 2. işlemci programlanır.

SUBLWD'49'

satırındaki 49 yerine ***8220;2***8221; nin ascii değeri olan 50 yazılmalı yani bu satır

SUBLWD***8217;50***8217; ile değiştirilmelidir.

DT"<** Su anda klavyede 1 tusuna bastiniz **>"

Satırı yerine 2. PIC***8217;in göndereceği satır ise

DT"<** Su anda klavyede 2 tusuna bastiniz **>"

Şeklinde değiştirilmelidir.

Diğer BUS sistemindeki PIC16f877***8217;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 ***8220;1***8221; tuşuna bastığınızda hyper terminale
DT"<** Su anda klavyede 1 tusuna bastiniz**>" bilgisi
Klavyeden ***8220;2***8221; tuşuna bastığınızda hyper terminale
DT"<** Su anda klavyede 2 tusuna bastiniz**>" bilgisi
Klavyeden ***8220;3***8221; 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




PROGRAM


;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.

LISTP=16F877,C=140
ERRORLEVEL1,-(305)
#INCLUDE"P16F877.INC"
__CONFIG _PWRTE_ON&_XT_OSC&_LVP_OFF&_WDT_OFF

TEMPEQU7FH
SAYAC1EQU8FH


ORG0;program başlangıç satırı
GOTOMSTART

MSTART

BCFSTATUS,RP1
BCFSTATUS,RP0;BANK0 geç.

MOVLW0X00
MOVWFPORTA
MOVWFPORTB
MOVWFPORTC
MOVWFPORTD
MOVWFPORTE

BCFSTATUS,RP1
BSFSTATUS,RP0;BANK1 bank geç.

CLRFTRISA
CLRFTRISD
CLRFTRISE
MOVLW0XFF
MOVWFTRISB
MOVLW0XFF
MOVWFTRISC


; Baud Values with BRGH = 0
; ((20000000/9600)/64)-1 = 32


;movlwd'6'; 9600 baud @ 4 Mhz Fosc brgh=0
;movlwd'25'; 9600 baud @ 4 Mhz Fosc brgh=1
;movlwd'207' ; 1200 baud @ 4 Mhz Fosc brgh=1
;movlwd'2272' ; 110 baud @ 4 Mhz Fosc brgh=1
;movlwd'103'; 2400 baud @ 4 Mhz Fosc brgh=1
;movlwd'52'; 4800 baud @ 4 Mhz Fosc brgh=1
;movlwd'12'; 19200 baud @ 4 Mhz Fosc brgh=1


MOVLWD'12';19200 BAUD AT 4 MHZ FOSC
MOVWFSPBRG
MOVLWB'00100100'
MOVWFTXSTA;Enable Async Transmıssıon,Brgh=1 Hıgh Speed
BCFSTATUS,RP1
BCFSTATUS,RP0;BANK0
MOVLWB'10010000'
MOVWFRCSTA;ENABLE ASYNC RECEPTION
CLRF TEMP

SETTLE

DECFSZ TEMP
GOTOSETTLE

MAIN

CLRFTEMP
CALLRXLOOP
SUBLWD'49';klavyeden gönderilen 1***8217;in ascii karşılığı 49***8217;dur.
BTFSCSTATUS,Z
CALLPRN
GOTOMAIN

PRN

MOVFTEMP,W
CALLTABLE
CALLTXLOOP
INCFTEMP,F
SUBLWD'62'; '>' GREATER SYMB
BTFSSSTATUS,Z
GOTOPRN
CALLTAB
MOVFPORTB,w
CALLTXLOOP
CALLENTER
CALLLF
RETURN

ENTER

MOVLWD'13';code for return
CALLTXLOOP
RETURN


TAB

MOVLWD'9';code for tab
CALLTXLOOP
RETURN

LF

MOVLWD'10';code for linefeed
CALLTXLOOP
RETURN

TXLOOP

NOP
BTFSSPIR1,TXIF; Verinin hazır olup olmadığı kotrol edilir.
GOTOTXLOOP
MOVWFTXREG; giriş verisi W registerine aktarılır.
RETURN

RXLOOP

NOP
BTFSSPIR1,RCIF
GOTORXLOOP
MOVFRCREG,W
RETURN

TABLE

ADDWFPCL,F

DT"<** Su anda klavyede 1 tusuna bastiniz: haberlesme icin**>"

RETURN

END










UYGULAMA DEVRESİ






Şekil 2

Yazan :Galip KILIÇ
galip@istanbulcorap.com.tr