stack underflow executing RETURN instruction

Başlatan slymnzgn, 16 Haziran 2010, 20:35:27

slymnzgn

Merhaba arkadaşlar.
İki eksenli bir sistem yapıyorum.
Programını yazdım.
Fakat stack underflow executing RETURN instruction
diye bir hata veriyor.
Ayrıca A portunda step motor kontrol etmeye çalışıyorum.
Fakat hiçbir tepki vermiyor.
Genel olarak üç step motor bir sensör 4 sınır anahtarı kullanıyorum.
Progam aşağıdaki gibidir.Yardımcı olursanız sevinirim.Kolay gelsin.


list     p=16f877a
	#include <p16f877a.inc>

	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

SAYAC1  EQU 0X20
SAYAC2  EQU 0X21
SAYAC3  EQU 0X22
SAYAC4  EQU 0X23
SAYAC5  EQU 0X24
SAYAC6  EQU 0X25
SAYAC7  EQU 0X26
SAYAC8  EQU 0X27
SAYAC9  EQU 0X28
SAYAC10 EQU 0X29
SAYAC11 EQU 0X30
SAYAC12 EQU 0X31
;********************************************
;GIRIS CIKIS AYARLARI
;********************************************
	org 0
	bsf STATUS,RP0
	movlw b'00000000'
	movwf TRISA
	movlw b'00000000'
	movwf TRISC
	movlw b'00000000'
	movwf TRISB
	movlw b'11111111'
	movwf TRISD
	bcf STATUS,RP0

;**************************************************************
;GECİKME ALT PROGRAMI
;***************************************************************

ZAMAN				
		movlw		D'255'		
		movwf		SAYAC1
TEST2	movwf		SAYAC2
TEST1	decfsz		SAYAC2,F
		goto		TEST1
		decfsz		SAYAC1,F
		goto    	TEST2
		return
		END 

;*********************************************
;PROGRAM BASLA
;*********************************************

motorsolileriy 

movlw b'11001000'
movwf SAYAC3

DEVAM  
       movlw b'00000100'
       movwf PORTA
       movlw b'00000001'
       movwf PORTB
	   CALL ZAMAN
       movlw b'00001000'
       movwf PORTA
       movlw b'00000010'
       movwf PORTB
       CALL ZAMAN   
       movlw b'00010000'
       movwf PORTA
       movlw b'00000100' 
       movwf PORTB
       CALL ZAMAN
       movlw b'00100000'
       movwf PORTA
       movlw b'00001000'
       movwf PORTB
       CALL ZAMAN
       decfsz SAYAC3,f 
       goto DEVAM 
       btfsc PORTD,3
       goto motorsaggeriy 
       btfss PORTD,0
       goto motorsolilerix
       goto motorsolileriy 
       

motorsaggeriy

movlw b'11001000' 
movwf SAYAC4 

DEVAM2 movlw b'00100000'
       movwf PORTA
       movlw b'00001000'
       movwf PORTB
       CALL ZAMAN
       movlw b'00010000'
       movwf PORTA 
       movlw b'00000100'
       movwf PORTB
       CALL ZAMAN
       movlw b'00001000'
       movwf PORTA 
       movlw b'00000010'
       movlw PORTB
       CALL ZAMAN   
       movlw b'00000100'
       movwf PORTA
       movlw b'00000001'
       movwf PORTB
       CALL ZAMAN
       decfsz SAYAC4,f
       goto DEVAM2
       btfsc PORTD,2 
       goto motorsolileriy
       btfss PORTD,1
       goto motorsaggerix
       goto motorsaggeriy



motorsolilerix

BASTAN   movlw b'00000001'
         movwf PORTC
BASTAN1  CALL ZAMAN 
         rlf PORTC,f
         btfsc PORTC,3
         goto BASTAN
         btfsc PORTD,0
         goto motorsaggerix
         btfsc PORTD,5
         goto BASTAN1
         CALL ILERIGITYOKSAGERIGELVARSADEVAMET
		 CALL SAGAGITYOKSAGERIGELVARSADEVAMET
		 CALL SOLAGITYOKSAGERIGELVARSADEVAMET
		 CALL SAGCAPRAZGITYOKSAGERIGELVARSADEVAMET
 		 CALL SOLCAPRAZGITYOKSAGERIGELVARSADEVAMET

motorsagilerix 

BASTAN2  movlw b'00001000'
         movwf PORTC 
BASTAN3  CALL ZAMAN 
         rrf PORTC,f
         btfsc PORTC,0
         goto BASTAN
         btfsc PORTD,1
         goto motorsolilerix
         btfsc PORTD,5
         goto BASTAN2
         CALL ILERIGITYOKSAGERIGELVARSADEVAMET
		 CALL SAGAGITYOKSAGERIGELVARSADEVAMET
		 CALL SOLAGITYOKSAGERIGELVARSADEVAMET
		 CALL SAGCAPRAZGITYOKSAGERIGELVARSADEVAMET
 		 CALL SOLCAPRAZGITYOKSAGERIGELVARSADEVAMET

;***********************************************
;SENSORYARDIMCIALTPROGRAM
;**********************************************

ILERIGITYOKSAGERIGELVARSADEVAMET

BIRINCI CALL sensoryeksenisolileri
        btfsc PORTD,5
        CALL sensoryeksenisaggeri
        goto BIRINCI
        RETURN
        END

;***********************************************

SAGAGITYOKSAGERIGELVARSADEVAMET 

IKINCI CALL sensorxeksenisolileri
       btfsc PORTD,5
       CALL sensorxeksenisaggeri
       goto IKINCI
       RETURN
       END

;*************************************************

SOLAGITYOKSAGERIGELVARSADEVAMET

UCUNCU CALL sensorxeksenisaggeri
       btfsc PORTD,5
       CALL sensorxeksenisolileri
       goto UCUNCU
       RETURN
       END

;***********************************************

SAGCAPRAZGITYOKSAGERIGELVARSADEVAMET 

DORDUNCU CALL sensorxyeksenisagcaprazileri 
         btfsc PORTD,5
         CALL sensorxyeksenisagcaprazgeri
         goto DORDUNCU
         RETURN
         END

;*************************************************

SOLCAPRAZGITYOKSAGERIGELVARSADEVAMET 

BESINCI CALL sensorxyeksenisolcaprazileri
        btfsc PORTD,5
        CALL sensorxyeksenisolcaprazgeri 
        goto BESINCI
        RETURN
        END

;********************************************************
;SENSOR YARDIMCI ALT PROGRAM
;********************************************************

sensoryeksenisolileri

movlw b'11001000'
movwf SAYAC5

SENSOR  movlw b'00000100'
        movwf PORTA
        movlw b'00000001'
        movwf PORTB
        CALL ZAMAN
        movlw b'00001000'
        movwf PORTA
        movlw b'00000010'
        movwf PORTB
        CALL ZAMAN   
        movlw b'00010000'
        movwf PORTA
        movlw b'00000100' 
        movwf PORTB
        CALL ZAMAN
        movlw b'00100000'
        movwf PORTA
        movlw b'00001000'
        movwf PORTB
        CALL ZAMAN
        decfsz SAYAC5,f 
        goto DEVAM 
        RETURN
        END
;***********************************************

sensoryeksenisaggeri

movlw b'11001000' 
movwf SAYAC6 

SENSOR2 movlw b'00100000'
        movwf PORTA
        movlw b'00001000'
        movwf PORTB
        CALL ZAMAN
        movlw b'00010000'
        movwf PORTA 
        movlw b'00000100'
        movwf PORTB
        CALL ZAMAN
        movlw b'00001000'
        movwf PORTA 
        movlw b'00000010'
        movlw PORTB
        CALL ZAMAN   
        movlw b'00000100'
        movwf PORTA
        movlw b'00000001'
        movwf PORTB
        CALL ZAMAN
        decfsz SAYAC6,f
        goto DEVAM2
        RETURN
        END

;****************************************

sensorxeksenisolileri 

movlw b'00110000'
movwf SAYAC7

SENSOR3  movlw b'00000001'
         movwf PORTC
         CALL ZAMAN
         movlw b'00000010'
         movwf PORTC
         CALL ZAMAN   
         movlw b'00000100' 
         movwf PORTC
         CALL ZAMAN
         movlw b'00001000'
         movwf PORTBC
         CALL ZAMAN
         decfsz SAYAC7,f 
         goto SENSOR3
         RETURN
         END 
;*******************************************
sensorxeksenisolileri

movlw b'00110000' 
movwf SAYAC8 

SENSOR4 movlw b'00001000'
        movwf PORTC
        CALL ZAMAN
        movlw b'00000100'
        movwf PORTC
        CALL ZAMAN
        movlw b'00000010'
        movlw PORTC
        CALL ZAMAN   
        movlw b'00000001'
        movwf PORTC
        CALL ZAMAN
        decfsz SAYAC8,f
        goto SENSOR4
        RETURN
        END
;*******************************************


sensorxyeksenisagcaprazileri

movlw b'00110000'
movwf SAYAC9

SENSOR5  movlw b'00000100'
         movwf PORTA
         movlw b'00000001'
         movwf PORTB
         movlw b'00000001'
         movwf PORTC
         CALL ZAMAN
         movlw b'00001000'
         movwf PORTA
         movlw b'00000010'
         movwf PORTB
         movlw b'00000010'
         movwf PORTC
         CALL ZAMAN   
         movlw b'00010000'
         movwf PORTA
         movlw b'00000100' 
         movwf PORTB
         movlw b'00000100' 
         movwf PORTC
         CALL ZAMAN
         movlw b'00100000'
         movwf PORTA
         movlw b'00001000'
         movwf PORTB
         movlw b'00001000'
         movwf PORTBC
         CALL ZAMAN
         decfsz SAYAC9,f 
         goto SENSOR5
         RETURN
         END
;*******************************************

sensorxyeksenisagcaprazgeri

movlw b'00110000' 
movwf SAYAC10 

SENSOR6 movlw b'00100000'
        movwf PORTA
        movlw b'00001000'
        movwf PORTB
        movlw b'00001000'
        movwf PORTC
        CALL ZAMAN
        movlw b'00010000'
        movwf PORTA 
        movlw b'00000100'
        movwf PORTB
        movlw b'00000100'
        movwf PORTC
        CALL ZAMAN
        movlw b'00001000'
        movwf PORTA 
        movlw b'00000010'
        movlw PORTB
        movlw b'00000010'
        movlw PORTC
        CALL ZAMAN   
        movlw b'00000100'
        movwf PORTA
        movlw b'00000001'
        movwf PORTB
        movlw b'00000001'
        movwf PORTC
        CALL ZAMAN
        decfsz SAYAC10,f
        goto SENSOR6
        RETURN
        END

;********************************************

sensorxyeksenisolcaprazileri

movlw b'00110000'
movwf SAYAC11

SENSOR6  movlw b'00000100'
         movwf PORTA
         movlw b'00000001'
         movwf PORTB
         movlw b'00000001'
         movwf PORTC
         CALL ZAMAN
         movlw b'00001000'
         movwf PORTA
         movlw b'00000010'
         movwf PORTB
         movlw b'00000010'
         movwf PORTC
         CALL ZAMAN   
         movlw b'00010000'
         movwf PORTA
         movlw b'00000100' 
         movwf PORTB
         movlw b'00000100' 
         movwf PORTC
         CALL ZAMAN
         movlw b'00100000'
         movwf PORTA
         movlw b'00001000'
         movwf PORTB
         movlw b'00001000'
         movwf PORTBC
         CALL ZAMAN
         decfsz SAYAC11,f 
         goto SENSOR6
         RETURN
         END

;*****************************************


sensorxyeksenisolcaprazgeri 

movlw b'11001000' 
movwf SAYAC12 

SENSOR7 movlw b'00110000'
        movwf PORTA
        movlw b'00001000'
        movwf PORTB
        movlw b'00001000'
        movwf PORTC
        CALL ZAMAN
        movlw b'00010000'
        movwf PORTA 
        movlw b'00000100'
        movwf PORTB
        movlw b'00000100'
        movwf PORTC
        CALL ZAMAN
        movlw b'00001000'
        movwf PORTA 
        movlw b'00000010'
        movlw PORTB
        movlw b'00000010'
        movlw PORTC
        CALL ZAMAN   
        movlw b'00000100'
        movwf PORTA
        movlw b'00000001'
        movwf PORTB
        movlw b'00000001'
        movwf PORTC
        CALL ZAMAN
        decfsz SAYAC12,f
        goto SENSOR7
        RETURN
        END


serdararikan

programı incelemedim ama sanırım içiçe çok sayıda altprogram kullanmışsınız.PIC altprogramdan geri dönemiyor.

camby

mplab ile programı adım adım çalıştırırsanız sorunu görebilirsiniz

ipek

delay rutinin yanlış gözüküyor
yapılmış delay örneklerini incelemeni tavsiye ederim
benim kullandığım delay üreteci adresi
http://www.piclist.org/techref/piclist/codegen/delay.htm
bunun gibi bir  kaç örnek google'de mevcut
örnek olarak
goto TEST2
goto ZAMAN der isek stack yığıntısından kurtuluruz tabi bu örnek
ikinci bir programda bu kadar çok end kullanamazsın bu programın en dibinde bir tane olmalı çünki derleyici end'i gördüğü noktada compile etmeyi durdurur..
asemblerden bende o kadar anlamam sadece gördüklerimi yorumladım
ram bölgesine atama yaparken seninki olmaz demiyorum ama alışkanlık olsun 0x29 dan sonra 0x2A....0x2B gibi gitmelisin kolay gelsin...