CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Help me convert Basic servo program to C

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
robotmlk



Joined: 27 Sep 2008
Posts: 1

View user's profile Send private message

Help me convert Basic servo program to C
PostPosted: Sat Sep 27, 2008 6:28 pm     Reply with quote

Anybody can help me to convert this program to ccs program. This is basic program. I don't know how to create it. Really need your help.

Code:
'Slowspeed
'Manual control of five servomotors using 5 SPDT switches
'Microcontroller PIC 16F873

adcon1 = 7 'Set port a to digital I/O

'Declare variables

b0 var byte    'Use b0 as hold pulse width variable for servo 1
b1 var byte    'Use b1 to hold pulse width variable for servo 2
b2 var byte    'Use b2 to hold pulse width variable for servo 3
b3 var byte    'Use b3 to hold pulse width variable for servo 4
b4 var byte    'Use b4 to hold pulse width variable for servo 5
b6 var byte    'Variable for pause routine
b7 var word    'Variable for pause routine
s1 var byte    'Unassigned delay variable
s2 var byte    'Assigned delay variable

'Initialize servomotor variables

b0 = 150    'Start up position servo 1
b1 = 150    'Start up position servo 2
b2 = 150    'Start up position servo 3
b3 = 150    'Start up position servo 4
b4 = 150    'Start up position servo 5
s2 = 4       'Delay variable

start:

'Output servomotor position

portb = 0       'Prevents potential signal inversion on reset
pulsout portb.7, b0    'Send current servo 1 position out
pulsout portb.6, b1    'Send current servo 2 position out
pulsout portb.5, b2    'Send current servo 3 position out
pulsout portb.4, b3    'Send current servo 4 position out
pulsout portb.3, b4    'Send current servo 5 position out

'Routine to adjust pause value (nom 18) to generate approx 50 Hz update

b7 = b0 + b1 + b2 + b3 + b4
b6 = b7/100
b7 = 15 - b6
pause b7

'Check for switch closures

if portc.3 = 0 then left5    'Is sw1 left active?
if portc.2 = 0 then right5    'Is sw1 right active?
if portc.1 = 0 then left4    'Is sw2 left active?
if portc.0 = 0 then right4    'Is sw2 right active?
if porta.5 = 0 then left3    'Is sw3 left active?
if porta.4 = 0 then right3    'Is sw3 right active?
if porta.3 = 0 then left2    'Is sw4 left active?
if porta.2 = 0 then right2    'Is sw4 right active?
if porta.1 = 0 then left1    'Is sw5 left active?
if porta.0 = 0 then right1    'Is sw5 right active?
goto start

'Routines for servomotor 1

left1:
s1 = s1 + 1
if s1 = s2 then
b0 = b0 + 1          'Increase the pulse width
s1 = 0
endif
if b0 > 254 then max0       'Maximum 2.54 milliseconds
goto start
right1:
s1 = s1 + 1
if s1 = s2 then
b0 = b0 - 1         'Decrease the pulse width
s1 = 0
endif
if b0 < 75 then min0       'Minimum .75 millisecond
goto start
max0:
b0 = 254          'Cap max b1 at 2.54 milliseconds
goto start
min0:
b0 = 75          'Cap min b1 at .75 millisecond
goto start

'Routines for servomotor 2
left2:
s1 = s1 + 1
if s1 = s2 then
b1 = b1 + 1          'Increase the pulse width
s1 = 0
endif
if b1 > 254 then max1       'Maximum 2.54 milliseconds
goto start
right2:
s1 = s1 + 1
if s1 = s2 then
b1 = b1 - 1         'Decrease the pulse width
s1 = 0
endif
if b1 < 75 then min1       'Minimum .75 millisecond
goto start
max1:
b1 = 254         'Cap max b1 at 2.54 milliseconds
goto start
min1:
b1 = 75            'Cap min b1 at .75 millisecond
goto start


'Routines for servomotor 3
left3:
s1 = s1 + 1
if s1 = s2 then
b2 = b2 + 1         'Increase the pulse width
s1 = 0
endif
if b2 > 254 then max2      'Maximum 2.54 milliseconds
goto start
right3:
s1 = s1 + 1
if s1 = s2 then
b2 = b2-1         'Decrease the pulse width
s1 = 0
endif
if b2 < 75 then min2      'Minimum .75 millisecond
goto start
max2:
b2 = 254         'Cap max b2 at 2.54 milliseconds         
goto start
min2:
b2 = 75            'Cap min b2 at .75 millisecond
goto start

'Routines for servomotor 4
left4:
s1 = s1 + 1         'Increase the pulse width
if s1 = s2 then
b3 = b3 + 1
s1 = 0
endif
if b3 > 254 then max3      'Maximum 2.54 milliseconds
goto start
right4:
s1 = s1 + 1
if s1 = s2 then
b3 = b3-1         'Decrease the pulse width
s1 = 0
endif
if b3 < 75 then min3      'Minimum .75 millisecond
goto start
max3:
b3 = 254          'Cap max b3 at 2.54 milliseconds
goto start
min3:
b3 = 75          'Cap min b3 at .75 millisecond
goto start

'Routines for servomotor 5
left5:
s1 = s1 + 1
if s1 = s2 then
b4 = b4 + 1          'Increase the pulse width
s1 = 0
endif
if b4 > 254 then max4       'Maximum 2.54 milliseconds
goto start
right5:
s1 = s1 + 1
if s1 = s2 then
b4 = b4-1         'Decrease the pulse width
s1 = 0
endif
if b4 < 75 then min4       'Minimum .75 millisecond
goto start
max4:         
b4 = 254          'Cap max b4 at 2.54 milliseconds
goto start
min4:
b4 = 75          'Cap min b4 at .75 millisecond
goto start
end
Core2



Joined: 27 Sep 2008
Posts: 22

View user's profile Send private message

PostPosted: Sun Sep 28, 2008 12:05 am     Reply with quote

There are some servo functions in the SERVOS.C file in the DRIVERS folder.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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