PICBASIC'de PORTA.5'e çıkış veremiyorum

Başlatan KralMurat, 11 Nisan 2013, 12:01:01

KralMurat

Arkadaşlar PICBASICde yazılmış bir program üzerinde uğraşıyorum da, PORTA.5'e bir röle bağlamak istiyorum, fakat bir türlü PORTA.5'e veri gönderemiyorum, sanki pic PORTA.5'i Output olarak algılamıyormuş gibi, hiçbir veri gitmiyor. Acaba sorun nerde olabilir?

Daha önceki programda PORTA.5'te bir buton bağlıydı, haliyle TRISA=%10111000 şeklindeydi, şimdi ben PORTA.5'e röle bağlamak istediğim için TRISA=%10011000 şeklinde değiştirdim, fakat hala veri gönderemiyorum. Başka nereyi değiştirmem gerekiyor acaba?

Program kodu aşağıda :

DEFINE OSC 4

@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

TRISA=%10011000
TRISB=%10000000
PORTA=0:PORTB=0

CMCON=7  'Comparatör pinleri iptal hepsi giriş çıkış
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
'presc:000=1/2, 001=1/4, 010=1/8, 011=1/16, 100=1/32, 101=1/64, 110=1/128,111=1/256   
OPTION_REG=%00000011  'Pull up dirençleri İPTAL- Bölme oranı 1/16
INTCON=%10100000  'Kesmeler aktif ve TMR0 (bit5) kesmesi aktif
TMR0=99

'---------------------------PIN TANIMLAMALARI-----------------------------------
SYMBOL SET=PORTB.7
SYMBOL YUKARI=PORTA.4
SYMBOL ASAGI=PORTA.3
SYMBOL DIG0=PORTA.0
SYMBOL DIG1=PORTA.1
SYMBOL DIG2=PORTA.2
'-------------------------------------------------------------------------------
ROLESOGUK  VAR PORTA.6
ROLEISI    VAR PORTA.5
'-----------------------------DEĞİŞKENLER---------------------------------------

SAYAC  VAR  BYTE
SIRA   VAR  BYTE
SAYI   VAR  BYTE
TERM   VAR  WORD
ISIS   VAR  WORD
ISIX   var  WORD
ONDA   VAR  BYTE
AKTAR1 VAR  BYTE
AKTAR2 VAR  BYTE
AKTAR3 VAR  BYTE
SYC    VAR  BYTE
SNS    VAR  BYTE
SNY    VAR  BYTE
ISIH   VAR  BYTE
ISIL   VAR  BYTE
TUS    VAR  BIT
DP     VAR  BIT
W      VAR  BIT
U      VAR  BIT
Z      VAR  BYTE
X      VAR  BYTE
I      VAR  WORD
'---------------------------------ISI TANIMLAMALARI-----------------------------
    Busy        VAR BIT         ' Busy Status-Bit
    HAM         VAR   WORD
    ISI         VAR WORD        ' Sensör HAM okuma değeri
    Float       VAR WORD        ' Holds remainder for + temp C display       
    ISARET_BITI VAR HAM.11'Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
    EKSI_ISI    CON 1           ' Negatif_Cold = 1
    SERECE      CON 223         ' ° işareti
    ISARET      VAR BYTE       
    Comm_Pin    VAR   PORTA.7
'--------------------------------------------------------------

BASLANGIC:DP=0'--------------------BAŞLANGIC------------------------------------   
gosub EKRAN3
gosub SENSORYAZ
GOSUB SENSOROKU
read $0,ISIL
READ $1,ISIH
READ $2,SNS
IF ISIL>99 THEN ISIL=0
IF ISIH>9 THEN ISIH=0
IF SNS>50 THEN SNS=0
TERM=(ISIL*10)+ISIH
ISIS=TERM-SNS
ISIX=TERM+SNS
GOSUB DELAY1
DP=1:W=1:SYC=0

BASLA:'----------------------------ANA DONGÜ------------------------------------
GOSUB EKRAN
GOSUB SENSOROKU
GOSUB KONTROL

IF TUS=1 THEN GOTO AYAR
GOTO BASLA

'--------------------------------ALT PROGRAMLAR---------------------------------

SENSOROKU:
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
SENSORYAZ: 'okumaya hazırlan..         
OWOUT   Comm_Pin, 1, [$CC,$4E, $FF, $FF, $7F]
OWOUT   Comm_Pin, 1, [$CC,$48]         
OWOUT   Comm_Pin, 1, [$CC,$B8]         
OWOUT   Comm_Pin, 1, [$CC,$BE]         
return

   
Hesapla:  ' Ham değerden Santigrat derece hesabı
    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-" 
       ham=~ham+2
    endif
    float = (HAM*10)/16 
    RETURN 
END
     
RETURN

KONTROL: ' Role kontrol..
IF ISIS=>FLOAT THEN
  HIGH ROLEISI
 
endIF
IF FLOAT=>TERM THEN
  LOW ROLEISI
ENDIF

IF FLOAT=>ISIX THEN
  HIGH ROLESOGUK
 
endIF
IF TERM=>FLOAT THEN
  LOW ROLESOGUK
ENDIF

RETURN   

DELAY: 'gecıkme 1
  FOR I=0 TO 150:NEXT
RETURN
DELAY1:'gecıkme 2
  FOR I=0 TO 12000:NEXT
RETURN
DELAY2:'gecıkme 3
  FOR I=0 TO 125:NEXT
RETURN

EKRAN:'Sıcaklık gösteriliyor.
Z=FLOAT DIG 0:GOSUB AL:AKTAR1=SAYI         
Z=FLOAT DIG 1:GOSUB AL:AKTAR2=SAYI
Z=FLOAT DIG 2:GOSUB AL:AKTAR3=SAYI
RETURN
EKRAN1: 'SET yazısı
Z=14:GOSUB AL:AKTAR1=SAYI
Z=13:GOSUB AL:AKTAR2=SAYI
Z=5:GOSUB AL:AKTAR3=SAYI
RETURN
EKRAN2:'Set değeri gösteriliyor
Z=TERM DIG 0:GOSUB AL:AKTAR1=SAYI:IF U=1 THEN AKTAR1=0
Z=TERM DIG 1:GOSUB AL:AKTAR2=SAYI
Z=TERM DIG 2:GOSUB AL:AKTAR3=SAYI
RETURN
EKRAN3:
AKTAR1=64
AKTAR2=64
AKTAR3=64
RETURN
EKRAN4:'Hassasiyet ekranı
Z=SNS DIG 0:GOSUB AL:AKTAR1=SAYI:IF U=1 THEN AKTAR1=0
Z=SNS DIG 1:GOSUB AL:AKTAR2=SAYI
aktar3=0
RETURN

AL: LOOKUP Z,[63,6,91,79,102,109,125,7,127,111,99,57,64,121,120],SAYI :RETURN'Karekter al

KAYDET: 'Değerler eproom'a kaydediliyor..
WHILE TUS=1:WEND
ISIL=TERM/10
ISIH=TERM//10
WRITE $0,ISIL:PAUSEUS 2
WRITE $1,ISIH:PAUSEUS 2
WRITE $2,SNS:PAUSEUS 2
GOTO BASLANGIC

AYAR: 'Menuye gırıs
WHILE TUS=1:WEND
DP=0
GOSUB EKRAN1
GOSUB DELAY1
READ $0,ISIL
READ $1,ISIH
TERM=(ISIL*10)+ISIH
DP=1:syc=0:SNY=0:W=0

MENU:
IF YUKARI=0 THEN
W=1:U=0:sny=0
TERM=TERM+1
WHILE YUKARI=0
   SYC=SYC+1:GOSUB DELAY
     IF SYC>40 THEN
       SYC=50:TERM=TERM+1:GOSUB DELAY
     ENDIF
   GOSUB EKRAN2
   IF TERM>990 THEN TERM=0
WEND
SYC=0:IF TERM>999 THEN TERM=990
ELSE
W=0
ENDIF

IF ASAGI=0 THEN
W=1:U=0:sny=0 
TERM=TERM-1
WHILE ASAGI=0
   SYC=SYC+1:GOSUB DELAY
     IF SYC>40 THEN
       SYC=50:TERM=TERM-1:GOSUB DELAY
     ENDIF
   GOSUB EKRAN2
   IF TERM>999 THEN TERM=990
WEND
SYC=0:IF TERM>999 THEN TERM=990
ELSE
W=0
ENDIF

IF TUS=1 THEN
GOTO SENSIVITY
ENDIF
GOSUB EKRAN2
GOTO MENU

SENSIVITY: '| menusu giriş..
WHILE TUS=1:WEND
read $2,sns
IF SNS>50 THEN SNS=0
DP=1:SNY=0
SENS:
GOSUB EKRAN4
IF YUKARI=0 THEN
W=1:SNY=0:U=0 
SNS=SNS+1
WHILE YUKARI=0
   SYC=SYC+1:GOSUB DELAY
     IF SYC>40 THEN
       SYC=40:SNS=SNS+1:GOSUB DELAY2
     ENDIF
   GOSUB EKRAN4
   IF SNS=>50 THEN SNS=50
WEND
SYC=0:IF SNS=>50 THEN SNS=50
ELSE
W=0
ENDIF           

IF ASAGI=0 THEN
W=1:U=0:sny=0
SNS=SNS-1
WHILE ASAGI=0
   SYC=SYC+1:GOSUB DELAY
     IF SYC>40 THEN
       SYC=40:SNS=SNS-1:GOSUB DELAY2
     ENDIF
   GOSUB EKRAN4
   IF SNS>50 THEN SNS=0
WEND
SYC=0:IF SNS>50 THEN SNS=0
ELSE
W=0
ENDIF

IF TUS=1 THEN
GOTO KAYDET
ENDIF
GOTO SENS

Disable               
KESME:  'kesme alt programı
  IF SET=0 THEN
  TUS=1
  ELSE
  TUS=0
  ENDIF
 
IF W=0 THEN
  SNY=SNY+1
  IF SNY=>120 THEN
    U=1
    ELSE
    U=0
  ENDIF
ENDIF
IF SNY=>240 THEN SNY=0

   SAYAC=SAYAC+1            
      If SAYAC>2 then SAYAC=0   

    If SAYAC=0 then
     DIG2=0
     PORTB=AKTAR1
     DIG0=1 
      PAUSEUS 2      
     Endif

     If SAYAC=1 then      
     DIG0=0
     PORTB=AKTAR2
     'PORTB.7=DP
     DIG1=1
     PAUSEUS 2
     Endif
    
     If SAYAC=2 then      
     DIG1=0
     PORTB=AKTAR3
     DIG2=1
     PAUSEUS 2
     Endif   
         
      TMR0=160
    INTCON.2=0
             
    Resume      
   Enable   
  end           

ferit06

#1
PORTA.5 çıkış yapılamaz. Yalnızca giriş olarak tanımlanabilir.


datasheet de;
Name                   Function                  Input Type         Output Type              Description

RA5/MCLR/VPP       RA5                             ST                     —                        Input port

olarak gösteriliyor....

KralMurat

Anladım hocam :) bilmiyordum bunu, iyiki sormuşum uğraşıyorum uğraşıyorum olmuyor :) Teşekkürler.