Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

BUTON

Başlatan karayel1, 23 Ocak 2010, 17:56:57

karayel1

ADCON1=7
TRISA=$00
TRISB=$FF          
TRISC=$00
TRISD=$00
TRISE=$00
SYMBOL RULO_DUR=PORTB.0  
SYMBOL DIK_START=PORTB.1
SYMBOL KOL_DUR=PORTB.2
SYMBOL DAIRE_SENSOR=PORTB.3
SYMBOL DAIRE_DONSENSOR=PORTB.4
SYMBOL DAIRE_YUKARISENSOR=PORTB.5
SYMBOL KOL_GERISENSOR=PORTB.6

SYMBOL RULO=PORTC.0
SYMBOL KOL=PORTC.1
SYMBOL DIK_CALIS=PORTC.2
SYMBOL DAIRE_ASAYA=PORTC.3                                                                              
SYMBOL DAIRE_DON=PORTC.4
SYMBOL DAIRE_YUK=PORTC.5
SYMBOL KOL_GERI=PORTC.6

BASLA:
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
GOSUB RULO1
GOSUB DIK
GOSUB DUR

RULO1: RULO=1
BAK:   IF RULO_DUR=0 THEN
      PAUSE 100
      RULO=0
      KOL=1                
      RETURN
      ENDIF
      GOTO BAK
     
DIK:   IF DIK_START=0 THEN  ' BURDAKİ BUTONA BASINCA KOL=0
                                            ' OLUYOR  
      PAUSE 100                      ' BEN YANIK KALMASINI İSTİYORUM
      DIK_CALIS=1         ' NASIL YAPAYIM.                                        
      RETURN  
      ENDIF
      GOTO DIK
       
DUR:   IF KOL_DUR=0 THEN
      PAUSE 100
      KOL_DUR=0
      RETURN
      ENDIF
      GOTO DUR
      END

bu sadece porogramın bir kısmı
bilgi paylaştıkça ne kadarda büyüyor,,

ilker_32

Yorum yapacaktım fakat açıklama bana yetersiz geldi. Kusura bakma ben hiç birşey anlamadım. Aynı GOSUP olayına dönmüş gibi. :)

ete

Alıntı YapDIK:
IF DIK_START=0 THEN ' BURDAKİ BUTONA BASINCA KOL=0
' OLUYOR
PAUSE 100 ' BEN YANIK KALMASINI İSTİYORUM
DIK_CALIS=1 ' NASIL YAPAYIM.
RETURN
ENDIF
GOTO DIK
DIK_START butonuna basılınca KOL=0 nasıl oluyor anlayamadım doğrusu
Yanık kalmasını istiyorum ne demektir. Kim yanık kalacak?
DIK_CALIS=1 nasıl yaparım demişsin ama yapmışsın işte DİK_CALIS=1 dedinmi  1 olur. Böyle yaparsın işte.

Gerçekten bilmece gibi bir mesaj.Önce bilmeceyi çözeceksin. Sonrada cevabı vereceksin demekki. Çözemedim mesajı maalesef.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

karayel1

şimdi sayın ustalarım şöyle anlatayım. DIK_START butonuna basınca RULO  etiketindeki KOL=1 neden 0 oluyor onu anlayamadım ASM de yazdıgımda sorun olmadı DIK_START butonuna bsınca KOL=1 yanmaya devam ediyor
bilgi paylaştıkça ne kadarda büyüyor,,

karayel1

BASLA:
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
GOSUB RULO1
GOSUB DIK
GOSUB DUR

RULO1: RULO=1
BAK:IF RULO_DUR=0 THEN
      PAUSE 100
      RULO=0
      KOL=1                
      RETURN
      ENDIF
      GOTO BAK
     
DIK:IF DIK_START=0 THEN
      PAUSE 100          
      DIK_CALIS=1          
      RETURN  
      ENDIF
      GOTO DIK





DIK:IF DIK_START=0 THEN ' BURDAKİ BUTONA BASINCA YUKARDAKİ KOL BİYE SEMBOL ETTİGİM PORT UCU NEDEN 1 KEN 0 OLUYOR ONU ANYAMADIM USTALARIM BEN BURDA DIK_CALIS=1 DEMİŞİM BURA TAMAM DIK_CALIŞ =1 OLUYOR ZATEN ONDA SORUN YOK
bilgi paylaştıkça ne kadarda büyüyor,,

karayel1

aynı mantıkla ASM de yazdıgımda bi sorun oılmuyor bişeyleri atlıyom ama ne ?
bilgi paylaştıkça ne kadarda büyüyor,,

ete

Sorunun cevabı sanırım alt programlarla ana programın bir birinden ayrılmamasında gizli.
Aşağıdaki kodlara bir bak bakalım.
GOSUB RULO1
..
GOSUB DIK
GOSUB DUR

RULO1: RULO=1
BAK:IF RULO_DUR=0 THEN
PAUSE 100 
..

Gosub DUR komutundan sonra progran nereye gidiyor?
RULO1: isimli alt programa atlıyor hemde GOSUB ile gitmeden. Burası yanlış
Ana programla alt programlar bir birinden ayrılmalı ve alt programlara yalnızca gosub ile gidilmeli ve Return ile dönülmelidir.
Şayet normal akışla gidilen bir alt programa return ile geri döndürürseniz program nereye gideceğini şaşırır. Çünki stack da ona ait bir geri dönüş adresi olmaz ve ilk gelen adrese dallanır program. Sorun bu bence ve çözümü içinde Gosub Dur satırı altına bir Goto BASLA satırı ilave edilmeli.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

karayel1

anladım hocam ne demek istedigini en kısa zamanda denicem
hocam birşey daha sorcam size ben bu porogramı asm de yazdım ve 16f84a da denedim sorun yok birde aynı porogramı gerekli degişikleri yapıp ( yine asm ) olarak ve 16f877a de denedim  istedigim gibi 16f877a da çalışmadı  yine istediklerim olmadı acaba ben diyom ki 16f877a da ısıta tabiki simüle ediyorum ordamı bi surun var
16f84a ya yazdıgım porogramı ekliyorum 16f84 dün portları yetmedigi için 16f877 ile yapcam
16f877a ya yazdıgımıda eklicem

;MAK_ERD 1,1
      LIST   P=16F84
      INCLUDE   "P16F84.INC"
       
      SA   EQU   H'0C'
              SE   EQU   H'0D'
      CLRF           PORTB
      BSF           STATUS,5
      MOVLW   B'00100000'                               
      MOVWF   TRISB
               MOVLW   B'11111
      MOVWF   TRISA
      BCF      STATUS,5

BASLA
RULO    BSF      PORTB,0         ;RULO ÇALIŞTI         
      BTFSC   PORTA,0                                
      GOTO   RULO
      CALL           BEKLE
      BCF      PORTB,0         ;RULO DURDU    
      BSF      PORTB,1         ;KOL İLERİ

KOL      BTFSC   PORTA,1         ;MAK ÇALIŞMA BUTONU  
      GOTO   KOL
      CALL           BEKLE
      BSF      PORTB,2         ;MAKİNE PORTU

KOLDUR   BTFSC   PORTA,2         ;KOLUN DURCAGI BUTON  
      GOTO   KOLDUR                              
      CALL           BEKLE
      BCF      PORTB,1         ;KOL DURDU BURDA SONDA
      BSF      PORTB,3         ;DAİRE AŞAYA

ASAYA   BTFSC   PORTA,3         ;DAİRE AŞAYA İNDİMİ BAK
      GOTO   ASAYA
      CALL           BEKLE
      BCF           PORTB,3         ;İNMİŞ DURDUR


               BSF      PORTB,4        ;DAİRE DÖNMEYE BAŞLADI
DON          BTFSC   PORTA,4        ;DÖNME BİTMİŞMİ BAK
      GOTO   DON
      CALL           BEKLE
           BCF      PORTB,2
      BCF      PORTB,4        ;BİTMİŞ DURDU
               BSF      PORTB,6        ;KOL YUKARI         
       
YUKARI   BTFSC   PORTB,5        ;KOL YUKARI ÇIKTIMI BAK BAKALIM
      GOTO   YUKARI
      CALL    BEKLE
      BCF      PORTB,6        ;EVET ÇIKTI DURDU    
      GOTO        BASLA
BEKLE
      MOVLW   D'255'
      MOVWF   SA
D1      MOVLW   D'255'
      MOVWF   SE
D2      DECFSZ   SE,F
      GOTO   D2
      DECFSZ   SA,F
      GOTO   D1
      RETURN
   
       END
bilgi paylaştıkça ne kadarda büyüyor,,

ete

Basic programını doğru hale getirmeden yorum yapmak yanlış olur.
Ete,
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

karayel1

;MAK_ERD 1,1
      LIST   P=16F877
       INCLUDE   "P16F877.INC"

      SA   EQU   H'0C'
  SE           EQU           H'0D'
      CLRF           PORTC
      BSF           STATUS,5
      MOVLW   H'07'
           MOVWF   ADCON1

      CLRF           TRISC                            
      MOVLW   B'11111111'
      MOVWF   TRISB
      BCF      STATUS,5

BASLA

RULO    BSF      PORTC,0         ;RULO ÇALIŞTI         
      BTFSC   PORTB,0                                
      GOTO   RULO
      CALL           BEKLE
      BCF      PORTC,0         ;RULO DURDU    
      BSF      PORTC,1         ;KOL İLERİ

KOL      BTFSC   PORTB,1         ;MAK ÇALIŞMA BUTONU  
      GOTO   KOL
      CALL           BEKLE
      BSF      PORTC,2         ;MAKİNE PORTU

KOLDUR   BTFSC   PORTB,2         ;KOLUN DURCAGI BUTON  
      GOTO   KOLDUR                              
      CALL           BEKLE
      BCF      PORTC,1         ;KOL DURDU BURDA SONDA
      BSF      PORTC,3         ;DAİRE AŞAYA

ASAYA   BTFSC   PORTB,3         ;DAİRE AŞAYA İNDİMİ BAK
      GOTO   ASAYA
      CALL           BEKLE
       BCF           PORTC,3         ;İNMİŞ DURDUR
                BSF      PORTC,4        ;DAİRE DÖNMEYE BAŞLADI

DON          BTFSC   PORTB,4        ;DÖNME BİTMİŞMİ BAK
      GOTO   DON
      CALL           BEKLE   
      BCF      PORTC,4        ;BİTMİŞ DURDU
       
     

YUKARI   BTFSC   PORTB,5        ;KOL YUKARI ÇIKTIMI BAK BAKALIM
      GOTO   YUKARI
      CALL    BEKLE
      BCF      PORTC,6        ;EVET ÇIKTI DURDU    
      BCF      PORTC,2        ;MAKİNAYIDA DURDURDU
               GOTO        BASLA

BEKLE
      MOVLW   D'255'
      MOVWF   SA
D1      MOVLW   D'255'
      MOVWF   SE
D2      DECFSZ   SE,F
      GOTO   D2
      DECFSZ   SA,F
      GOTO   D1
      RETURN
       END



HACAM BUNU VE DİGER POROGRAMI Bİ SİMÜLE EDERMİSİNİZ

aynı mantık ama 16f84a ile 16f877 farklı çalışıyor

basıc porogramındada çalışcam yarın hazırlarım inş
bilgi paylaştıkça ne kadarda büyüyor,,

karayel1

ADCON1=7
TRISA=$00
TRISB=$FF          
TRISC=$00
TRISD=$00
TRISE=$00
SYMBOL RULO_DUR=PORTB.0  
SYMBOL DIK_START=PORTB.1
SYMBOL KOL_DUR=PORTB.2
SYMBOL DAIRE_SENSOR=PORTB.3
SYMBOL DAIRE_DONSENSOR=PORTB.4
SYMBOL DAIRE_YUKARISENSOR=PORTB.5


SYMBOL RULO=PORTC.0
SYMBOL KOL=PORTC.1
SYMBOL DIK_CALIS=PORTC.2
SYMBOL DAIRE_ASAYA=PORTC.3                                                                              
SYMBOL DAIRE_DON=PORTC.4
SYMBOL DAIRE_YUK=PORTC.5


BASLA:
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0



Pause 100
RULO=1
KONTROL:
IF RULO_DUR=0 Then
Pause 100
RULO=0
KOL=1
GoTo DIK
EndIF
GoTo KONTROL
'---------------------------------------
DIK:
IF DIK_START=0  Then
Pause 100
DIK_CALIS=1
GoTo DUR
EndIF
GoTo DIK
'----------------------------------------
DUR:
IF KOL_DUR=0 Then
Pause 100
KOL=0
DAIRE_ASAYA=1
GoTo DAIRE_B:
EndIF
GoTo DUR

DAIRE_B:
IF DAIRE_SENSOR=0 Then
Pause 100
DAIRE_ASAYA=0
GoTo DAIRE_C
EndIF
GOTO DAIRE_B

DAIRE_C:
DAIRE_DON=1
DON:
IF DAIRE_DONSENSOR=0 Then
Pause 100
DAIRE_DON=0
DIK_CALIS=0

GoTo DAIREYUKARI_A
EndIF
GoTo DON

DAIREYUKARI_A:
DAIRE_YUK=1
E:
IF DAIRE_YUKARISENSOR=0 Then
Pause 100
DAIRE_YUK=0
RULO=1
EndIF
GoTo E
GOTO BASLA
END

BU 16F877A İÇİN YAZILMIŞ OLAN İSTEDİGİM GİBİ ÇALIŞMIYOR AMA 16F84A DA İSTEDİGİM GİBİ OLUYOR HOCAM  ANLAMADIM BEN BU İŞİ


TRISA=$FF
TRISB=%00100000        

SYMBOL RULO_DUR=PORTA.0  
SYMBOL DIK_START=PORTA.1
SYMBOL KOL_DUR=PORTA.2
SYMBOL DAIRE_SENSOR=PORTA.3
SYMBOL DAIRE_DONSENSOR=PORTA.4
SYMBOL DAIRE_YUKARISENSOR=PORTB.5


SYMBOL RULO=PORTB.0
SYMBOL KOL=PORTB.1
SYMBOL DIK_CALIS=PORTB.2
SYMBOL DAIRE_ASAYA=PORTB.3                                                                              
SYMBOL DAIRE_DON=PORTB.4
SYMBOL DAIRE_YUK=PORTB.6


BASLA:
PORTA=0
PORTB=0

Pause 100
RULO=1
KONTROL:
IF RULO_DUR=0 Then
Pause 100
RULO=0
KOL=1
GoTo DIK
EndIF
GoTo KONTROL
'---------------------------------------
DIK:
IF DIK_START=0  Then
Pause 100
DIK_CALIS=1
GoTo DUR
EndIF
GoTo DIK
'----------------------------------------
DUR:
IF KOL_DUR=0 Then
Pause 100
KOL=0
DAIRE_ASAYA=1
GoTo DAIRE_B:
EndIF
GoTo DUR

DAIRE_B:
IF DAIRE_SENSOR=0 Then
Pause 100
DAIRE_ASAYA=0
GoTo DAIRE_C
EndIF
GOTO DAIRE_B

DAIRE_C:
DAIRE_DON=1
DON:
IF DAIRE_DONSENSOR=0 Then
Pause 100
DAIRE_DON=0
DIK_CALIS=0
GoTo DAIREYUKARI_A
EndIF
GoTo DON

DAIREYUKARI_A:
DAIRE_YUK=1
E:
IF DAIRE_YUKARISENSOR=0 Then
Pause 100
DAIRE_YUK=0
RULO=1
EndIF
GoTo E
GOTO BASLA
END


BU OLUYOR 16F 84A DA FARK YOK ARADA AMA 16F877 DE NEDEN ÇALIŞMIYOR
bilgi paylaştıkça ne kadarda büyüyor,,

ete

Programlar bir birlerinin aynısı. Yalnızca port kullanım farklılıkları var. Oda normal
Çalışması gerekir.
Sİmulasyon dosyalarını bir yere yüklersen bakabilirim.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

karayel1

NASIL YÜKLEYECEGİMİ BULAMADIM. :?
bilgi paylaştıkça ne kadarda büyüyor,,