Возникла необходимость управлять 10-ю сервоприводами. Написал прошивку, все работает но на преобразование принятой строки в значение положения каждой сервомашинки тратится слишком много времени. Подскажите, можно ли как- нибудь упростить преобразования для экономии времени?
Code
Define osc 20
DEFINE HSER_BAUD 57600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 21
DEFINE HSER_CLROERR 1
serv0 var word
serv1 var word
serv2 var word
serv3 var word
serv4 var word
serv5 var word
serv6 var word
serv7 var word
serv8 var word
serv9 var word
trisc = %11111100
trisb = %00000000
gpsdata var byte[41]
main:
HSERIN 100, main, [WAIT("A"), STR gpsdata\41]
serv0 = (gpsdata[0]-$30)*1000+ (gpsdata[1]-$30)*100+ (gpsdata[2]-$30)*10+ (gpsdata[3]-$30)
serv1 = (gpsdata[4]-$30)*1000+ (gpsdata[5]-$30)*100+ (gpsdata[6]-$30)*10+ (gpsdata[7]-$30)
serv2 = (gpsdata[8]-$30)*1000+ (gpsdata[9]-$30)*100+ (gpsdata[10]-$30)*10+ (gpsdata[11]-$30)
serv3 = (gpsdata[12]-$30)*1000+ (gpsdata[13]-$30)*100+ (gpsdata[14]-$30)*10+ (gpsdata[15]-$30)
serv4 = (gpsdata[16]-$30)*1000+ (gpsdata[17]-$30)*100+ (gpsdata[18]-$30)*10+ (gpsdata[19]-$30)
serv5 = (gpsdata[20]-$30)*1000+ (gpsdata[21]-$30)*100+ (gpsdata[22]-$30)*10+ (gpsdata[23]-$30)
serv6 = (gpsdata[24]-$30)*1000+ (gpsdata[25]-$30)*100+ (gpsdata[26]-$30)*10+ (gpsdata[27]-$30)
serv7 = (gpsdata[28]-$30)*1000+ (gpsdata[29]-$30)*100+ (gpsdata[30]-$30)*10+ (gpsdata[31]-$30)
serv8 = (gpsdata[32]-$30)*1000+ (gpsdata[33]-$30)*100+ (gpsdata[34]-$30)*10+ (gpsdata[35]-$30)
serv9 = (gpsdata[36]-$30)*1000+ (gpsdata[37]-$30)*100+ (gpsdata[38]-$30)*10+ (gpsdata[39]-$30)
portc = 0
pulsout portc.1, serv0
portc = 0
pulsout portc.0, serv1
portc = 0
portb = 0
pulsout portb.0, serv2
portb = 0
pulsout portb.1, serv3
portb = 0
pulsout portb.2, serv4
portb = 0
pulsout portb.3, serv5
portb = 0
pulsout portb.4, serv6
portb = 0
pulsout portb.5, serv7
portb = 0
pulsout portb.6, serv8
portb = 0
pulsout portb.7, serv9
portb = 0
goto main