Ynt: pc den seri port araç kontrolü

Başlatan ertunc_26, 23 Mart 2013, 19:04:57

ertunc_26


https://hotfile.com/dl/199555952/ee7d71e/Ekran_Alnts.PNG.html merhaba arkadaşlar bu resimde proteusada devremi krdum çalışıyorda ama kontrolü seri porttan yapmak istiyorum nasıl bir ekleme yapmalıyım devreye veya pic içine eğer yardım edebilecek arkadaşlar olursa programları ve isis dosyasınıda yükleyebilirim.

ziyaretci

#1
max232 ve 9 pin erkek konnektör 

max 232



 
  kesme olarak rs232 kesmesi

#use rs232(baud=9600, xmit=pin_b2, rcv=pin_b1, parity=N, stop=1)
 
 int veri_kayit[30];  // seri porttan gelen veriyi bu  1 byte lık diziye kayıt edeceğiz 
 int adres=0;          // bu değişkenide dizide adres belirleme olarak kullanacağız.

#int_rda
{ 
  disable_interrupts(int_rda);   // kesme bayrağını sıfırlıyoruz ki bir daha veri geldiğinde onuda           
                                                //okuyabilelim

 veri_kayit[adres]=getchar();               // gelen veriyi string olarak kayıt ediyoruz
                                                   // getchar veriyi göndermek için enter beklemez klavyeden girilen veri direk 
                                                   //gönderilir. Enter kontrolü yapmak istersen if(veri_kayit[x]==0x0d){} 
                                                   //şeklinde yapabilirsin. 0x0d enter ın hex kodudur.
 adres++;

   
 
}


 Void main(){
 enable_interrupts(GLOBAL);

for(;;){
enable_interrupts(int_rda);

}
}

ertunc_26

DEFINE OSC 4
TRISA=%00000001
TRISB=%00000000
PORTA=0
PORTB=0

@ DEVICE pic16F628 'islemci 16F628
@ DEVICE pic16F628, WDT_on 'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF 'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF 'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak

GIRIS VAR PORTA.0
AL VAR BYTE
AL=0
PAUSE 200

BASLA:

SERIN2 PORTA.0,396,[WAIT("MCT"),AL] 
   
    IF AL=20 THEN  ;İLERİ
    PORTB=1
	ENDIF
	
	IF AL=40  THEN ;GERİ
	PORTB=2  
	ENDIF

	IF AL=70 THEN  ;SAG
	PORTB=4  
	ENDIF

	IF AL=120 THEN ;SOL
	PORTB=8   
	ENDIF
	
	IF AL=90 THEN  ;İLERİ+SAG
    PORTB=5
    ENDIF
    
    IF AL=140 THEN ;İLERİ+SOL
    PORTB=9
    ENDIF
    
    IF AL=110 THEN ;GERİ+SAG
    PORTB=6
    ENDIF
    
    IF AL=160 THEN ;GERİ+SOL
    PORTB=10
    ENDIF
   
  abi bu alıcıya ait
@ DEVICE pic16F628,
@ DEVICE pic16F628, WDT_on
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
'-------------------------------------------------------------------------------
CMCON=7           '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=0    'Dahili pull-up lar AKTİF yapıldı
PORTA=0
TRISA=%00000000
PORTB=0
TRISB=%00001111
'-------------------------------------------------------------------------------

TUS1 VAR PORTB.0   ;iLERİ
TUS2 VAR PORTB.1   ;GERİ
TUS3 VAR PORTB.2   ;SAG
TUS4 VAR PORTB.3   ;SOL
VERI VAR BYTE
'-------------------------------------------------------------------------------
PAUSE 200
VERI=0
'-------------------------------------------------------------------------------
BASLA:
If TUS1=0 Then
  If TUS3=0 Then 
   VERI=90
   While TUS1=0 And TUS3=0:GoSub VERI_GONDER:Wend
  EndIf
  If TUS4=0 Then             
   VERI=140
   While TUS1=0 And TUS4=0:GoSub VERi_GONDER:Wend
  EndIf 
  VERI=20:GoSub VERi_GONDER:GOTO BASLA
EndIf
BASLA2:
If TUS2=0 Then
  If TUS3=0 Then 
   VERI=110
   While TUS2=0 And TUS3=0:GoSub VERi_GONDER:Wend
  EndIf
  If TUS4=0 Then
   VERI=160
   While TUS2=0 And TUS4=0:GoSub VERi_GONDER:Wend
  EndIf 
  VERI=40:GoSub VERi_GONDER:GOTO BASLA2
EndIf

If TUS3=0 Then
    WHILE TUS3=0 AND TUS4=0
    VERI=70:GOSUB VERI_GONDER
buda vericiye ait verdiğniz kodları bunlara nasıl konfigüre edebilirim?

sadogan

Konuyu yanlış yerde açmışsın