proton programıyla usart kesmesı

Başlatan selvi, 08 Temmuz 2012, 08:50:28

selvi

Merhaba arkadaslar ilk kez protonla usart kullanarak l6f628 ile basit bir alıcı ve verici yapmak istiyorum . Bende olan ve formlarda olan notlara baktıım ama
tam olarak sorunu bulamadım. Yani yazdıgım bir program var ama herhangi bir haberlesme olayı gelişmiyor onun için acaba l6f 628 ile usart
kesmesinin ayarınımı yapamıyorum tam olarak sorunu bulamıyorum.Acaba protonla  usart kesmesini kullanarak basıt bir alıcı ve verici
programı yanında olan var mı?
Yaşam anlamlandırıldıkça kutsaldır....

pcb

#1
Her iki alıcı-verici devresinde BRGH = 0 veya 1 aynı olmasına , işlemci hızına göre SPBRG = 16 hesaplamasına dikkat edin , bu programı 2 işlemci haberleşmesi için kullanmıştım , arka arkaya 2 data alıyordu.

Device  = 16F628A
Xtal    =   20
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_OFF, WDT_OFF, LVP_OFF, MCLRE_OFF, HS_OSC

On_Interrupt    GoTo    GET_USART

    LCD_DTPin = PORTB.4
    LCD_RSPin = PORTA.1
    LCD_ENPin = PORTA.0
    LCD_Interface = 4
    LCD_Lines = 4                                 
    LCD_Type = 0
    Reminders = FALSE
    All_Digital = TRUE
    
    CMCON=%00000111         
    TRISA = %11111111
    TRISB = %11111111
'_______________________________________________________________                                               
 Rsout_Pin PORTB.7
 Rsout_Mode = TRUE
 Rsout_Pace = 10
 
'//////////////USART/////////////////
Declare Serial_Baud = 19200
Declare Hserial_RCSTA = %10010000 ' Enable serial port and continuous receive
Declare Hserial_TXSTA = %00100000
SPBRG = 16
Declare Hserial_Clear   =   On

Symbol RB0 = PORTB.0   ' Bi-directional I/O port
Symbol INT = PORTB.0   ' External interrupt input
Symbol RB1 = PORTB.1   ' Bi-directional I/O port
Symbol RX = PORTB.1    ' USART receive pin
'SYMBOL DT = PORTB.1    ' Synchronous data I/O
Symbol RB2 = PORTB.2   ' Bi-directional I/O port
Symbol TX = PORTB.2    ' USART transmit pin
Symbol CK = PORTB.2    ' Synchronous clock I/O
Symbol RB3 = PORTB.3   ' Bi-directional I/O port
Symbol RB4 = PORTB.4   ' Bi-directional I/O port
Symbol PGM = PORTB.4   ' Low voltage programming pin
Symbol RB5 = PORTB.5   ' Bi-directional I/O port
Symbol RB6 = PORTB.6   ' Bi-directional I/O port
Symbol T1OSO = PORTB.6 ' Timer1 oscillator output
Symbol T1CKI = PORTB.6 ' Timer1 clock input
Symbol RB7 = PORTB.7   ' Bi-directional I/O port
Symbol T1OSI = PORTB.7 ' Timer1 oscillator input
RB0=1
INT=0
RB1=0
RX=1
'DT=0
RB2=0
TX=1
CK=0
RB3=1
RB4=1
PGM=0
RB5=1
RB6=1
T1OSO=0
T1CKI=0
RB7=1
T1OSI=0

     
'USART RX
    Symbol RX9D = RCSTA.0 ' 9th bit of received data (Can be parity bit)
    Symbol OERR = RCSTA.1 ' Overrun Error Enable
    Symbol FERR = RCSTA.2 ' Framing Error Enable
    Symbol ADEN = RCSTA.3 ' Address Detect Enable
    Symbol CREN = RCSTA.4 ' Continuous Receive Enable
    Symbol SREN = RCSTA.5 ' Single Receive Enable
    Symbol RX9 = RCSTA.6  ' 9-bit Receive Enable
    Symbol SPEN = RCSTA.7 ' Serial Port Enable
    
    SPEN    =   1'Serial port enabled
    RX9     =   0'Selects 8-bit reception
    SREN    =   0'Asynchronous mode Don't care                    
    CREN    =   1'Asynchronous mode 1 = Enables continuous receive 
    ADEN    =   0'Asynchronous mode 8-bit (RX9=0)Unused in this mode
    FERR    =   0'No framing error
    OERR    =   0'No overrun error
    RX9D    =   0'9th bit of received data (Can be PARITY bit)
    
'USART TX
    Symbol TX9D = TXSTA.0 ' 9th bit of transmit data. Can be parity bit.
    TX9D    =   0   
    Symbol TRMT = TXSTA.1 ' Transmit Shift Register Status
    TRMT    =   0
    Symbol BRGH = TXSTA.2 ' High Baud Rate Select
    BRGH    =   0         ' DÜŞÜK HIZ
    Symbol SYNC = TXSTA.4 ' USART Mode Select
    SYNC    =   0  
    Symbol TXEN = TXSTA.5 ' Transmit Enable
    TXEN    =   1
    Symbol TX9 = TXSTA.6  ' 9-bit Transmit Enable
    TX9 =   0  
    Symbol CSRC = TXSTA.7 ' Clock Source Select
    CSRC    =   0  
    Symbol RCIE = PIE1.5   ' USART Receive Interrupt Enable
    RCIE    =   1
    Symbol RCIF = PIR1.5   ' USART Receive Interrupt Flag    
    RCIF    =   0        
   
'******************************************************************** 
        'INTCON
    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
    INTCON=%01000100 
    
'********************************************************************     
            'OPTION REG
    Symbol PS0 = OPTION_REG.0      ' Prescaler Rate Select
    Symbol PS1 = OPTION_REG.1      ' Prescaler Rate Select
    Symbol PS2 = OPTION_REG.2      ' Prescaler Rate Select
    Symbol PSA = OPTION_REG.3      ' Prescaler Assignment
    Symbol T0SE = OPTION_REG.4     ' TMR0 Source Edge Select
    Symbol T0CS = OPTION_REG.5     ' TMR0 Clock Source Select
    Symbol INTEDG = OPTION_REG.6   ' Interrupt Edge Select
    Symbol NOT_RBPU = OPTION_REG.7 ' PORTB Pull-up Enable
    OPTION_REG=%01000101 

'//////////////////////////////////////////////////////////////////////////////
'_____________PORT AYAR_____________________________
Input PORTA
Input PORTB
'___________________________________________________

GoTo    BASLA
    
GET_USART:
        Clear RCIF
        
        HRSIn   Y
        HRSIn   A
        
BASLA:  
        GIE =   1 

        
GoTo    BASLA         

Maxim

hocam bu senin yazılımda gönderme için Y ve A değişkenlerini kullanmışsın örnek olarak
tanımlamasını yapmamışsın önemli değil

benim sormak istediğin transmit kısmı
onun için ne yapmak gerekiyor, nasıl olacak o ?

birde çalıştırınca hata alıyorum
proteusta "stack overflow pushing returning adress of interrupt"

selvi

#3
  pcb hocam cevabınız için teşekkürler tam olarak anlayamadım onun için yazdığım programı gönderiyorum.
belki bu daha anlaşılır olur.
verici kısmı..
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 05.07.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F628
Xtal 4
Config INTRC_OSC_NOCLKOUT,MCLRE_OFF,LVP_OFF,WDT_OFF,PWRTE_ON,BODEN_OFF
'===================================================================
Declare Hserial_Baud=2400 
Declare Hserial_RCSTA=$90h 
Declare Hserial_TXSTA=$20h 
Declare Hserial_SPBRG= 16
Declare Hserial_Clear   =   On

 CMCON=7     
 TRISB=%11010000
 PORTB=0
 TRISA =%00000011
 PORTA=0
                                                    
 Dim VER1 As Byte
 Dim VER2 As Byte
 Dim  I   As Byte
 Symbol UYANDIRMA=PORTB.0
 Symbol LED=PORTB.3
 Symbol BUTON1=PORTB.4
 Symbol BUTON2=PORTB.6
 DelayMS 200                                                   
 VER1=0:GoSub GONDER 
 
 BASLA:
 LED=0
 If BUTON1=0 Then
 VER1=11
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 
 GoTo BEKLE
 EndIf
 
 If BUTON2=0 Then
 VER1=21
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 GoTo BEKLE
 EndIf
 GoTo BASLA
 
 BEKLE:
 For I=0 To 100
 DelayMS 5
 Next I 
 
 GoTo BASLA
 GONDER:
  HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl
 HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl  
HSerOut ["A","R","A",VER1] 
HSerOut ["A","R","A",VER1]  
Return
End


alıcı kısmı..
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 05.07.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F628
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_OFF, WDT_OFF, LVP_OFF, MCLRE_OFF, HS_OSC
 Xtal 4
' --------------------------- haberlesme  parametreleri----------------------------------------------------
Declare Hserial_Baud=2400 
Declare Hserial_RCSTA=$90h 
Declare Hserial_TXSTA=$20h 
Declare Hserial_SPBRG= 16
Declare Hserial_Clear   =   On

Symbol GIE  =INTCON.7   'genel interruptları açiyor
Symbol PEIE =INTCON.6   'peripheral interruptları açiyor
Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
 On_Interrupt    GoTo    KESME
 OPTION_REG=%10000101    '1/64
 CMCON=7     'Dahili pull-up lar pasif yapildi    
 TRISB=%00000010
 PORTB=0
 TRISA =%00000000
 PORTA=0
  Symbol LED=PORTA.3                    
 Symbol LAMBA=PORTA.2
  Dim AL   As Byte
 Dim I     As Byte
  Dim temp As Byte
 DelayMS 200
 RCIE=1: PEIE=1:GIE=1
BASLA:
  If  AL=11 Then   'Buton1 e basılmış ise SART=1 yapılıyor.
        LED=1
        GoSub BIRSN         
    EndIf
    If AL=21 Then  'Buton2 ye basılmış ise
       LED=1:LAMBA=1
       GoSub BIRSN 
    EndIf
    GoTo BASLA 
 BIRSN:
    For I=0 To 10000
     DelayUS 5
    Next 
    Return
  Disable
KESME:
GIE=0 
HSerIn 1,CIK,[Wait("ARA"),AL ]
temp=RCREG
CIK: 
RCIF=0  
GIE=1     'Yani INTCON.7=1 kesmeleri açtik.
Resume                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
Enable 
End










Yaşam anlamlandırıldıkça kutsaldır....

pcb

#4
ALICI (RX)

Device  = 16F628A
Xtal    =   20
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_OFF, WDT_OFF, LVP_OFF, MCLRE_OFF, HS_OSC

On_Interrupt    GoTo    GET_USART

    LCD_DTPin = PORTB.4
    LCD_RSPin = PORTA.1
    LCD_ENPin = PORTA.0
    LCD_Interface = 4
    LCD_Lines = 4                                 
    LCD_Type = 0
    Reminders = FALSE
    All_Digital = TRUE
    
    CMCON=%00000111         
    TRISA = %11111111
    TRISB = %00000010
'_______________________________________________________________                                               
 Rsout_Pin PORTB.7
 Rsout_Mode = TRUE
 Rsout_Pace = 10
 
'//////////////USART/////////////////
Declare Serial_Baud = 9600
Declare Hserial_RCSTA = %10010000 ' Enable serial port and continuous receive
Declare Hserial_TXSTA = %00100000
SPBRG = 33
Declare Hserial_Clear   =   On

Symbol RB0 = PORTB.0   ' Bi-directional I/O port
Symbol INT = PORTB.0   ' External interrupt input
Symbol RB1 = PORTB.1   ' Bi-directional I/O port
Symbol RX = PORTB.1    ' USART receive pin
'SYMBOL DT = PORTB.1    ' Synchronous data I/O
Symbol RB2 = PORTB.2   ' Bi-directional I/O port
Symbol TX = PORTB.2    ' USART transmit pin
Symbol CK = PORTB.2    ' Synchronous clock I/O
Symbol RB3 = PORTB.3   ' Bi-directional I/O port
Symbol RB4 = PORTB.4   ' Bi-directional I/O port
Symbol PGM = PORTB.4   ' Low voltage programming pin
Symbol RB5 = PORTB.5   ' Bi-directional I/O port
Symbol RB6 = PORTB.6   ' Bi-directional I/O port
Symbol T1OSO = PORTB.6 ' Timer1 oscillator output
Symbol T1CKI = PORTB.6 ' Timer1 clock input
Symbol RB7 = PORTB.7   ' Bi-directional I/O port
Symbol T1OSI = PORTB.7 ' Timer1 oscillator input
RB0=1
INT=0
RB1=0
RX=1
'DT=0
RB2=0
TX=1
CK=0
RB3=1
RB4=1
PGM=0
RB5=1
RB6=1
T1OSO=0
T1CKI=0
RB7=1
T1OSI=0

     
'USART RX
    Symbol RX9D = RCSTA.0 ' 9th bit of received data (Can be parity bit)
    Symbol OERR = RCSTA.1 ' Overrun Error Enable
    Symbol FERR = RCSTA.2 ' Framing Error Enable
    Symbol ADEN = RCSTA.3 ' Address Detect Enable
    Symbol CREN = RCSTA.4 ' Continuous Receive Enable
    Symbol SREN = RCSTA.5 ' Single Receive Enable
    Symbol RX9 = RCSTA.6  ' 9-bit Receive Enable
    Symbol SPEN = RCSTA.7 ' Serial Port Enable
    
    SPEN    =   1'Serial port enabled
    RX9     =   0'Selects 8-bit reception
    SREN    =   0'Asynchronous mode Don't care                    
    CREN    =   1'Asynchronous mode 1 = Enables continuous receive 
    ADEN    =   0'Asynchronous mode 8-bit (RX9=0)Unused in this mode
    FERR    =   0'No framing error
    OERR    =   0'No overrun error
    RX9D    =   0'9th bit of received data (Can be PARITY bit)
    
'USART TX
    Symbol TX9D = TXSTA.0 ' 9th bit of transmit data. Can be parity bit.
    TX9D    =   0   
    Symbol TRMT = TXSTA.1 ' Transmit Shift Register Status
    TRMT    =   0
    Symbol BRGH = TXSTA.2 ' High Baud Rate Select
    BRGH    =   0         ' DÜŞÜK HIZ
    Symbol SYNC = TXSTA.4 ' USART Mode Select
    SYNC    =   0  
    Symbol TXEN = TXSTA.5 ' Transmit Enable
    TXEN    =   1
    Symbol TX9 = TXSTA.6  ' 9-bit Transmit Enable
    TX9 =   0  
    Symbol CSRC = TXSTA.7 ' Clock Source Select
    CSRC    =   0  
    Symbol RCIE = PIE1.5   ' USART Receive Interrupt Enable
    RCIE    =   1
    Symbol RCIF = PIR1.5   ' USART Receive Interrupt Flag    
    RCIF    =   0        
   
'******************************************************************** 
        'INTCON
    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
    INTCON=%01000100 
    
'********************************************************************     
            'OPTION REG
    Symbol PS0 = OPTION_REG.0      ' Prescaler Rate Select
    Symbol PS1 = OPTION_REG.1      ' Prescaler Rate Select
    Symbol PS2 = OPTION_REG.2      ' Prescaler Rate Select
    Symbol PSA = OPTION_REG.3      ' Prescaler Assignment
    Symbol T0SE = OPTION_REG.4     ' TMR0 Source Edge Select
    Symbol T0CS = OPTION_REG.5     ' TMR0 Clock Source Select
    Symbol INTEDG = OPTION_REG.6   ' Interrupt Edge Select
    Symbol NOT_RBPU = OPTION_REG.7 ' PORTB Pull-up Enable
    OPTION_REG=%01000101 

'//////////////////////////////////////////////////////////////////////////////
'_____________PORT AYAR_____________________________
Input PORTA
Input PORTB
'___________________________________________________
Dim Y As Word
Dim A As Word
Dim C As Word
Clear C
GoTo    BASLA
    
GET_USART:
        Clear RCIF
        
        HRSIn   C
        
        If C = 100  Then 
            Set PORTB.4
        Else
            Low PORTB.4
        EndIf
        
BASLA:  
        GIE =   1 
        
        DelayMS 100
GoTo    BASLA     


VERICI (TX)

Device  = 16F628A
Xtal    =   20
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_OFF, WDT_OFF, LVP_OFF, MCLRE_OFF, HS_OSC

On_Interrupt    GoTo    GET_USART

    LCD_DTPin = PORTB.4
    LCD_RSPin = PORTA.1
    LCD_ENPin = PORTA.0
    LCD_Interface = 4
    LCD_Lines = 4                                 
    LCD_Type = 0
    Reminders = FALSE
    All_Digital = TRUE
    
    CMCON=%00000111         
    TRISA = %11111111
    TRISB = %00000010
'_______________________________________________________________                                               
 Rsout_Pin PORTB.7
 Rsout_Mode = TRUE
 Rsout_Pace = 10
 
'//////////////USART/////////////////
Declare Serial_Baud = 9600
Declare Hserial_RCSTA = %10010000 ' Enable serial port and continuous receive
Declare Hserial_TXSTA = %00100000
SPBRG = 33
Declare Hserial_Clear   =   On

Symbol RB0 = PORTB.0   ' Bi-directional I/O port
Symbol INT = PORTB.0   ' External interrupt input
Symbol RB1 = PORTB.1   ' Bi-directional I/O port
Symbol RX = PORTB.1    ' USART receive pin
'SYMBOL DT = PORTB.1    ' Synchronous data I/O
Symbol RB2 = PORTB.2   ' Bi-directional I/O port
Symbol TX = PORTB.2    ' USART transmit pin
Symbol CK = PORTB.2    ' Synchronous clock I/O
Symbol RB3 = PORTB.3   ' Bi-directional I/O port
Symbol RB4 = PORTB.4   ' Bi-directional I/O port
Symbol PGM = PORTB.4   ' Low voltage programming pin
Symbol RB5 = PORTB.5   ' Bi-directional I/O port
Symbol RB6 = PORTB.6   ' Bi-directional I/O port
Symbol T1OSO = PORTB.6 ' Timer1 oscillator output
Symbol T1CKI = PORTB.6 ' Timer1 clock input
Symbol RB7 = PORTB.7   ' Bi-directional I/O port
Symbol T1OSI = PORTB.7 ' Timer1 oscillator input
RB0=1
INT=0
RB1=0
RX=1
'DT=0
RB2=0
TX=1
CK=0
RB3=1
RB4=1
PGM=0
RB5=1
RB6=1
T1OSO=0
T1CKI=0
RB7=1
T1OSI=0

     
'USART RX
    Symbol RX9D = RCSTA.0 ' 9th bit of received data (Can be parity bit)
    Symbol OERR = RCSTA.1 ' Overrun Error Enable
    Symbol FERR = RCSTA.2 ' Framing Error Enable
    Symbol ADEN = RCSTA.3 ' Address Detect Enable
    Symbol CREN = RCSTA.4 ' Continuous Receive Enable
    Symbol SREN = RCSTA.5 ' Single Receive Enable
    Symbol RX9 = RCSTA.6  ' 9-bit Receive Enable
    Symbol SPEN = RCSTA.7 ' Serial Port Enable
    
    SPEN    =   1'Serial port enabled
    RX9     =   0'Selects 8-bit reception
    SREN    =   0'Asynchronous mode Don't care                    
    CREN    =   1'Asynchronous mode 1 = Enables continuous receive 
    ADEN    =   0'Asynchronous mode 8-bit (RX9=0)Unused in this mode
    FERR    =   0'No framing error
    OERR    =   0'No overrun error
    RX9D    =   0'9th bit of received data (Can be PARITY bit)
    
'USART TX
    Symbol TX9D = TXSTA.0 ' 9th bit of transmit data. Can be parity bit.
    TX9D    =   0   
    Symbol TRMT = TXSTA.1 ' Transmit Shift Register Status
    TRMT    =   0
    Symbol BRGH = TXSTA.2 ' High Baud Rate Select
    BRGH    =   0         ' DÜŞÜK HIZ
    Symbol SYNC = TXSTA.4 ' USART Mode Select
    SYNC    =   0  
    Symbol TXEN = TXSTA.5 ' Transmit Enable
    TXEN    =   1
    Symbol TX9 = TXSTA.6  ' 9-bit Transmit Enable
    TX9 =   0  
    Symbol CSRC = TXSTA.7 ' Clock Source Select
    CSRC    =   0  
    Symbol RCIE = PIE1.5   ' USART Receive Interrupt Enable
    RCIE    =   1
    Symbol RCIF = PIR1.5   ' USART Receive Interrupt Flag    
    RCIF    =   0        
   
'******************************************************************** 
        'INTCON
    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
    INTCON=%01000100 
    
'********************************************************************     
            'OPTION REG
    Symbol PS0 = OPTION_REG.0      ' Prescaler Rate Select
    Symbol PS1 = OPTION_REG.1      ' Prescaler Rate Select
    Symbol PS2 = OPTION_REG.2      ' Prescaler Rate Select
    Symbol PSA = OPTION_REG.3      ' Prescaler Assignment
    Symbol T0SE = OPTION_REG.4     ' TMR0 Source Edge Select
    Symbol T0CS = OPTION_REG.5     ' TMR0 Clock Source Select
    Symbol INTEDG = OPTION_REG.6   ' Interrupt Edge Select
    Symbol NOT_RBPU = OPTION_REG.7 ' PORTB Pull-up Enable
    OPTION_REG=%01000101 

'//////////////////////////////////////////////////////////////////////////////
'_____________PORT AYAR_____________________________
Input PORTA
Input PORTB
'___________________________________________________
Dim Y As Word
Dim A As Word
Dim C As Word
GoTo    BASLA
    
GET_USART:
        Clear RCIF
        
        HRSIn   Y
        HRSIn   A
        
BASLA:  
        GIE =   0
        C = 100
        HRSOut C
        DelayMS 1000
        C = 200
        HRSOut C
        DelayMS 100
GoTo    BASLA     



Proteus da simulasyon hazırladım rx - tx işlemci li , işinize yarar sanırım , TX program da c = 100 gönderirse alıcı led i yakıyor 100 den farklı ise led sönüyor basit olarak

şifre : 1346
http://apps.ttnetbulutu.com/d/?VXYTVYAY



mesaj birleştirme:: 08 Temmuz 2012, 15:08:28

@maxim
alıcı verici kısmı programda çalışıyor zaten birşey yapmana gerek yok.  TX program da kesmeyi kapatmışım , gie = 1 olacak , her 2 tarafta hem alıcı hem verici olarak çalışabilir ayarlanırsa , bu örnek sadece tek yönlü alıcı verici

Maxim

hocam teşekkürler

ben merak ediyorum
acaba HRSOut komutunu kullanmadan bu iş olamazmı ?

selvi

#6
proton ile hem usart kesmesi ve tmr0 kesmeyi beraber kullandim.soyle bir sorun cikiyor.vericide bilgi yolladigmda alicidaki led surekli yanik kaliyor.sanki surekli kesmeye gidiyor.bir suredir ugrastim bir turlu cozum bulamadim.ayni kesmeleri pbp ile yaptigimda sorunsuz calisiyor.

verici:
Device=16F628A
 Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, XT_OSC, CPD_OFF, WDT_OFF
 Xtal=4
' Declare OSC 4
Declare Hserial_Baud=9600 
Declare Hserial_RCSTA=$90h 
Declare Hserial_TXSTA=$24h 
Declare Hserial_SPBRG= 25
Declare Hserial_Clear   =   On

CMCON=7           '16F628 de komparatör pinleri iptal hepsi giriþ çýkýþ
OPTION_REG.7=1    'Dahili pull-up lar AKTÝF yapýldý
 TRISB=%11010000
 PORTB=0
 TRISA =%00000011
 PORTA=0

Dim VER1 As Byte
Dim VER2 As Byte

 Symbol UYANDIRMA=PORTB.0
 Symbol LED=PORTB.3
 Symbol BUTON1=PORTB.4
 Symbol BUTON2=PORTB.6
 Symbol BUTON3=PORTB.7
 Symbol BUTON4=PORTA.0
 Symbol BUTON5=PORTA.1
Clear
DelayMS 200

START:   
LED=0
 If BUTON1=0 Then
 VER1=11:VER2=72
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 DelayMS 200
 EndIf
 
 If BUTON2=0 Then
 VER1=21:VER2=82
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 DelayMS 200
 EndIf
 
 If BUTON3=0 Then
 VER1=31:VER2=92
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 DelayMS 200
 EndIf
 
 If BUTON4=0 Then
 VER1=41:VER2=92
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 DelayMS 200
 EndIf
 
 If BUTON5=0 Then
 VER1=51:VER2=112
 UYANDIRMA=1
 GoSub GONDER
 UYANDIRMA=0:LED=1
 DelayMS 200
 EndIf       
 DelayMS 100
 GoTo START
            
'-------------------------ALT PROGRAMLAR---------------------------------------

  GONDER:
 HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl
 HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl 
 HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl
 HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl 
 HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preambl 
HSerOut ["A","R","A",VER1,VER2] 
HSerOut ["A","R","A",VER1,VER2]
HSerOut ["A","R","A",VER1,VER2]  
Return
End


alici:
Device=16F628A
 Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_ON, XT_OSC, CPD_OFF, WDT_OFF
 Xtal=4
' Declare OSC 4
 Declare Hserial_Baud=9600 
Declare Hserial_RCSTA=$90h 
Declare Hserial_TXSTA=$24h 
Declare Hserial_SPBRG= 25
Declare Hserial_Clear   =   On

Symbol GIE  =INTCON.7   'genel interruptlarý açiyor
Symbol PEIE =INTCON.6   'peripheral interruptlarý açiyor                        

Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
 Symbol T0IE =INTCON.5    'TMR0  interrupt enable bit
 Symbol T0IF =INTCON.2    'TMR0  interrupt flag bit CLEAR
 
 
 On_Hardware_Interrupt GoTo KESME   'kesme olu?ursa KESME adl? etikete git
 OPTION_REG=%10000101    '1/64
 CMCON=7     'Dahili pull-up lar pasif yapildi    
 TRISB=%00000010
 PORTB=0
 TRISA =%00100000
 PORTA=0
 
 Symbol LED=PORTA.3                    
 Symbol LAMBA=PORTA.2
' Symbol BAS=PORTB.6

 Dim AL1   As Byte
 Dim AL2   As Byte
 Dim SART  As Bit
 Dim TEMP  As  Byte 
 Dim US    As  Bit
 Dim SURE  As Bit
 Dim Direk As Bit
 Dim DAK   As Byte
 Dim SN    As Byte
 Dim SAYAC As Word
 Dim  I    As Word 
  DelayMS 200
 
 Clear
 GIE=0:T0IE=0:RCIE=1:PEIE=1:GIE=1
LOOP:
 If US=1 Then  'veri alýnmýþ ise
   US=0
    If  AL1=11 And AL2=72 Then   'Buton1 e basýlmýþ ise SART=1 yapýlýyor.
        LED=1:SART=1
         For I=0 To 100
         DelayMS 5
         GIE=1
        Next
        LED=0         
    EndIf
    If SART=1 And AL1=21 And AL2=82 Then  'Buton2 ye basýlmýþ ise
       LED=1:T0IE=1:SURE=1
       DelayMS 200
       LED=0 
    EndIf
    If SART=1 And AL1=31 And AL2=92 Then 'buton3 e basýlmýþ ise
       LED=1:LAMBA=1
        For I=0 To 100
         DelayMS 5
        Next
       LED=0:LAMBA=0
    EndIf
    If SART=1 And AL1=51 And AL2=112 Then  'buton 4'e basýlmýþ ise
       LED=1:SART=0:INTCON.5=0:SURE=0:DAK=0:SN=0 
        For I=0 To 100
         DelayMS 5
        Next
       LED=0
    EndIf   
 EndIf
GoTo LOOP
;---------USART KESME-----------
KESME:
 Context  Save
GIE=0 'tüm interruptlar? kapat yani INTCON.7=0
If T0IF=1 Then
SAYAC=SAYAC+1
  If SAYAC=67 Then  	    '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
         SAYAC=0       	     'sayaç sifirlaniyor
         SN=SN+1       	    'saniye degeri bir artiriliyor
            If SN=60 Then  	   'saniye 60 olmus ise 1 dakika süre geçti o halde
               SN=0        	   ' saniye sifirlaniyor
               DAK=DAK+1   	   ' dakika degeri bir artiriliyor
                  If SURE>0 And SURE=DAK Then   'dakika 1 olmus  
                  LAMBA=1:LED=1:T0IE=0
                   For I=0 To 200
                  DelayMS 10
                    Next I
                  LAMBA=0:LED=0    
                     DAK=0:SN=0:SAYAC=0         	   ' dakika sifirlaniyor
                EndIf     
            EndIf
         EndIf 
BAK:                
T0IF=0 'kesme bayragi sifirlanacak                            
GoTo CIK
EndIf 
HSerIn 1,BIR,[Wait("ARA"),AL1,AL2]
TEMP=RCREG
RCREG=0
TEMP=0                                                                       
US=1
GoTo CIK
BIR:US=0
CIK:
RCIF=0
GIE=1 'Yani INTCON.7=1 kesmeleri açt?k.
Context Restore 
End



mesaj birleştirme:: 12 Temmuz 2012, 14:28:51

For I=0 To 40000
         DelayUS 2:DelayUS 2:DelayUS 2:DelayUS 2:DelayUS 2
        Next

gecikmeleri mikro duzeyinde yazinca led yanik kalmiyor.fakat bazen ust uste denemeler yaparken bazen alici hic bir bilgi almiyor.
Yaşam anlamlandırıldıkça kutsaldır....