|
|
View previous topic :: View next topic |
Author |
Message |
MarkJ Guest
|
Translating ASM code to CCS code |
Posted: Fri Mar 14, 2008 11:27 am |
|
|
Hi.
I am using the the asm code and hardware found on this site:
*www.hobby-elec.org/e_step.htm
The hardware is the same ( homemade ) but when i compile the ASM code i get bunch of errors. I have no programming experience with ASM so if someone could be so kind and translate this code into CCS C.
Code: |
;********************************************************
;
; Stepper Motor controller
;
; Author : Seiichi Inoue
;********************************************************
list p=pic16f84a
include p16f84a.inc
__config _hs_osc & _wdt_off & _pwrte_on & _cp_off
errorlevel -302 ;Eliminate bank warning
;**************** Label Definition ********************
cblock h'0c'
mode ;Operation mode
;0=stop 1=right 2=left
count1 ;Wait counter
count2 ;Wait counter(for 1msec)
endc
rb0 equ 0 ;RB0 of PORTB
rb1 equ 1 ;RB1 of PORTB
rb2 equ 2 ;RB2 of PORTB
rb5 equ 5 ;RB5 of PORTB
rb7 equ 7 ;RB7 of PORTB
;**************** Program Start ***********************
org 0 ;Reset Vector
goto init
org 4 ;Interrupt Vector
clrf intcon ;Clear Interruption reg
;**************** Initial Process *********************
init
bsf status,rp0 ;Change to Bank1
clrf trisa ;Set PORTA all OUT
movlw b'00100111' ;RB0,1,2.5=IN RB7=OUT
movwf trisb ;Set PORTB
movlw b'10000000' ;RBPU=1 Pull up not use
movwf option_reg ;Set OPTION_REG
bcf status,rp0 ;Change to Bank0
clrf mode ;Set mode = stop
clrf count1 ;Clear counter
clrf count2 ;Clear counter
movlw b'00000101' ;Set PORTA initial value
movwf porta ;Write PORTA
bsf portb,rb7 ;Set RB7 = 1
btfsc portb,rb5 ;RB5 = 0 ?
goto $-1 ;No. Wait
start
;************* Check switch condition *****************
btfsc portb,rb1 ;RB1(stop key) = ON ?
goto check1 ;No. Next
clrf mode ;Yes. Set stop mode
goto drive ;No. Jump to motor drive
check1
btfsc portb,rb2 ;RB2(right key) = ON ?
goto check2 ;No. Next
movlw d'1' ;Yes. Set right mode
movwf mode ;Save mode
goto drive ;No. Jump to motor drive
check2
btfsc portb,rb0 ;RB0(left key) = ON ?
goto drive ;No. Jump to motor drive
movlw d'2' ;Yes. Set left mode
movwf mode ;Save mode
;******************** Motor drive *********************
drive
movf mode,w ;Read mode
bz start ;mode = stop
bsf portb,rb7 ;Set RB7 = 1
btfsc portb,rb5 ;RB5 = 0 ?
goto $-1 ;No. Wait
movlw d'5' ;Set loop count(5msec)
movwf count1 ;Save loop count
loop call timer ;Wait 1msec
decfsz count1,f ;count - 1 = 0 ?
goto loop ;No. Continue
bcf portb,rb7 ;Set RB7 = 0
btfss portb,rb5 ;RB5 = 1 ?
goto $-1 ;No. Wait
movf porta,w ;Read PORTA
sublw b'000000101' ;Check motor position
bnz drive2 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive1 ;Yes. Right
movlw b'00001001' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive1
movlw b'00000110' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive2
movf porta,w ;Read PORTA
sublw b'000000110' ;Check motor position
bnz drive4 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive3 ;Yes. Right
movlw b'00000101' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive3
movlw b'00001010' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive4
movf porta,w ;Read PORTA
sublw b'000001010' ;Check motor position
bnz drive6 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive5 ;Yes. Right
movlw b'00000110' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive5
movlw b'00001001' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive6
movf porta,w ;Read PORTA
sublw b'000001001' ;Check motor position
bnz drive8 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive7 ;Yes. Right
movlw b'00001010' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive7
movlw b'00000101' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive8
movlw b'00000101' ;Compulsion setting
drive_end
movwf porta ;Write PORTA
goto start ;Jump to start
;************* 1msec Timer Subroutine *****************
timer
movlw d'200' ;Set loop count
movwf count2 ;Save loop count
tmlp nop ;Time adjust
nop ;Time adjust
decfsz count2,f ;count - 1 = 0 ?
goto tmlp ;No. Continue
return ;Yes. Count end
;********************************************************
; END of Stepper Motor controller
;********************************************************
end |
ASM ERRORS:
Symbol not previously defined (_hs_osc)
Symbol not previously defined (_wdt_off)
Symbol not previously defined (_pwrte_on)
Symbol not previously defined (_cp_off)
Symbol not previously defined (intcon)
Symbol not previously defined (status)
Symbol not previously defined (rp0)
Symbol not previously defined (trisa)
Symbol not previously defined (trisb)
Symbol not previously defined (option_reg)
Symbol not previously defined (status)
Symbol not previously defined (rp0)
Symbol not previously defined (porta)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (portb)
Symbol not previously defined (porta)
Symbol not previously defined (porta)
Symbol not previously defined (porta)
Symbol not previously defined (porta)
Symbol not previously defined (porta)
Halting build on first failure as requested. |
|
|
Trent___
Joined: 20 Jun 2007 Posts: 11 Location: London, UK
|
|
Posted: Fri Mar 14, 2008 12:00 pm |
|
|
I would love to but.........
Its not a five min job.
Might be best to stay with the ASM.
The errors you are getting are due to missing definitions.
What compiler are you using, and what file came from the site?
My guess is your missing the header file for the processor you are using. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Mar 14, 2008 12:05 pm |
|
|
If you need help with assembling an ASM file, please ask your questions
on the Microchip forum. That's the best forum for ASM programming:
http://forum.microchip.com/tt.aspx?forumid=11
If you want to program in C, it's better if you look at the CCS example
program for a stepper motor. It's in this directory:
Quote: | c:\program files\picc\examples\ex_step.c |
Last edited by PCM programmer on Fri Mar 14, 2008 12:19 pm; edited 1 time in total |
|
|
Guest2 Guest
|
|
Posted: Fri Mar 14, 2008 12:18 pm |
|
|
Am using MPASM and the source with list and hex file can be found at:
*www.hobby-elec.org/e_step7.htm
By the way, how to use the hex file in MPLAB ?
I will try to find the missing file, if that's the main problem but i dont want to send this to microchip cuz they will give me solution based on microchip C17,18 or 30 toolsuite. Then i would be again on the beginning |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Mar 14, 2008 12:20 pm |
|
|
While you were making your last post, I was editing my post to show you
the CCS example file, Ex_Step.c. Please look at my post again. |
|
|
MarkJ Guest
|
|
Posted: Fri Mar 14, 2008 12:34 pm |
|
|
OK. I will take a look.
Do you know how to use the HEX file in MPLAB.
Am asking this so i can try the original code. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|