asm: Stack overflow/underflow error...
Postat: 8 januari 2007, 02:21:16
Har lite problem med min delayrutin. Först gav den "Stack overflow error". Debuggade och plockade bort lite grejjer och då fick jag underflow error istället.
Får jag lov att presentera min första asm-kod på 20 år!
Delayrutinen är stul... eh, lånad av sodjans kod.
När jag kör koden i MPLAB SIM och har med de sista fyra ; så får jag:
CORE-E0002: Stack under flow error occurred from instruction at 0x0000c4
Plockar jag bort de sista ; så får jag istället:
CORE-E0001: Stack over flow error occurred from instruction at 0x0000be
Litet klipp ur .lst-filen när jag har med de sista ;
Hmm? 
Får jag lov att presentera min första asm-kod på 20 år!

Kod: Markera allt
;************************************************************
processor 18f1320
#include <p18f1320.inc>
;************************************************************
; TFTUVbox
;
; Använder interna oscillatorn (8MHz.)
; Knappar --> AN5 (RB1)
; Öppet lock --> RB7
; Mäta ljus --> AN4 (RB0)
; Ljud <-- RB3
; Styra UV <-- RB4
; Styra TFT <-- RB6
;
;************************************************************
; CONFIG SETTINGS
CONFIG OSC = INTIO2
CONFIG PWRT = ON, BOR = OFF, WDT = OFF, MCLRE = ON
CONFIG STVR = OFF, LVP = OFF, DEBUG = OFF, CP0 = ON
CONFIG CP1 = ON, CPB = ON, CPD = ON, WRT0 = ON
CONFIG WRT1 = ON, WRTB = ON, WRTC = ON, WRTD = ON
CONFIG EBTR0 = ON, EBTR1 = ON, EBTRB = OFF
;************************************************************
; Defines och EUQ
; DISPLAY 12x2
#define D4 LATA, 0
#define D5 LATA, 1
#define D6 LATA, 2
#define D7 LATA, 3
#define RS LATA, 4
#define E LATA,6
; BELYSNING
#define UV_rela PORTB, 4
#define TFT_rela PORTB, 6
; ENCODER
#define Encoder1a PORTB, 5
#define Encoder1b PORTB, 2
;************************************************************
Boot CODE h'0000'
goto Start
;************************************************************
Main CODE
Start
; OSCILLATOR FREQ 8MHz
bcf OSCCON, IDLEN
bsf OSCCON, IRCF2
bsf OSCCON, IRCF1
bsf OSCCON, IRCF0
bsf OSCCON, SCS1
; IN/UTGÅNGAR
movlw b'10000000'
movwf TRISA
movlw b'10100111'
movwf TRISB
; NOLLSTÄLL PORTARNA...
clrf PORTA
clrf PORTB
; INITIERA INTERRUPT
**Plockade bort lite initieringar här**
;************************************************************
; INITIERA DISPLAYEN
lcd_start CODE
bcf RS
movlw b'00000011'
movwf LATA
call delay_1ms
; movlw b'00000011'
; movwf LATA
;************************************************************
loop
goto loop ;Igen!
;************************************************************
; Delay1ms -- 1ms = 2000 cycles @ 8MHz. <-- Ska bli 1ms, koden stämmer inte nu.
dly_vars udata_acs
CNT1 res 1
CNT2 res 1
CNT3 res 1
dly_code CODE
delay_1ms
; return
;
movlw 0x01
movwf CNT1
movlw 0x01
movwf CNT2
movlw 0x10
movwf CNT3
dly_loop
decfsz CNT2
goto dly_loop
movlw 0x08
movwf CNT2
; decfsz CNT1
; goto dly_loop
; decfsz CNT3
; goto dly_loop
return
end
När jag kör koden i MPLAB SIM och har med de sista fyra ; så får jag:
CORE-E0002: Stack under flow error occurred from instruction at 0x0000c4
Plockar jag bort de sista ; så får jag istället:
CORE-E0001: Stack over flow error occurred from instruction at 0x0000be
Litet klipp ur .lst-filen när jag har med de sista ;
Kod: Markera allt
; decfsz CNT1
; goto dly_loop
; decfsz CNT3
; goto dly_loop
0000c4 0012 RETURN 0x0 return
