// Останов всех сервоприводов
{i;
for(i=0;i<fxPWM_CH_NUM;i++)[i] = currAng[i];
}
//----------------------------------------------------------
//
//----------------------------------------------------------main(void)
{addr, MY_ADDR, U1, U2, a1, a2;char num, angle;i;_485Init();();_CH_NUM = 6;
USART_Init(BR57600);
// Установить в начальное положение
SetStartPos();
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,200 kHz
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected=0x00;A=0x00;B=0x07;=0x00;A=0x00;B=0x00;
// Timer/Counter 2 Interrupt(s) initialization=0x01;
// Global enable interrupts
#asm("sei")
//--------------------------------------------------------
// Определяем собственный адрес=ReadByteADC(6);
a1=U1>100;=ReadByteADC(7);=U2>100;_ADDR=a1+a2*2;(MY_ADDR);
// Инициализация регистров[REG_ASTEP] = AStepDefault;[REG_SBLIM] = (signed char)0xff;[REG_SBMASK] = 0x00;[REG_STAT] = 0x00;
//--------------------------------------------------------
// Основной цикл
//--------------------------------------------------------CTL = U485READ;(1)
{
//------------------------------------------------------
// Считываю байты с портов
for(i=0;i<8;i++)[i] = ReadByteADC(i);
//------------------------------------------------------
// Управление сервомашинками
//------------------------------------------------------(i=0;i<fxPWM_CH_NUM;i++)
{(needrotate[i])
{(i, currAng[i]);
needrotate[i] = 0;
}
}
//------------------------------------------------------
// Проверяем условие прерывания операции CMD_SET_INT
//------------------------------------------------------(i=0;i<8;i++)
{= (INT_MASK & (1<<i));(num)
{(ADCVAL[i]>=INT_VALUE) // Блокируем движение
{();_MASK = 0;;
}
}
}(UWasChar1()) addr = ReadCommand(); else continue;(addr!=MY_ADDR) continue;CTL = U485WRITE;_us(DELAY_TIME);(MRcmd)
{CMD_GET_REG:(HEADER_BYTE);(MRfrom);(MY_ADDR);(CMD_SENS_COND);(MAX_REGIST);(i=0;i<MAX_REGIST;i++)(REGIST[i]);;CMD_READ_SENS: // Отправляем значения АЦП(HEADER_BYTE);(MRfrom);(MY_ADDR);(CMD_SENS_COND);(8);(i=0;i<8;i++)(ADCVAL[i]);;CMD_SENS_COND: // Пропускаю командуCMD_ACK:;CMD_PIP: // Пищалка();;CMD_STARTPOS: // Исходное положение();;CMD_SET_FAST:CMD_SET_SLOW:= MRDATA[0];= MRDATA[1];(num<0 || num>=fxPWM_CH_NUM) break;(angle>MaxAng) angle = MaxAng;(angle<MinAng) angle = MinAng;(MRcmd==CMD_SET_FAST) // Быстрый поворот
{[num] = goalAng[num] = angle;((int)num, (int)angle);
}// Медленный поворот[num] = angle;;CMD_SET_VECT_SLOW:CMD_SET_VECT_FAST:(MRlen>fxPWM_CH_NUM) MRlen = fxPWM_CH_NUM;(i=0;i<MRlen;i++)
{= MRDATA[i];(angle>MaxAng) angle = MaxAng;(angle<MinAng) angle = MinAng;(MRcmd==CMD_SET_VECT_FAST) // Быстрый поворот
{[i] = goalAng[i] = angle;(i, (int)angle);
}// Медленный поворот[i]=angle;
};CMD_SET_REG: // Установить значение регистра= MRDATA[0];(num<0 || num>=MAX_REGIST) break;[num] = MRDATA[1];;
//----------------------------------------------------
// Для версии SlaveXPod
//----------------------------------------------------CMD_STOP: // Останов всех сервоприводов();;CMD_SET_INT: // Прервать выполнение операции по состоянию датчика. Аргументы: <маска датчиков> <значение>_MASK = MRDATA[0];_VALUE = MRDATA[1];;
Самое читаемое:
Информационно-вычислительная сеть на основе архитектуры клиент-сервер, предметная область Магазин бытовой техники
Компьютерная сеть обозначает
наборы связанных между собой автономных компьютеров. Два компьютера называются
связанными между собой, если они могут обмениваться информацией. Связь не
обязательно должна осуществляться при помощи медного провода. Могут
использоваться самые разнообразные средства связи, включая волоконную оптику,
...