tek islemcide iki tane seri haberlesme pini

Başlatan selvi, 30 Aralık 2013, 22:24:27

selvi

   16f628 islemcisinde iki tane pini haberlesme icin kullanmak istiyorum.bazi denemeler yaptim sonuc alamadim.kodlar asagidaki sekildedir.

tx:
@ DEVICE pic16F628 'islemci 16F628
@ DEVICE pic16F628, WDT_OFF 'Watch Dog timer kapali 
@ DEVICE pic16F628, PWRT_ON 'Power on timer acik 
@ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapali
@ DEVICE pic16F628, MCLR_ON 'MCLR pini kullanilmiyor 
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanilmayacak            
@ DEVICE pic16F628, BOD_OFF
 
CMCON=7           '16F628 de komparatör pinleri iptal hepsi giris çikis
OPTION_REG.7=1    'Dahili pull-up lar pasif yapildi
TRISB=%00010000
TRISA=%11100111    '%00100100
PORTB=0
PORTA=0

SYMBOL UYAN=PORTB.1 

VER  VAR BYTE
VER1 VAR BYTE

CLEAR
PAUSE 200

START:  

      IF PORTA.0=0 THEN       
         UYAN=1:VER=100
         GOSUB DATA1
         PAUSE 150:UYAN=0 
          
        PORTB.7=1:PAUSE 50:PORTB.7=0        
        VER1=73
        GOSUB GONDER
       endif   
       
      IF PORTB.4=0 THEN    'buton 
        VER1=142
        GOSUB GONDER
       endif 
       
       IF PORTA.6=0 THEN   
       UYAN=1:VER1=200
       GOSUB DATA1
       PAUSE 150:UYAN=0 

       PORTB.6=1:PAUSE 50:PORTB.6=0    
        VER1=4
        GOSUB GONDER
       endif 
      PAUSE 300
      
GOTO START 

GONDER:
SEROUT2 PORTA.3,84,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.3,84,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.3,84,["D","E","M",VER1]
SEROUT2 PORTA.3,84,["D","E","M",VER1]
SEROUT2 PORTA.3,84,["D","E","M",VER1]
RETURN

DATA1:
SEROUT2 PORTB.2,84,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTB.2,84,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTB.2,84,["D","E","M",VER]
SEROUT2 PORTB.2,84,["D","E","M",VER]
SEROUT2 PORTB.2,84,["D","E","M",VER]
RETURN

END


rx:
@ DEVICE pic16F628A 'islemci 16F628A 
@ DEVICE pic16F628A, WDT_OFF 'Watch Dog timer kapali 
@ DEVICE pic16F628A, PWRT_ON 'Power on timer acik 
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Protek kapali
@ DEVICE pic16F628A, MCLR_OFF 'MCLR pini kullanilmiyor 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanilmayacak            
@ DEVICE pic16F628A, BOD_OFF
 
CMCON=7           '16F628 de komparatör pinleri iptal hepsi giris çikis
OPTION_REG.7=1    'Dahili pull-up lar pasif yapildi
TRISB=%00100010
TRISA=%00100000   '%00100000
PORTB=0
PORTA=0
PORTA.0=0

SYMBOL LED =PORTA.0   
SYMBOL ROLE1=PORTA.1

AL  VAR BYTE
AL1 VAR BYTE
K   VAR BYTE
US  VAR BIT
CLEAR
PAUSE 200

BASLA:
SERIN2 PORTB.5,84,100,GIT,[WAIT("DEM"),AL]
 GIT:
SerIn2 PORTB.1,84,[WAIT("DEM"), AL1]

IF AL=100 THEN
   PORTB.4=1
ENDIF

IF AL=200 THEN
   PORTB.4=0
ENDIF

IF AL1=73 THEN       
US=1
       FOR K=0 TO 4
         LED=1:PAUSE 100:LED=0:PAUSE 100  
       NEXT K 
LED =1:PAUSE 500:LED=0 
ENDIF

IF US=1 THEN
IF AL1=142 THEN      
ROLE1=1:LED =1:PAUSE 500:LED=0:PAUSE 1500:ROLE1=0 
ENDIF

IF AL1=4 THEN     
us=0
LED =1:PAUSE 500:LED=0:PAUSE 500
LED =1:PAUSE 500:LED=0 
ENDIF
ENDIF

GOTO BASLA
END

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

camby

nasıl bir haberleşme ? asenkron mu senkron mu spi mi i2c mi ? seri haberleşmenin çok çeşidi var ..

selvi

  tx ve rx kodlarini verdim.serin,serout seklinde iletisim.
Yaşam anlamlandırıldıkça kutsaldır....

selimkoc

PIC16F628 mikrodenetleyicisinde donanım USART modülü vardır. Dolayıs ile problemsiz ve kararlı bir sekilde USART üzerinden (Tx- RB2, Rx- RB1) haberleşme yapabilirsin. Ancak her iki sistemin haberleşme hızları aynı olmak zorundadır.

selvi

tx kisminda: porta.3 ve portb.2 pinlerini seri haberlesme icin cikis pini olarak kullandim.
rx kisminda:portb.1 ve portb.5 pinlerini seri haberlesme icin giris pini olarak kullandim.
  zaten  tx ve rx kodlarini vermistim.o kodlarda haberlesme biciminmi vermisim.
Yaşam anlamlandırıldıkça kutsaldır....