Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: mech - 04 Haziran 2008, 09:51:14

Başlık: seri iletişimde kesme
Gönderen: mech - 04 Haziran 2008, 09:51:14
Ş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.
Başlık: seri iletişimde kesme
Gönderen: Maxim - 04 Haziran 2008, 09:53:18
harika bir başlık açmışsın ,
bende aynı sıkıntıyı yaşıyorum ,
şu problemi çözelim ..
Başlık: haydaaaaaaaaaa
Gönderen: Tom - 04 Haziran 2008, 15:58:30
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.
Başlık: seri iletişimde kesme
Gönderen: mech - 04 Haziran 2008, 18:58:26
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.
Başlık: Re: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 05 Haziran 2008, 12:30:44
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
Başlık: seri iletişimde kesme
Gönderen: ErsinErce - 05 Haziran 2008, 18:14:43
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
Başlık: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 05 Haziran 2008, 18:39:39
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
Başlık: seri iletişimde kesme
Gönderen: ErsinErce - 05 Haziran 2008, 20:42:30
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...
Başlık: seri iletişimde kesme
Gönderen: mech - 05 Haziran 2008, 23:39:54
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.
Başlık: arkadaşlar
Gönderen: Tom - 06 Haziran 2008, 01:16:25
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...
Başlık: seri iletişimde kesme
Gönderen: mech - 06 Haziran 2008, 10:54:26
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
Başlık: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 06 Haziran 2008, 11:17:22
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
Başlık: seri iletişimde kesme
Gönderen: mech - 06 Haziran 2008, 15:09:40
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...
Başlık: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 06 Haziran 2008, 15:45:21
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
Başlık: seri iletişimde kesme
Gönderen: mech - 06 Haziran 2008, 16:04:27
Tamam arkadaşlar bir özür faslıdır gidiyor. güzel de benim sorunuma bi baksaydık.
Başlık: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 06 Haziran 2008, 16:14:25
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
Başlık: seri iletişimde kesme
Gönderen: mech - 06 Haziran 2008, 16:48:00
devrede herşey normal görğnğyor ama sonuç yok.
Başlık: seri iletişimde kesme
Gönderen: mech - 06 Haziran 2008, 17:21:42
kusura bakmayın arkadaşlar hata benimmiş. Devremde korkunç bi hata yapmışım. Neyse şimdilik deneme başarılı oldu.
Başlık: seri iletişimde kesme
Gönderen: mech - 07 Haziran 2008, 14:23:07
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.
Başlık: seri iletişimde kesme
Gönderen: Maxim - 07 Haziran 2008, 17:54:02
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 ?
Başlık: seri iletişimde kesme
Gönderen: mech - 08 Haziran 2008, 22:07:13
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.
Başlık: seri iletişimde kesme
Gönderen: mech - 09 Haziran 2008, 11:10:51
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
Başlık: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 09 Haziran 2008, 12:57:33
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
Başlık: seri iletişimde kesme
Gönderen: mech - 09 Haziran 2008, 13:11:36
olur canım, temel olarak aynı zaten.
Başlık: seri iletişimde kesme
Gönderen: Gurkan-Demirbas - 09 Haziran 2008, 14:06:57
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
Başlık: seri iletişimde kesme
Gönderen: mech - 09 Haziran 2008, 16:25:37
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) .
Başlık: kendi kullandığım kesme
Gönderen: speak48 - 27 Haziran 2008, 11:57:00
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
Başlık: Re: kendi kullandığım kesme
Gönderen: mech - 02 Temmuz 2008, 23:06:18
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?
Başlık: seri iletişimde kesme
Gönderen: selvi - 03 Aralık 2008, 09:03:24
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?
Başlık: seri iletişimde kesme
Gönderen: OG - 03 Aralık 2008, 12:27:17
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.
Başlık: seri iletişimde kesme
Gönderen: mech - 07 Aralık 2008, 01:24:05
BRGH; uygun kristal ile uygun baud rate ayarı ve SPBRG hassasiyet ayarlarını datasheetteki tablodan seçmek için kullanılıyor.