usart iletisimi

Başlatan selvi, 03 Aralık 2008, 21:35:43

selvi

asagidaki program alici kismi.usart donanim kesmesini kullandim.ayriyeten rb0 kesmesi var.program simulasyonda calisiyor.fakat kart uzerinde calismiyor.kesme kisminda HSerIn 1,BIR,[Wait("ARA"),Dec AL] gecikme 5,10 ve gecikme kaldirma 3 durumda da calismadi.
 pbp ile ayni programi denemisti.bazi sorunlar cikiyordu.en son protonla yaptigim hic calismadi.donanim kesmesini ilk defa kullandim.forumu inceledim.asagidaki sekilde yazdim.

Device 16F628A
XTAL 4
Config XT_OSC,MCLRE_OFF,LVP_OFF,WDT_OFF,PWRTE_ON,BODEN_OFF

Declare HSERIAL_BAUD=2400   'MAXIBOOST
Declare HSERIAL_RCSTA=$90h  'MAXIBOOST
Declare HSERIAL_TXSTA=$20h  'MAXIBOOST
Declare HSERIAL_CLEAR=On    'MAXIBOOST
Declare HSERIAL_SPBRG=25    'MAXIBOOST
 
CMCON=7           '16F628 de komparatör pinleri iptal hepsi giriþ çýkýþ
PORTB_PULLUPS =0
Symbol GIE  =INTCON.7   'genel interruptlarý açýyor
Symbol PEIE =INTCON.6   'peripheralinterruptlarý açýyor
Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
Symbol INTE=INTCON.4    'RB0  interrupt enable bit
Symbol INTF=INTCON.1    'RB0  interrupt flag bit

On_Interrupt GoTo KESME 
RCIE=1
PEIE=1
INTE=0
GIE=1 

TRISB=%00000011
TRISA=%00100000
PORTB=0

 AL     VAR  Byte  
 SAYI   VAR  Byte  
 TEMP   VAR  Byte
SAYAC  VAR  Byte
 I      VAR  Byte
 M      VAR  Byte
 K      VAR  Byte
 A      VAR  Word
 B      VAR  Word
 RB     VAR  Bit
 US     VAR  Bit
 I=0
 M=0
 K=0
 A=0
 B=0
 RB=0
 US=0
 SAYI=0
 TEMP=0
 SAYAC=0
 AL=0
 LOOP:
If RB=1 Then
DelayMS 9
If PORTB.0=1 Then
SAYI=SAYI+1
If SAYAC=SAYI Then
PORTB.3=1 
DelayMS 500
PORTB.3=0
SAYI=0
EndIf
PORTB.6=1
DelayMS 400
PORTB.6=0
EndIf
RB=0
EndIf
If US=1 Then
US=0
       If i=0 And AL=73 Then
        I=I+1
       EndIf
       If I=1 And AL=111   Then
	       I=I+1
       EndIf
       If  I=2 And AL=41   Then
        I=I+1
       EndIf
       If I=3 And AL=217 Then
        I=I+1
       EndIf
       If I=4 And AL=0 Then
        I=I+1
        PORTB.4=1
        DelayMS 500
        PORTB.4=0
        INTE=0
       EndIf
KAPAT:   
        If M=0 And AL=233 Then
          M=M+1
          I=0
           EndIf
       If M=1 And AL=3 Then
        M=M+1
        I=0
         EndIf
       If M=2 And AL=79 Then
        M=M+1
        I=0
         EndIf
       If M=3 And AL=117 Then
        M=M+1
        I=0
       EndIf
       If M=4 And AL=61 Then
        PORTB.6=1
        DelayMS 500
        PORTB.6=0
       I=0       
       M=0
       INTE=0
       EndIf
       If i=5 And AL<>0  Then
       SAYAC=AL
       INTE=1
       For K=0 To 6
         PORTB.6=1   
         DelayMS 100
         PORTB.6=0
         DelayMS 100
         Next K  
       EndIf
       EndIf
GoTo LOOP
;---------USART KESME-----------
Disable
KESME:
Context SAVE 'sistem yazmaçlar? yedeklenir 
GIE=0 'tüm interruptlar? kapat yani INTCON.7=0
If INTF=1 Then
RB=1
INTF=0 'kesme bayrag(? s?f?rlanacak)
GoTo CIK
EndIf
AL=0
HSerIn 1,BIR,[Wait("ARA"),Dec AL]
TEMP=RCREG
RCREG=0
TEMP=0
US=1
GoTo CIK
BIR:US=0
CIK:
Context Restore ' yedeklenen deg(erler geri çag(?r?l?p tekrar ana programa dönülür.
GIE=1 'Yani INTCON.7=1 kesmeleri açt?k.
Resume
Enable 
End
Yaşam anlamlandırıldıkça kutsaldır....