step motor kontrol proğramında hata var bir türlü bulama

Başlatan relakss, 18 Mayıs 2008, 18:07:48

relakss

arkadaşlar aşağıdaki proğram adım tablosundan yanlızca bir değer alıyor butona ilk basıldığında çalışıyor ondan sonra diğer değerleri almıyor. yardımınız için şimdiden teşekkür ediyorum. :D

LIST P=16F628
   INCLUDE "P16F628.INC"

__config  _INTRC_OSC_CLKOUT
SAYAC1   EQU   h'0C'
SAYAC2   EQU   h'0D'
ADIM   EQU   h'0E'
   ORG H'00'
   BANKSEL TRISB
   CLRF TRISB
   MOVLW H'FF'
   MOVWF TRISA
   BANKSEL PORTB
   MOVLW H'07'
   MOVWF CMCON
   CLRF PORTB
   MOVLW   h'FF'
   MOVWF   ADIM
   
   
BASLA
   BTFSC   PORTA,   1
   GOTO   BASLA
   BTFSC   PORTA,   2
   GOTO   SAG
SOL
   INCF   ADIM,   F
   MOVF   ADIM,   W
   ANDLW   b'00000111'
   CALL   ADIMTBL   
   ANDLW   b'00001111'
   MOVWF   PORTB
   CALL   GECIKME
   GOTO   BASLA
;Zannedersem buradan başa dönmüyor sebebini bir türlü çözemedim

SAG
   DECF   ADIM,   F
   MOVF   ADIM,   W
   ANDLW   b'00000111'
   CALL   ADIMTBL   
   ANDLW   b'00001111'
   MOVWF   PORTB
   CALL   GECIKME
;buradanda başa dönmüyor    
               GOTO    BASLA
ADIMTBL
   ADDWF   PCL,   F
   RETLW   b'0001'
   RETLW   b'1001'
   RETLW   b'1000'
   RETLW   b'1010'
   RETLW   b'0010'
   RETLW   b'0110'
   RETLW   b'0100'
   RETLW   b'0101'
GECIKME
   MOVLW   h'FF'
   MOVWF   SAYAC1
DONGU1
   MOVLW   h'FF'
   MOVWF   SAYAC2
DONGU2
   DECFSZ   SAYAC2,F
   GOTO   DONGU2
   DECFSZ   SAYAC1,   F
   GOTO   DONGU1
   RETURN
   END

elmaalma

Alıntı yapılan: "relakss"
__config  _INTRC_OSC_CLKOUT
SAYAC1	EQU	h'0C'
SAYAC2	EQU	h'0D'
ADIM	EQU	h'0E'


__CONFIG	_MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _BODEN_ON & _LVP_OFF

	CBLOCK	0x20
			SAYAC1		;
			SAYAC2		;
			ADIM 		;
	
	ENDC

Bu değişiklikleri yapınca  belki sorun hallolur.
1-WDT kullanırsan prg uygun yerinde resetlemen gerekir. clrwdt ile
2-16F628 de yazmaç 0X20 adresinden başlar.

bigbey

LIST P=16F628 
	INCLUDE "P16F628.INC" 

	__config _INTRC_OSC_CLKOUT 

SAYAC1 EQU h'20' 
SAYAC2 EQU h'21' 
ADIM EQU h'22' 

	ORG H'00' 
	BANKSEL TRISB 
	CLRF TRISB 
	MOVLW H'FF' 
	MOVWF TRISA 
	BANKSEL PORTB 
	MOVLW H'07' 
	MOVWF CMCON 
	CLRF PORTB 
	MOVLW h'FF' 
	MOVWF ADIM 


BASLA 
	BTFSC PORTA, 1 
	GOTO BASLA 
	BTFSC PORTA, 2 
	GOTO SAG 
SOL 
	INCF ADIM, F 
	MOVF ADIM, W 
	ANDLW b'00000111' 
	CALL ADIMTBL 
	ANDLW b'00001111' 
	MOVWF PORTB 
	CALL GECIKME 
	GOTO BASLA 
;Zannedersem buradan başa dönmüyor sebebini bir türlü çözemedim 

SAG 
	DECF ADIM, F 
	MOVF ADIM, W 
	ANDLW b'00000111' 
	CALL ADIMTBL 
	ANDLW b'00001111' 
	MOVWF PORTB 
	CALL GECIKME 
;buradanda başa dönmüyor 
	GOTO BASLA 
ADIMTBL 
	ADDWF PCL, F 
	RETLW b'0001' 
	RETLW b'1001' 
	RETLW b'1000' 
	RETLW b'1010' 
	RETLW b'0010' 
	RETLW b'0110' 
	RETLW b'0100' 
	RETLW b'0101' 
GECIKME 
	MOVLW h'FF' 
	MOVWF SAYAC1 
DONGU1 
	MOVLW h'FF' 
	MOVWF SAYAC2 
DONGU2 
	DECFSZ SAYAC2,F 
	GOTO DONGU2 
	DECFSZ SAYAC1, F 
	GOTO DONGU1 
	RETURN 
	END

Ram adresi başlangıç noktası 16F628 için 20Hex adresinden başlamalıdır.
sanırım siz burada yanlışlık yaptınız.
TA6R

relakss

arkadaşlar çok yardımcı oldunuz sayenizde step motor dönüyor.teşekkür ederim
bir istirhamım daha var aşağıdakilerin ne olduğunu birkaçı haricinde bilmiyorum bunların toplu bir şekilde bulunduğu kaynak gözünüze çarptımı çarptıysa adresini alabilirmiyim aslında bunlarında içinde bulunduğu asm anlatan bir döküman daha iyi olur.bunları ekleyince proğram çalışıyor fakat ne olduklarınıda bilmek istiyorum.yardımlrınız için sağolun.
__CONFIG   _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _BODEN_ON & _LVP_OFF

bigbey

Kullandığınız işlemci türleri çeşitli konfigürasyonda çalışabilir bunlar, Sizin de __CONFIG diye yazdığınız satırda işlemcinin hangi koşullarda iş yapması gerektiğini siz seçerek veriyorsunuz.
http://rapidshare.com/files/115979836/877config.rar.html
Dosyayı incelersiniz.
TA6R