Şu ana kadar hiç kesme kullanmadım. Seri iletişimde iletişimin ne zaman başladığına dair sorunlar çıkıyor. Birkaç yerde interrupt kullanılarak seri iletişimin yapıldığını gördüm. Şimdi araştırdım bişey bulamadım. Serout komutu ile interupt'ı nasıl beraber kullanabiliriz.
harika bir başlık açmışsın ,
bende aynı sıkıntıyı yaşıyorum ,
şu problemi çözelim ..
Valla bencede süper bir başlık ben seri iletişimi proğramla yaptım ama pic in kendi seri iletişim donanımını kullanmak çok daha iyi.Aksi taktirde zamanlamaları tutturmak çok zor.
Bu konuyu birlikte araştıralım ve bilgileri paylaşalım arkadaşlar.
Önegin ben pic olarak 18F452 kullanıyorum.Ve seri iletişimide ds1307 nin saat projesinde kullanacagım.
Ben iki hat üzerinden iletişim kurarak yapıyorum aslında bu işi. Bugün çok uğraştım, iletişimi bi şekilde kurdum. Şöyle ki;
Bir pic için giriş ve çıkış pini tanımlanıyor. Diğer pice bir şifre niteliğindeki veriyi defalarca gönderiyor. Ta ki, diğer pic gönderen pic'in giriş pinini high yapana kadar. Karşıdaki pic bu pini veriyi aldığında daha doğrusu şifre tuttuğunda high yapıyor. Bu andan itibaren demin bilgi gönderen pic serin ile beklemeye geçiyor. Artık veri almaya hazır. Karşıdaki pic veriyi defalarca gönderiyor taki bu sefer bu picin giriş pini high olana kadar. Yani hep aynı olay vuku buluyor. Böylece seri haberleşme sınırlarda yapılmış olup garanti aktarılıyor. Hız modunu 16780 kullanıyorum.
Alıntı yapılan: "mech"Serout komutu ile interupt'ı nasıl beraber kullanabiliriz.
Kullanamazsın; Serout veya Serin komutları; herhangi bir input/output pinini, software olarak seri haberleşme pini gibi davranmasını sağlar.
Interrupt'ı ancak hardware serial com'da kullabilirsin. Hali hazırda hardware serial com varken ben şahsen software serial com kullanmıyorum. Birden fazla seri haberleşme yapılacaksa ok kabulum.
Ama "yok ben illa da Software kullanacam ve intrrupt'ı da kullanacam" diyosan eğer; absürt ve de bir okadar da aptalca bir fikir verebilirim belki; gerçi hiç deneme ihtiyacı duymadım ama......
Serin ve Serout komutlarını kullanmadan kendin software ile PortB'de bir seri in veya seri out pini konfigüre et; ve
Interrupt on PortB Change özelliğini kullanarak, interrupt yarat...
Ama olmaz, bu da olamaz ki; bu sefer de baud rate tutmaz.
Neyse, kolay gelsin
Dahili usart modülünü kullanmadan da gerçekleştirebilirsiniz ama boşuna vakit kaybı olur, donanımınızı dahili usart modülünü kullanacak şekilde ayarlayın gerisini hserout hserin komutlarıyla kısa zamanda yapabilirsiniz
Alıntı yapılan: "cynetron"Dahili usart modülünü kullanmadan da gerçekleştirebilirsiniz ama boşuna vakit kaybı olur,
Hocam dahili USART ile kesme konusunda sorun yok;
Sorun bunu kullanmadan kesme yaratabilmenin formülü nedir? ifadene göre bu mümkün, eğer söyleyebilirsen bilgilenmiş oluruz.
Soruyu netleştireyim;
Herhangi bir I/O portunu programsal olarak (hw değil!..) RX (receive) yaptık. Bu pine seri bilgi geldiğinde nasıl kesme oluşacak? ve ISR'ye nasıl dallanacak? ve de baud rate'i senkronize edip bilgiyi sağlıklı biçimde alacak?
Buyurun söz sizin
Gürkan
O sözümden INTERRUPT kullanarak herhangi bir pinden seri bilgi almayı kastetmedim o şekilde anlaşıldıysa özür dilerim.
Tabi yapısal birkaç konuyu açıklamada fayda var galiba;
1) Kesmeyi yazılımsal oluşturamazsın mutlaka donanımsal bir yapıya bağlı olması lazım (Timer, USART, PortB Change, INT0, CCP, vs.)
2)Eğer seri bilgiyi aldığında bir kesme yaşanmasını istiyorsan USART kullanmak zorundasın
3)Seri bilgiyi almaya başlarken kesmeye sokabilirsin. Bunlar INT0, INT1, INT2, PORTB 4~7Change, CCP, Timer0, Timer1. Gerekli ayarları yaparak bütün hepsiyle kesme oluşturabilirsin hepsininde portlarla bağlantıları var.
4)Yada belli süre aralıklarında bilgi bekler, karşı tarafın gönderme zamanını veya tekrarlamasını ona göre ayarlasın
Umarım açıklayıcı olmuştur...
Evet, Isis'te denemelerime göre hserout in komutları oldukça başarılı. Peki Interrupt kullanmanın ne faydası var bize. Kullanmadan da çalışıyor.
Gördüğüm kadarı ile hep basıc komutlarından bahsediosunuz.Ama kardeşiniz asm kullanıo peki o ne yapacak:-)Sözün özü örneğin pıc18f452 için portc,3 ve portc,4 uçları seri data ve clock uçları , bu uçlara göre asm dilinde sadece örnek verecek arkadaşım yokmu.
mesela data yı dış ortama nasıl gönderecez.Ben pic in seri donanımını kullanmadan şu şekilde yapıyorum,
1- clock=0 iken data portu olarak seçtiğimiz uca veriyi aktarıyorum ve clock pals ile veriyi dış ortama aktarıyorum.Yalnız daha önce data portunu çıkış olarak yönlendiriyorum.
2-Datayı dış ortama gönderdikten hemen sonra bu sefer data ucunu giriş olarak yönlendiriyorum.Dış ortamdan alındı bilgisini yine bu data ucundan clock pals ile alıyorum.( yani data=0)
Eger alındı bilgisi =0 ise gönderdiğim veri dış ortama dogru bir şekilde gitmiş demektir.Eger data=1 ise data dış ortama gönderilememiş veya dış ortam gönderdiğim bilgiyi alamamış demektir, o zaman aynı veriyi tekrar gönderiyorum.
İşte programla seri port olarak tanımladıgımız bir port tan veri bu şekilde aktarılıyor.
Aynı işlemi pic orjinal seri portuyla nasıl yaparız bu şekilde açıklasak arkadaşlar , sanırım konuyu daha iyi anlayacagız...
asm bilmiyorum ama Isiste yaptığım devre normalde çalışmadı.
Sadece veri gönderiyor. Gelen veriyi kontrol edip led yakacak. Ama çalışmadı. Sorun nedir acaba.
Device=16F628
XTAL 4
ALL_DIGITAL true
HSERIAL_BAUD = 2400 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 '
HSERIAL_TXSTA = %00100000
HSERIAL_CLEAR = On
'HSERIAL_SPBRG=11 ' 115200 Bauds
Dim a As Word
Dim b As Word
Dim c As Word
TRISB.0=0
Low PORTB.0
dev:
HSerIn 50, dev, [a,b,c]
If a=831 And b=832 And c=833 Then High PORTB.0
GoTo dev
Device=16F877
XTAL 4
ALL_DIGITAL true
HSERIAL_BAUD = 2400 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100000 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
DelayMS 2000
dev:
HSerOut [831,832,833]
GoTo dev
Alıntı YapO sözümden INTERRUPT kullanarak herhangi bir pinden seri bilgi almayı kastetmedim o şekilde anlaşıldıysa özür dilerim.
Hocam özür dilemesi gereken biri varsa o da benim; sanırım konuyu ben yanlış yorumladım ve yanlış algıladım.
Verdiğin 4 madde'ye de tamamen katılıyorum.
Alıntı YapPeki Interrupt kullanmanın ne faydası var bize. Kullanmadan da çalışıyor.
Interrupt kullanmanın manası şudur: Bir yerde müdürsün diyelim ve altında çalışan ve belli sorumluluğu olan biri var; diyelimki bu adam telefonlara bakıyor. Belirli aralıklarla adama gidip "bana telefon eden varmı?" diye sormak mı daha iyidir, ki bu durumda aralık uzun ise gelen telefonu kaçırma ihtimalin var; yoksa telefon geldiğinde adamın hemen sana haber vermesini mi tercih edersin?
eğer işlerin çok yoğun değil ise; belirli periodlarla bunu adama sorarsın; ama işlerin yoğunsa, işlerini ikide birde yarım bırakıp adama sormak çok mantıklı mıdır?
Interrupt da budur zaten, işlemciyi uyarmak ve alarm vermek için kullanılır. İşlemcinin zamanını almaz.
Alıntı Yap1- clock=0 iken data portu olarak seçtiğimiz uca veriyi aktarıyorum ve clock pals ile veriyi dış ortama aktarıyorum.Yalnız daha önce data portunu çıkış olarak yönlendiriyorum.
Hocam senin dediğin senkron haberleşme; tamam buna itirazım yok ama ya bilgiyi RF gönderiyorsan; arası 1 km olan iki işlemcinin RF'le haberleşmesinde bir de senin bahsettiğin senkronizasyon clock'unu göndermen gerekir, ki USART varken çok mantıksız olur bu.
Biz Asenkron haberleşmeden bahsediyoruz
USART = Universal Serial
Asynchronous Receiver Transmitter
Alıntı YapAynı işlemi pic orjinal seri portuyla nasıl yaparız bu şekilde açıklasak arkadaşlar , sanırım konuyu daha iyi anlayacagız...
Kullandığın Pic'in Master Synchronous Serial Port'unu kullanarak yapabilirsin; pic'in datasheet'ini incele.
Gürkan
Alıntı yapılan: "mech"asm bilmiyorum ama Isiste yaptığım devre normalde çalışmadı.
Sadece veri gönderiyor. Gelen veriyi kontrol edip led yakacak. Ama çalışmadı. Sorun nedir acaba.
Device=16F628
XTAL 4
ALL_DIGITAL true
HSERIAL_BAUD = 2400 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 '
HSERIAL_TXSTA = %00100000
HSERIAL_CLEAR = On
'HSERIAL_SPBRG=11 ' 115200 Bauds
Dim a As Word
Dim b As Word
Dim c As Word
TRISB.0=0
Low PORTB.0
dev:
HSerIn 50, dev, [a,b,c]
If a=831 And b=832 And c=833 Then High PORTB.0
GoTo dev
Device=16F877
XTAL 4
ALL_DIGITAL true
HSERIAL_BAUD = 2400 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100000 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
DelayMS 2000
dev:
HSerOut [831,832,833]
GoTo dev
evet arkadaşlar acaba neyi yanlış ya da eksik yapıyorum. Bu devre isiste çalışırken neden gerçek devrede çalışmıyor. Kesmeyle de denedim yine aynı. Teşekkürler...
kolay gelsin
Gürkan
DÜZELTME : Hocam ben PBP kullanıyorum, proton'a tamamen yabancıyım; sanırım proton'da tanımlamalar farklı, özür diliyorum
Tamam arkadaşlar bir özür faslıdır gidiyor. güzel de benim sorunuma bi baksaydık.
Alıntı yapılan: "Gurkan-Demirbas"kolay gelsin
DÜZELTME : Hocam ben PBP kullanıyorum, proton'a tamamen yabancıyım; sanırım proton'da tanımlamalar farklı, özür diliyorum
@Mech hocam, özürüm sanaydı aslında; proton kullanıyorsun ama ben proton'a yabancıyım.
Eğer program isis'de çalışıyorsa, kurduğun devrede bir sorun olma ihtimali daha yüksek;
SPBRG değerlerini hem 877'de hem de 628'de 25 olarak tanımla HSERIAL_SPBRG = 25
Bir de 628 alıcı durumunda, TXSTA'yı %00000000 yap; alıcıda transmit'i enable yapmaya gerek yok.
Bunlar dışında br sorun göremedim şahsen
Gürkan
devrede herşey normal görğnğyor ama sonuç yok.
kusura bakmayın arkadaşlar hata benimmiş. Devremde korkunç bi hata yapmışım. Neyse şimdilik deneme başarılı oldu.
Tamam ilk testi geçti ama. Gönderdiğim sayıları ISIS'te Lcd'de okutayım dedim, alakasız sayılarla karşılaştım. Bana çalışan bir örnek verebilir misiniz? Sanırım bu iş sandığımdan zor olacak.
mech ,
yukarıda verdiğin kodlar hardware usart değilki ama ?
yani interrupt ile çalışan bir kod değil ,
normal proton+ kendi serial haberleşme kodu ,
interrupt oldumu şöyle başlamalı ,
ON_INTERRUPT GOTO FALAN
usart interrupt kullanmaya gerek yokmu diyorsunuz ?
hserout sonuçta hardware seri haberleşmeyi kullanıyor. Ama ben yine de kesmeli yaptım. Bi şekilde şuan çalışıyor, bakalım ileriki aşamalarda neler çıkacak karşımıza.
16f628'den direkt 16f877'ye bilgi gönderdiğimde lcd'de görebiliyorum. Fakat 16f877'den 16f628'e bilgi gönderdiğimde; kesme oluştuğunda yanması gereken bir led bile yanmıyor. Yani kesme oluşmuyor. Bazen de 16f877 ilk açılışta sanki kesme oluşmuş gibi keme alt programına dallanıyor.
Device=16F628
XTAL 4
ALL_DIGITAL true
HSERIAL_BAUD = 2400 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 '
HSERIAL_TXSTA = %00100000
HSERIAL_CLEAR = On
Dim a1 As Byte
Dim a2 As Byte
Dim a3 As Byte
Dim a4 As Byte
Dim a5 As Byte
Dim a6 As Byte
Dim c As Word
Dim d As Word
Dim e As Word
Dim f As Word
Dim g As Word
Dim h As Word
Dim i As Word
Dim j As Word
Dim oku As Byte
Clear
TRISB=0
INTCON = %11000000 'CEVRESEL KESMELER AÇIK
PIE1 = %00100000 'RCIE ACTIVE
PIR1 = %00100000 'RCIF FLAG
On Interrupt GoTo SERI_KESME
Low PORTB.0
dev:
If oku=1 Then DelayMS 200:c=324:d=563:e=456:f=354:g=54:h=256:i=987:j=634:HSerOut [c,d,e,f,g,h,i,j]:oku=0
GoTo dev
SERI_KESME:
If PIR1.5 = 1 Then
High PORTB.0
PIE1.5 = 0
PIR1.5 = 0
HSerIn [a1,a2,a3,a4,a5,a6]
If a1="O" And a2="K" And a3="U" Then oku=1
PIE1.5 = 1
EndIf
Resume
Enable
Device=16F877
XTAL 10
ALL_DIGITAL true
HSERIAL_BAUD = 2400 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100000 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
LCD_DTPIN PORTB.4
LCD_RSPIN PORTE.0
LCD_ENPIN PORTE.2
LCD_LINES 2
LCD_INTERFACE 4
TRISB.0=0
Dim t1 As Byte
Dim a As Byte
Dim a1 As Byte
Dim a2 As Byte
Dim a3 As Byte
Dim a4 As Byte
Dim a5 As Byte
Dim a6 As Byte
Dim b As Word
Dim c As Byte
Dim d As Byte
Dim e As Byte
Dim f As Word
Dim g As Word
Dim h As Word
Dim i As Word
Dim j As Word
Clear
TRISB=255
INTCON = %11000000 'CEVRESEL KESMELER AÇIK
PIE1 = %00100000 'RCIE ACTIVE
PIR1 = %00100000 'RCIF FLAG
On Interrupt GoTo SERI_KESME
Low PORTB.0
For b=1 To 500:DelayMS 2:Next
a1="O":a2="K":a3="U"
PIE1.5=0
HSerOut [a1,a2,a3,a4,a5,a6]
PIE1.5=1
dev2:
Print At 1,1, DEC3 f,"-",DEC3 g,"-", DEC3 h,"-",DEC3 i
Print At 2,1, DEC3 j,"-",DEC3 k,"-", DEC3 l,"-",DEC3 m
GoTo dev2
Disable
SERI_KESME:
If PIR1.5 = 1 Then
PIE1.5 = 0
PIR1.5 = 0
HSerIn [f,g,h,i,j,k,l,m]
PIE1.5 = 1
EndIf
Resume
Enable
Alıntı yapılan: "mech"Tamam ilk testi geçti ama. Gönderdiğim sayıları ISIS'te Lcd'de okutayım dedim, alakasız sayılarla karşılaştım. Bana çalışan bir örnek verebilir misiniz? Sanırım bu iş sandığımdan zor olacak.
Hocam ben PBP kullanıyorum; PBP'da yazılmış program işini görecek ise göndereyim hemen.
Gürkan
olur canım, temel olarak aynı zaten.
tamamdır vereyim o zaman; bu programı 2 adet 16F628A'yı 433MHz'lik basit alıcı vericide haberleştirebilirmiyim diye 1 sene önce denemiştim.
"Aptalmısın sen kardeşim" diyebilirsiniz; ama deneyip kendi gözümle görmek istemiştim.
Neyse; programı direk kopyalayıp yapıştırıyorum, arada benim daha önce yazdığım bazı notlar ve/veya program bug'ları olabilir. Ama program isis'de ve de protoboard üzerinde (RF'siz direk bağlandığında) sorunsuz çalışıyor.
RECEIVE
'4 MHZ ve 22pF'lık kondansatörlerle Konfigürasyon HS olması gerekiyor
' Başka türlü çalışmıyor
@ DEVICE pic16F628A
@ DEVICE PIC16F628a, HS_OSC
@ DEVICE pic16F628a, WDT_OFF
@ DEVICE pic16F628a, PWRT_OFF
@ DEVICE pic16F628a, MCLR_ON
@ DEVICE pic16F628a, BOD_OFF
@ DEVICE pic16F628a, LVP_OFF
@ DEVICE pic16F628a, CPD_OFF ; Data Memory Code Protect
@ DEVICE pic16F628a, PROTECT_OFF ; Program Code Protection
SYMBOL GIE =INTCON.7 'genel interruptlary açyyor
SYMBOL PEIE =INTCON.6 'peripheralinterruptlary açyyor
SYMBOL RCIE =PIE1.5 'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5 'USART Receive interrupt flag bit
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 3
Define LCD_EREG PORTB
Define LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE OSC 4 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 00h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 207
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
ON INTERRUPT GOTO myint
FLAG VAR BIT
RXsayi VAR BYTE
eski_data VAR BYTE
kesme VAR BYTE
kesme = 0
FLAG=0
CALL SETUP
CALL LCD_ILK_KOSUL
RCIE=1
PEIE=1
GIE=1
LOW TXSTA.2
LOOP:
IF (FLAG=1) THEN
lcdout $FE ,$C0, "Kesme sayisi:", HEX kesme , " ", HEX RXsayi
FLAG=0
ENDIF
GOTO LOOP
DISABLE
myint:
Hserin 1, ERROR, [RXsayi]
FLAG=1
kesme = kesme + 1
ERROR:
Resume
enable
SETUP :
CMCON = $07
PORTA=$00 ' //clear port B
PORTB=$00 ' //clear port A
INTCON=%00000000
RCSTA=$90
TXSTA=$00
TRISB=%00000010 ' //set bit RB1 to be input and RB2-RB3 output
TRISA=$00
Return
LCD_ILK_KOSUL:
HIGH PORTA.3
Pause 50 ' Wait for LCD to start up
LOW PORTA.3
Lcdout $fe, $01 ' Clear screen
Pause 10 ' Wait .5 second
Lcdout "Receive Terminal"
Pause 1 ' Wait .5 second
RETURN
END
TRANSMIT
'4 MHZ ve 22pF'lık kondansatörlerle Konfigürasyon HS olması gerekiyor
' Başka türlü çalışmıyor
DEFINE OSC 4
@ DEVICE pic16F628A
@ DEVICE PIC16F628a, HS_OSC
@ DEVICE pic16F628a, WDT_OFF
@ DEVICE pic16F628a, PWRT_OFF
@ DEVICE pic16F628a, MCLR_ON
@ DEVICE pic16F628a, BOD_OFF
@ DEVICE pic16F628a, LVP_OFF
@ DEVICE pic16F628a, CPD_OFF ; Data Memory Code Protect
@ DEVICE pic16F628a, PROTECT_OFF ; Program Code Protection
'@ DEVICE pic16F628A, XT_OSC ;INTRC_OSC_XT ;NOCLKOUT 'XT_OSC - HS_OSC Â
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 207
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DONGU VAR BYTE
CALL SETUP
BASA:
FOR DONGU = 0 to $FF
Hserout [DONGU]
PAUSE 1000 '1 saniye bekle
NEXT DONGU
GOTO BASA
SETUP :
CMCON = $07
RCSTA=$90
TXSTA=$20
TRISB=$00
TRISA=$00
INTCON = $00
Return
END
meraba arkadaşlar. Cevaplarınız için sağolun. 628'in programında Trisb=0 yazdığım için Rx pini iptal olmuş. Sorun çözüldü.Tşk(http://img151.imageshack.us/img151/9500/dilimdilim2ge7ak5.jpg) (http://imageshack.us) .
Include "PROTON_4.INC"
On Interrupt GoTo kesme
Dim yazi[30] As Byte
Dim i,n As Byte
GoTo init
Disable
kesme:
For i=0 To 29
HSerIn [yazi[i]]
If yazi[i]=13 Then
GoTo geldi
EndIf
HSerOut [yazi[i]]
Next i
geldi:
HSerOut [13]
PIR1.5=0
Resume
Enable
init:
INTCON=%1100000
PIE1.5=1
PIR1.5=0
TRISB=0
TRISC=%11000000
don:GoTo don
Alıntı yapılan: "speak48"Include "PROTON_4.INC"
On Interrupt GoTo kesme
Dim yazi[30] As Byte
Dim i,n As Byte
GoTo init
Disable
kesme:
For i=0 To 29
HSerIn [yazi[i]]
If yazi[i]=13 Then
GoTo geldi
EndIf
HSerOut [yazi[i]]
Next i
geldi:
HSerOut [13]
PIR1.5=0
Resume
Enable
init:
INTCON=%1100000
PIE1.5=1
PIR1.5=0
TRISB=0
TRISC=%11000000
don:GoTo don
sanırım pir1.5'i kesme rutininin başında sıfır yampman gerkiyordu değil mi?
alici kisminda( DEFINE HSER_TXSTA 00h ' Enable transmit, BRGH = 0 )bu tanimlama nicin.ben (DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1)bu sekilde tanimliyorum.programin sorun cikartmasi bundan olabilir mi?
DEFINE HSER_TXSTA 00h veya DEFINE HSER_TXSTA 24h
TXSTA yazmacına atanan deger demektir,
Şu da aynı şey
TXSTA = %00000000 '00h
TXSTA = %00100100 '24h
TXSTA registerine bu atama ile ne iş yapılır o önemli. Datasheete bakmak gerek.
BRGH; uygun kristal ile uygun baud rate ayarı ve SPBRG hassasiyet ayarlarını datasheetteki tablodan seçmek için kullanılıyor.