Varför fungerar inte denna assablerkod????

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
m_josefsson74
Inlägg: 72
Blev medlem: 22 juni 2003, 23:00:56
Ort: Torsås

Varför fungerar inte denna assablerkod????

Inlägg av m_josefsson74 »

Jag vill köra en stegmotor 100 steg framåt sen 150 steg bakåt i snabbare hastighet
När jag försöker assemblera får jag ett error som säger Symbol not previously defined (wait_2s) osv i samma feltyp

Här är koden:


#include "P16f877A.inc"
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF
LIST P=16A877A R=DEC
;*****************************VARIABELS***************************
Cblock 0x020
HIcnt
LOcnt
LOOPcnt

endc
;*************************Defines**********************************
#define STEP1 .5
#define STEP2 .9
#define STEP3 .10
#define STEP4 .6
#define POS1 .100
#define POS2 .150
;******************************************************************
pausems macro par1
local Loop1
local dechi
local Delay1ms
local Loop2
local End
movlw high par1 ;higher byte of parameter 1 goes to HIcnt
movwf HIcnt
movlw low par1 ;lower byte of parameter 1 goes to LOcnt
movwf LOcnt
Loop1
movf LOcnt, f ;Decrease HIcnt and Locnt necessary
btfsc STATUS, Z ;number of times and call subprogram Delay 1ms
goto dechi
call Delay1ms
decf LOcnt, f
goto Loop1
dechi
movf HIcnt, f
btfsc STATUS, Z
goto End
call Delay1ms
decf HIcnt, f
decf LOcnt, f
goto Loop1
Delay1ms: ;Delay1ms produce 1ms delay
movlw .100 ;100*10us=1ms
movwf LOOPcnt ;Loopcnt<-100
Loop2:
nop ;1
nop ;2
nop ;3
nop ;4
nop ;5
nop ;6
nop ;7
decfsz LOOPcnt, f
goto Loop2 ;Time period necessary to execute loop Loop2
return ;equals 10us
End
endm


;***************************PROGRAM START**************************
ORG 0
goto init
ORG 4
goto init

;**************************MAIN ROUTINE****************************
init
bcf STATUS,RP1
bsf STATUS,RP0 ;bank 1
movlw b'00000000' ;Set trisb to output
movwf TRISB
bcf STATUS, RP0 ;back to bank 0
goto Main

Main
call Plus
call wait_2s

call Minus
call wait_2s
goto Main ;do this loop forewer


Plus
movlw STEP1
movwf PORTB
call wait_50
movlw STEP2
movwf PORTB
call wait_50
movlw STEP3
movwf PORTB
call wait_50
movlw STEP4
movwf PORTB
call wait_50

decfsz POS1, f
goto Plus
return

Minus
movlw STEP4
movwf PORTB
call wait_10
movlw STEP3
movwf PORTB
call wait_10
movlw STEP2
movwf PORTB
call wait_10
movlw STEP1
movwf PORTB
call wait_10

decfsz POS2, f
goto Minus
return
wait_50
pausems .500 ;in macro
return

wait_10
pausems .100 ;in macro
return

wait_2s
pausems .2000 ;in macro
return


End
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

jag ser heller inte felet men varför ska du ha s med? Kan det inte bara stå wait_2? Fast det blir kanske inte som du tänkt dig då.

Förresten, det kan inte vara så att subrutinerna ska komma före main programmet? Har för mig att jag läst något om det förut. Vet inte riktigt varför men det har väl något med hur programmet laddas. Det borde ju göra att Plus och Minus inte funkar men man vet aldrig.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Lyckades köra den genom gpasm efter att ha bytt namn på "End" i macrot.

Vet inte om det är det som ställer till det för dig (antar att du använder MPLAB).
Men "end" är väl ett reserverat ord, så det kanske inte är så bra som label...
m_josefsson74
Inlägg: 72
Blev medlem: 22 juni 2003, 23:00:56
Ort: Torsås

Inlägg av m_josefsson74 »

Det gick bra till slut!!!!
Det var END som ställde till det i macrot, fungerar fin fint nu!!!

//Michaël
Skriv svar