Sida 1 av 1

asm problem

Postat: 26 mars 2008, 12:27:57
av marcla
hej har försökt kompilera denna kod:

Kod: Markera allt

; File STEP508.ASM
; ... for PIC12C508A microcontroller
; Program to use PIC as a step and direction controller for a unipolar
; step motor.  Step and direction pins are GPIO-5, GPIO-3; GPIO_0, GPIO_1, GPIO_2, GPIO_4,  are ; the windings; in order (driven by NPN small sig transistors or MOSFETS)
; Steps on negative going edge of step pulse.

; CPU configuration
; 	(It's a 12C508A, Internal RC oscillator,
; 	watchdog timer off, power-up timer on)
	LIST   P=12C508A
	processor 12c508A
	include	  <p12c508A.inc>
;	__config  _IntRC_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF

; Declare variables

pattA	equ	H'0D'	;Current step pattern number (0-7) for axis A
lastA	equ	H'0E'   ;Last state of step pin on axis A (1 is high, 0 is low)
inport	equ	H'11'	;Value of port A when read (stored for later access)
temp	equ	H'12'

#DEFINE STEP	inport,5	; Step pulse input
#DEFINE DIR	inport,3	; Direction Input

OPMASK	EQU	B'11000000'
IOMASK	EQU	B'00101000'	; all bits output (except GP3 and GP5)
                                ; GP0 , GP1 , GP2 , GP4  controls The stepper Coils
                                ; GP3 controls direction
				; GP5 Controls Step Pulses


	
	ORG 0
	
; start of main code
;***************************************************
;
;	START OF PIC 12c508A CODE FOR STEP;
;
;***************************************************
;

;------------------------------------------
;****Power on reset startpoint
;------------------------------------------

;***Initialization of program	
	MOVWF	OSCCAL
	
	MOVLW	OPMASK
	OPTION	

; Set GPIO for input & output	
	
	MOVLW	IOMASK
	TRIS	GPIO		




;Clear port and zero motors


	movlw	B'00000001'
	movwf	GPIO
	clrf	lastA
	clrf	pattA

;Loop around for a while to let everything stabilize

	movlw	d'255'
	movwf	inport
loop:	decfsz	inport, f
;	goto loop

;***Basic program loop

;Main routine - check pin states and step on negative edge
;Get port data and store, then check axis A
;A10 checks if old is 0, new is 1 (update register)
;A01 checks if old is 1, new is 0 (step and update register)
;Similarly for axis B

main:	movf	GPIO, w
	movwf	inport
	CLRWDT
A10:	btfsc	lastA, 0
	goto A01
	btfss	STEP
	goto A01
	bsf	lastA, 0
A01:	btfss	lastA, 0
	goto B10
	btfsc	STEP
	goto B10
	bcf	lastA, 0
	goto stepA

B10:	goto main

;------------------------------------------
;***stepA - sub to cycle axis A one Full step
;  Dir of 1 is increase, else decrease

stepA:	btfss	DIR
	decf	pattA, f
	btfsc	DIR
	incf	pattA, f

;Check for pattern overflow and fix


	movf	pattA, w
	XORLW	D'255'
	movlw	D'07'
	btfsc	STATUS, Z
	movwf	pattA

	movf	pattA, w
	XORLW	D'08'
	btfsc	STATUS, Z
	clrf	pattA	

;Get step pattern and send to GPIO on bits 0-1-2-4

	movf	pattA, w
	call 	dcode
	movwf	GPIO

  goto main



;------------------------------------------
;***stepcode - sub to generate bit pattern for number in w (!!MUST BE 0-7!!)
;  pattern is stored in w register 

dcode:	addwf	PCL, f		;     Use below column for the half Step
	retlw	B'00000001'	;0	retlw	B'00000001'	;0
	retlw	B'00000010'	;1	retlw	B'00000011'	;1
	retlw	B'00000100'	;2	retlw	B'00000010'	;2
	retlw	B'00010000'	;3	retlw	B'00000110'	;3
	retlw	B'00000001'	;4	retlw	B'00000100'	;4
	retlw	B'00000010'	;5	retlw	B'00010100'	;5
	retlw	B'00000100'	;6	retlw	B'00010000'	;6
	retlw	B'00010000'	;7	retlw	B'00010001'	;7


;Mandatory end of program command

	end

med kompilatorn MPASM men jag får ett dussin felkoder:

Kod: Markera allt

Warning[215] C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 10 : Processor superseded by command line.  Verify processor symbol.
Warning[215] C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 11 : Processor superseded by command line.  Verify processor symbol.
Error[105]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 12 : Cannot open file (Include File "p12c508A.inc" not found)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 48 : Symbol not previously defined (OSCCAL)
Warning[207] C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 51 : Found label after column 1. (OPTION)
Warning[207] C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 56 : Found label after column 1. (TRIS)
Error[122]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 56 : Illegal opcode (GPIO)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 65 : Symbol not previously defined (GPIO)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 84 : Symbol not previously defined (GPIO)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 116 : Symbol not previously defined (Z)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 116 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 121 : Symbol not previously defined (Z)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 121 : Symbol not previously defined (STATUS)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 128 : Symbol not previously defined (GPIO)
Error[113]   C:\USERS\MARTIN\DESKTOP\EL-PROJEKT\STEP12C.ASM 138 : Symbol not previously defined (PCL)

vad är fel?

Postat: 26 mars 2008, 12:49:01
av jojje
Tex att filen p12c508A.inc inte finns där den bör vara.

Postat: 26 mars 2008, 13:26:57
av Icecap
+ att projektet i MPLAB inte har fått angivit rätt processor.

Postat: 26 mars 2008, 15:46:52
av sodjan
Laddade in din kod och tryckte F10.
Gick perfekt (nästan) direkt, glömde plocka bort LKR filen från den gamla projektet...

Se över dina inställningar.

Men varför bygga för en C krets från stenåldern !!??
Tänker du verkligen använda den ???

Jag ändade till 12F508 och det gick precis lika bra...

Postat: 26 mars 2008, 17:34:01
av marcla
Ok...
skall ladda ner den senaste versionen och för söka igen. (Var tyfligen en gammal version...)

Helt ny inom det här pic så om en 12F508 är bättre så kör jag på den...

Postat: 26 mars 2008, 18:05:28
av Icecap
Bättre och bättre... C-versionen kan programmeras 1 gång, F-versionen många gånger.

Postat: 26 mars 2008, 18:31:40
av bos
Om du är helgrön på PIC så kan du vänta med det här förslaget: Koden är skriven med absolute mode (hårdkodade registerplatser). En nyttig (och inte särskilt svår) övning är att skriva om den till relocatable mode, vilket gör att länkprogrammet själv väljer lämpliga register åt dig, och du behöver bara bry dig om att döpa dem till lagoma bra namn.

Men som sagt, vänta med det tills du blir varm i kläderna :)

Postat: 26 mars 2008, 23:36:04
av sodjan
> skall ladda ner den senaste versionen och för söka igen. (Var tyfligen en gammal version...)

Eftersom 12C508 är en *jättegammal* PIC-modell så är jag ganska säker
på att det i alla fall inte var *det* som var problemet... :-)

Förrutom att skriva om det i relocatable mode, så skulle man samtidigt
kunna flytta det till en *modern* 12F, d.v.s i princip vilken som helst av
"Midrange" (14-bitars) modellerna. Så vitt jag såg så är det bara några
rader som eventuellt behöver justeras.

Men, om det är till ett färdigt projekt, så kan man skaffa en 12F508 och
bara köra det rakt av...