18f46k22 donanımsal usart yardım

Başlatan mikro29, 12 Şubat 2015, 14:53:25

mikro29

Biraz araştırmama rağmen Proton basic  ile donanımsal usart çalıştıramadım. Aslında  şöyle çalışıyor usart çalıştığı zaman ekran çalışmıyor, ama programdan usartı silince herşey normal. Yardımlarınızı bekliyorum. Teşekkürler

Loader   = 3.5.2.7
Compiler =3.5.2.7


Device = 18F46K22
Xtal 64
Config_Start
  FOSC = HSHP	;HS oscillator (high power > 16 MHz)
  PLLCFG = On	;Oscillator multiplied by 4
  PRICLKEN = On	;Primary clock is always enabled
  FCMEN = OFF	;Fail-Safe Clock Monitor disabled
  IESO = OFF	;Oscillator Switchover mode disabled
  PWRTEN = OFF	;Power up timer disabled
  BOREN = SBORDIS	;Brown-out Reset enabled in hardware only (SBOREN is disabled)
  BORV = 190	;VBOR set to 1.90 V nominal
  WDTEN = OFF	;Watch dog timer is always disabled. SWDTEN has no effect.
  WDTPS = 32768	;1:32768
  CCP2MX = PORTC1	;CCP2 input/output is multiplexed with RC1
  PBADEN = OFF	;PORTB<5:0> pins are configured as digital I/O on Reset
  CCP3MX = PORTB5	;P3A/CCP3 input/output is multiplexed with RB5
  HFOFST = OFF	;HFINTOSC output and ready status are delayed by the oscillator stable status
  T3CMX = PORTC0	;T3CKI is on RC0
  P2BMX = PORTD2	;P2B is on RD2
  MCLRE = EXTMCLR	;MCLR pin enabled, RE3 input pin disabled
  STVREN = On	;Stack full/underflow will cause Reset
  LVP = OFF	;Single-Supply ICSP disabled
  XINST = OFF	;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
  Debug = OFF	;Disabled
  CP0 = OFF	;Block 0 (000800-003FFFh) not code-protected
  CP1 = OFF	;Block 1 (004000-007FFFh) not code-protected
  CP2 = OFF	;Block 2 (008000-00BFFFh) not code-protected
  CP3 = OFF	;Block 3 (00C000-00FFFFh) not code-protected
  CPB = OFF	;Boot block (000000-0007FFh) not code-protected
  CPD = OFF	;Data EEPROM not code-protected
  WRT0 = OFF	;Block 0 (000800-003FFFh) not write-protected
  WRT1 = OFF	;Block 1 (004000-007FFFh) not write-protected
  WRT2 = OFF	;Block 2 (008000-00BFFFh) not write-protected
  WRT3 = OFF	;Block 3 (00C000-00FFFFh) not write-protected
  WRTC = OFF	;Configuration registers (300000-3000FFh) not write-protected
  WRTB = OFF	;Boot Block (000000-0007FFh) not write-protected
  WRTD = OFF	;Data EEPROM not write-protected
  EBTR0 = OFF	;Block 0 (000800-003FFFh) not protected from table reads executed in other blocks
  EBTR1 = OFF	;Block 1 (004000-007FFFh) not protected from table reads executed in other blocks
  EBTR2 = OFF	;Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks
  EBTR3 = OFF	;Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks
  EBTRB = OFF	;Boot Block (000000-0007FFh) not protected from table reads executed in other blocks
Config_End

OSCCON.6 = 1 '111 = 16Mhz 
OSCCON.5 = 1
OSCCON.4 = 1
OSCTUNE.6 = 1 '(multiplier 4 on 16*4 =64 MHZ)
'INTCON2.7 = 0 ' PULL UP PORTB REGISTER RBPU 
                       
Declare  SHOW_SYSTEM_VARIABLES = OFF   
Declare  FSR_CONTEXT_SAVE = OFF   
Declare  Reminders = OFF    
Declare  Warnings = OFF   
'Declare  Optimiser_Level 0   
Declare  Bootloader = OFF

'**********GIRIS-CIKIS TANIMLAMALARI******************  
'      76543210      
TRISA=%00111111 :PORTA=0
TRISB=%00000000 :PORTB=0
TRISC=%10000000 :PORTC=0
TRISD=%00000000 :PORTD=0
TRISE=%00000001 :PORTE=0

PortB_Pullups = On
PortB_Pullups = TRUE

'-------------------------- GLCD AYARLARI ------------------------
                                                                   
Declare  LCD_Type Toshiba     ' LCD type - graphical. Toshiba T6963 chipset
Declare  LCD_DTPort PORTD     ' Data port
Declare  LCD_WRPin  PORTC.3   ' WR line
Declare  LCD_RDPin  PORTC.2   ' RD line
Declare  LCD_CDPin  PORTC.1   ' CD line
Declare  LCD_CEPin  PORTB.0   ' CE line
'Declare  LCD_RSTPin PORTB.6   ' RST line
Declare  LCD_FSPIN  PORTC.5   ' FS line
Declare  LCD_X_Res   240      ' YATAY PiKSEL SAYISI
Declare  LCD_Y_Res  128       ' DiKEY PiKSEL SAYISI
Declare  LCD_Font_Width  8    ' FONT BÜYÜKLÜĞÜ
Declare  LCD_RAM_Size  8192   ' Display memory size
Declare  LCD_CommandUs 10
Declare  LCD_DataUs 10
Declare  GLCD_STROBE_DELAY 100
'GLCD_EXTERNAL_PRINT = PPRINT

Declare Adin_Res   10
Declare Adin_Tad   FRC
Declare Adin_Stime   10
Declare FSR_Context_Save = On

'-------------------------- ADC AYARLARI --------------------------
        '76543210
ADCON0 =%00000001
ADCON1 =%00001010
ADCON2 =%10000000

'-------------------------- USART AYARLARI ------------------------  
Declare Hserial_Baud =9600 
Declare Hserial_RCSTA=$90h 
Declare Hserial_TXSTA=$25h 
Declare Hserial_SPBRG= 103
Declare Hserial_Clear= On 

'-------------------------- BAUD AYARLARI ------------------------  
BAUDCON1.7 = 0 '1 = Otomatik baud zamanlayıcı taştı , 0 = Otomatik baud zamanlayıcı taşma kapalı
BAUDCON1.6 = 1 'Asenkron ise ve 1 = Alıcı boşta     , 0 = Başlangıç biti tespit edilmiş ve alıcı aktif
BAUDCON1.5 = 1 'Asenkron ise ve 1 = Alma verileri ( RX ) ters çevrilir , 0 = Alma verileri ( RXx ) ters çevrilmez
               'Senkron ise ve 1 = Veriler ( DTx) ters çevrilir 
BAUDCON1.4 = 0 'Asenkronda ise 1 = (Tx) iletim düşük modda , 0 = (Tx) iletim yüksek modda
BAUDCON1.3 = 0 'Baud Rate Generator 8 bit
BAUDCON1.2 = 0 'Geçersiz bit
BAUDCON1.1 = 0 'Uyandırma modu Asenkronda 
               '1 = Alıcı düşen kenarı bekliyor . Hiçbir karakter alınacak
               '    ancak RCxIF düşen üzerine kurulacaktır Yükselen kenarında WUE otomatik olarak açık 
               '0 = Alıcı normal çalışıyor
BAUDCON1.0 = 0 ' Asenkron modda 1 = Otomatik Baud modu etkinleştirildiğinde Algılama ( otomatik baud tamamlandığında temizler )
               ' 0 = Otomatik Baud Algılama modu devre dışı 
                             
'-------------------------- VERİCİ DURUM VE KONTROL AYARLARI ------------------------  
TXSTA1.7  =  1 ' Asenkron Modda işe yaramaz
TXSTA1.6  =  0 '1 = 9-bit iletimi seçer , 0 = 8-Bit iletimi seçer
TXSTA1.5  =  1 '1 = İletim etkin, 0 = İletim kapalı
TXSTA1.4  =  0 '1 = Senkron (eşzamanlı) ,  0 = Asenkron (eşzamansız)
TXSTA1.3  =  0 'Asenkron modda 1 = Bir sonraki iletim Sync sonunu gönder , 0 = Sync Arası İletim tamamlandı  
TXSTA1.2  =  0 'Asenkron modda 1 = Yüksek hız  0 = Düşük hız
TXSTA1.1  =  0 'Kayıt durumu   1 = boş , 0 = dolu
TXSTA1.0  =  0 'Geçersiz bit, Adres / veri biti veya bir eşlik biti olabilir

'-------------------------- GENEL KESME AYARLARI ------------------------  
PIR1.7 = 0 ' Geçersiz bit
PIR1.6 = 0 ' A/D çevrim kesme biti   1 = Aktif , 0 = pasif 
PIR1.5 = 1 ' EUSART1 Alma (Rx) Kesme Bayrak bit    1= RCREG1 okunduğu zaman temizlenir, 0= EUSART1 tamponu boş alıyorsunuz,
PIR1.4 = 1 ' EUSART1 İletim  (Tx) Kesme Bayrak bit 1 = EUSART1 iletim tampon , TXREG1 , boş ( TXREG1 yazıldığı zaman temizlenir )
           ' 0 = EUSART1 ileti (Tx) tampon dolu
PIR1.3 = 0 ' Master Senkron Seri Port1 Kesme Bayrak biti 1 = Iletim alımı tamamlandı , 0 = Iletmek almak için bekliyor
PIR1.2 = 0 ' Capture mode ise
           '1= TMR1 kayıt yakalama oluştu 0 = TMR1 kayıt yakalama oluşmaz
           ' Compare mode ise
           
PIR1.1 = 0 '
PIR1.0 = 0 '
 
'-------------------------- GENEL KESME AYARLARI ------------------------ 
       '76543210
PIR2 = %00000000
PIR3 = %00000000
PIR4 = %00000000
PIR5 = %00000000

'-------------------------- GENEL KESME AKTİF ETME AYARLARI ------------------------ 
PIE1.7 = 0 ' Geçersiz bit
PIE1.6 = 0 ' A/D Dönüştürücü Kesme izin verme biti   0 = A/D kesmesine izin verilmez
PIE1.5 = 1 ' EUSART1 bigi alındı Kesmesine izin verme biti , 0 = EUSART1 bilgi alındı kesmesine izin verilmez
PIE1.4 = 1 ' EUSART1 bigi gönderme Kesmesine izin verme biti  , 0 = EUSART1 KESME Bit TX etkinleştirme kapalı
PIE1.3 = 0 ' Senkronize  Seri Port1 Kesmesine izinverme  bit etkinleştirme 1 = MSSP1 kesme aktif , 0 = MSSP1 KESME pasif          '
PIE1.2 = 0 ' 1 = CCP1 Kesme aktif , 0 = CCP1 KESME pasif 
PIE1.1 = 0 ' 1 = TMR2 KESME AKTİF 0 = TMR2 KESME PASİF
PIE1.0 = 0 ' 1= TMR1 KESMES BAYRAĞI SIFIRLANDI

'-------------------------- ÇEVRESEL KESME AKTİF ETME AYARLARI ------------------------ 
IPR1.7 = 0 ' Geçersiz
IPR1.6 = 1 ' A/D 1 = Dönüştürücü Kesme Öncelik
IPR1.5 = 1 ' EUSART1 Alıcı kesme önceliği 1 = HIGH öncelik , 0 = LOW öncelik
IPR1.4 = 1 ' EUSART1 Verici kesme önceliği 1 = HIGH öncelik , 0 = LOW öncelik
IPR1.3 = 0 ' Master Senkron Seri Port 1 Kesme Öncelik biraz  1 = High öncelik , 0 = Low öncelik
IPR1.2 = 0 ' CCP1 kesme önceliği   1 = High öncelik , 0 = Low öncelik
IPR1.1 = 0 'TMR2 Kesme önceliği  1 = High öncelik , 0 = Low öncelik
IPR1.0 = 0 'TMR1 TMR1 Taşma Kesme Öncelik 1 = High öncelik , 0 = Low öncelik

'-------------------------- ÇEVRESEL KESME ÖNCELİK AYARLARI ------------------------ 
       '76543210
IPR2 = %00000000
IPR3 = %00000000
IPR4 = %00000000
IPR5 = %00000000

'------------------------------ KIYASLAYICI AYARLARI  ------------------------------
CM1CON0.7 = 0 ' COMPARATOR İPTAL
' ------------------------------ TMR0 KESME AYARLARI ------------------------------- 
T0CON.7 = 1' TMR0 1 = AÇIK , 0 = KAPALI
T0CON.6 = 0' TMR0 1 = 8 BIT , 0 = 16 BIT
T0CON.5 = 0' TMR0 GİRİŞ PİNİ 1 = T0CKI , 0 = Dahili kaynak
T0CON.4 = 0' TMR0 KENAR BİTİ 1 = Yükselen kenar tetiklemesi , 0 = Düşen kenar tetiklemesi
T0CON.3 = 0' TMR0 ÖN BÖLÜCÜ ATAMA BİTİ 1 =  
T0CON.2 = 0' 111 1/256   100 1/32   001 1/4
T0CON.1 = 0' 110 1/128   011 1/16   000 1/2
T0CON.0 = 0' 101 1/64    010 1/8
              
''       76543210
'T0CON= %10000000
'' ------------------------------ KESME KONTROL AYARLARI ----------------------------
INTCON.7 = 1 'bütün kesmelere izin verme biti  1=KESMELER AKTİF
INTCON.6 = 0 'ÇEVRESEL KESMELER 1= AKTİF
INTCON.5 = 1 'TMR0 taşma kesmesi 1 = AKTİF 
INTCON.4 = 0 'INT0 kesmesi 1 = AKTİF 
INTCON.3 = 0 'PORTB4-7 değişim kesmesi 1 = AKTİF
INTCON.2 = 1 'TIMER0 ZAMAN AŞIMI 1 = AKTİF  
INTCON.1 = 0 'PORTB0 DIŞ KESME 1 = AKTİF  
INTCON.0 = 0 'PORTB4-7 DEĞİŞİM KESMESİ 1 = AKTİF
''        '76543210
''INTCON =%11100000

INTCON2 = %10000000 ' Portb pull up 1 = pasif , 0= aktif

''------------------------------ KESME KONTROL AYARLARI ----------------------------

PIE1.6 = 0'ADC KESMESİ AKTİF      1 = AKTİF
PIE1.5 = 1'EUSART1 ALICI KESMESİ  1 = AKTİF
PIE1.4 = 1'EUSART1 VERİCİ KESMESİ 1 = AKTİF
PIE1.3 = 0'MSSP1 KESMESİ AKTİF    1 = AKTİF
PIE1.2 = 0'CCP1 KESMESİ AKTİF     1 = AKTİF
PIE1.1 = 0'TMR2 KESMESİ AKTİF     1 = AKTİF
PIE1.0 = 1'TMR1 TAŞMASI AKTİF     1 = AKTİF
        '76543210
'PIE1  = %00110000 

'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
'-------------------------- Ports settings ---------------------------------
                                                                   
PortB_Pullups = OFF   ' Disable PORTB pullup resistors
Declare  All_Digital = OFF ' Do not set analogue pins to digital
Symbol RBIF = INTCON.0 ' RB Port Interrupt Flag
Symbol INTF = INTCON.1 ' RB0 External Interrupt Flag
Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol RBIE = INTCON.3 ' RB Port Change Interrupt Enable
Symbol INTE = INTCON.4 ' RB0 External Interrupt Enable
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7  ' Global Interrupt Enable
                                                                   
'-------------------------- PIE1, PIR1 ----------------------------------------------
                                                                   
Symbol TXIE = PIE1.4   ' USART Transmit Interrupt Enable
Symbol TXIF = PIR1.4   ' USART Transmit Interrupt Flag
                                                                   
dim deger as byte
Dim SAYAC As Byte
Dim SN As Byte
Dim DAK As Byte
                            
Clear                           ' BÜTÜN DEĞİŞKENLERİ TEMİZLE                                       
'-------------------------- USART interrupt settings -------------------
TXIE = 1    ' USART transmit interrupt enable 
PEIE = 1    ' Peripheral interrupt enable
GIE = 1    ' Global interrupt enable
                                                                   
ON_INTERRUPT goto  Int_Label
Goto  MainProgram
                                                                   
'-------------------------- Interrupt--------------------------
                                                                   
Int_Label:
Context Save 
hserout [#deger]                  '                                  
                                                                   
Context Restore                ' Return from the interrupt subroutine 
                                                                   
'-------------------------- Main program -------------------------
                                                                   
MainProgram:
print at 1,1,"deger = ",#deger                                                                  
                                                                   
                                                                   
Goto  MainProgram 
end
' <<<<<<<<<<<<<<<<<<<<<<<<<<<<< TIMER0 KESME >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Disable 
KESME:
SAYAC=SAYAC+1 
If SAYAC=99 Then
 SAYAC=0 
 SN=SN+1 
 If SN=60 Then 
 SN=0 
 DAK=DAK+1 
 If DAK=60 Then 
 DAK=0

EndIf 
EndIf
EndIf 

INTCON.2=0 
Resume
Enable 

ferit06

programının tamamnı incelemedim ama şurasına takıldım;

TRISA=%00111111 :PORTA=0
TRISB=%00000000 :PORTB=0
TRISC=%10000000 :PORTC=0
TRISD=%00000000 :PORTD=0
TRISE=%00000001 :PORTE=0

Burada tris değerlerini önce verip sonradan PORT lara değer vermeniz PORTun tamanının çıkış olarak değerlendirilmesine yol açar.


Önce PORT değerlerini verin sonra TRIS değerlerini verin.

mikro29

@ferit06 hocam usart kesmesini engellermi ?
Denedim değişen bişey olmadı

Maxim

22K ve 46K serisinde birkaç tane seri çıkış var
onlar ekran ile çakışıyor olmasın

ferit06

#4
kesme programını kontrol et.
Declare FSR_Context_Save = On

demişsin ama



ON_INTERRUPT goto  Int_Label


Int_Label:
Context Save
hserout [#deger]                  '                                 
                                                                   
Context Restore                ' Return from the interrupt subroutine
                                                                   

şeklinde kullanmışsın.

Bazı PIC lerde hardware interrupt kullanıldığında  otomatik context save işlemi yapılıyor. (PIC 18F1827 ve serisi gibi)  İşlemcinin data sheetsini tamamen incelemediğim için bunda da varmı bilmiyorum.


On_Hardware_Interrupt GoTo Int_Label
goto main

Int_Label:
'Context Save
hserout [#deger]                  '                                 
                                                                   
'Context Restore                ' Return from the interrupt subroutine

retfie

main:
şeklinde kullanıp denermisin?

interrupt kısmı ana programdan önceye gelecek...

ayrıca
STVR = On ' Stack Overflow Reset enable    demişsiniz stack düzeyi belirlediniz mi?

(Declare Stack_Size = 20 ' Create a small stack capable of holding 20 bytes gibi)


programızın tamamına bakmamıştım.

sondaki KESME: bölümü ne işe yarıyor? ( Buraya ne zaman yönlendirme yapıyorsunuz?)

Kesmelerin ayrı ayrı yönlendirmesini nasıl yapıyorsunuz?

mikro29

#5
Dediğiniz gibi denedim yine olmadı

kesme kısmını ekleyince ekran yok ama usart var. örnek kod verebilirmisiniz
STVR = On şimdi off yaptım , ikinci kesme zaman için programın amacı belli sürede gelen analog verileri pc aktarmak, analog verileri almada problem yok tmr0 dada problem yok usart aktif olunca çalışmıyor.

On_Interrupt GoTo Int_Label
GoTo  MainProgram
                                                                   
'-------------------------- Interrupt--------------------------
                                                                   
Int_Label:
'''Context Save 
HSerOut [#deger]                  '                                  
Retfie                                                                   
'Context Restore                ' Return from the interrupt subroutine


ete

HSEROUT kesme oluşturmaz.
HSERIN komutu kesme oluşturur. Yani RX pinine bir data gelirse kesme oluşur. Yoksa bekler durur.
Kesme içinde RCREG registeri boşaltılmalı böylece kesme bayrağı sıfırlanır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mikro29

ETE hocam sizin forumda da aynı sordum çok hatalarım var onları düzeltmeye çalışıyorum,gerçek ortamda deniyorum 16 MHZ kristal kullanıyorum 64 MHZ sistemi çalıştırmam lazım lojik analizör ile kontrol ediyorum. Yapmak istediğimi tam anlatayım hocam picin 6 analog kanalından veri alıp glcd yazdırıp aynı anda pc' ye aktarmak. Yardımlarınızı bekliyorum. Teşekkürler


F.T

Hocam aldığın analog verileri pc ye göndermen için usart kesmesine gerek yok.veriyi al tmr0 kesmesi ile gönder.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

mikro29

tmr0 kesmesi ilede denedim yavaşlatıyor hocam (büyük bir ihtimal yanlış yapıyorum) kod parçası olsa

F.T

Gönderme kodu süresi ne kadarsa yaklaşık kesmeyi o süreye göre ayarlarsın.işlemci hızınıda en üst düzeye ayarla.bir sorun olmaması lazım.proteuse ve örnek kodu koyarsan daha fazla yardım alırsın.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

AKIL

biraz toparlarsak
'-------------------------------------------------------------------------------
On_Hardware_Interrupt GoTo kesme   
'-------------------------------------------------------------------------------
kesme:
        Context Save                                   '  
'        If RC1IE  = 1 Then   'PIE1.5   alıcı interrupt ayarlı ise
        If RC1IF =1 Then usart_ALICIkesme 'PIR1.5 'USART Alma Tampon  Yeni bir mesaj aldı 

'       If TX1IE = 1 Then     'PIE1.4  interruptan gonderme  yapılacak ayarladık ise
        If TX1IF  = 1 Then usart_VERICIkesme 'PIR1.4 

        GoTo INTSON
'----------- RECEIVE BUFFER'DA BILGI VARSA ALMA ISLEMLERI
usart_ALICIkesme:
        If OERR Or FERR Then  'RCSTA.1 Or RCSTA.2            
        CREN  = 0             'RCSTA.4
        EndIf								
'        HSerIn [Rx_buf]      'dısardan alınan tip   
        Rx_buf = RCREG        
        RC1IF =0              'USART Alma Tampon  Yeni bir mesaj A AÇMAK İCİN SİL 
        GoTo INTSON
''-------- dısarıda gonderilmeyecekte kesme ile gonderilecekse GÖNDERME ISLEMLERI
usart_VERICIkesme:
'        HSerOut [Tx_buf]    'dısardan gonderilen tip 
'        TXREG =Tx_buf        'dısarıda  atanan deger       
        TX1IF = 0            'PIR1.4 
        TX1IE = 0            'PIE1.4
        GoTo INTSON
'===================================================== 
INTSON:
        Context Restore             'Exit ISR and re-enable interrupts 
'-------------------------------------------------------------------------------

ete

Gönderme işlerinde kesme kullanmanın bir anlamı yok. Çünki kontrol sizin elinizdedir. Ne zaman gönderme yapacağınıza siz karar verirsiniz. Usart kullanılabilir bu iş için kullanılmalıda ama kesme ile uğraşmanın bir anlamı yok. Yapılacak işleri sıraya sokup uygun kodu yazmaktan başka yapılacak iş yok bence.
6 kanal analog değeri oku
Okunan değerleri HSEROUT ile yolla.
İlgili değerleri GLCD ye aktar
Tekrar bu döngüyü tekrarla.
Hepsi bu. Konu proton olunca elim kolum bağlanıyor maalesef.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

AKIL

ete hocam çoklu (oto paket ) gönderimlerde kesme işe yarıyor şöyleki siz basında durmuyorsunuz siz yola bırakıp gidiyorsunuz işlerinizi yapıp tekrar geldiğinizde sıradakini bırakıp tekrar işinize bakıyorsunuz