Сергей писал(а):Почему не симметрично? +- 0.8мс от центра.
действительно. значит я ошибся.
 ![]()  | 
			
					roboforum.ruТехнический форум по робототехнике.  | 
			
				
					 | 
		
avr123.nm.ru писал(а):вот вам и GOOGLE.com
Lirzman писал(а):НАШ девиз - посмотреть и сделать лучше!!!:D :D
//**************ПРОЦЕДУРА ПЕРЕПОЛНЕНИЯ ТАЙМЕРА***********************
SIGNAL(SIG_OVERFLOW0)
{
__asm__("nop;");//Инструкция ничего-неделанья
PORTB CLR_B(gservo);//В ПРОТЕУСЕ загорелся соответствующий пин!!!!
delaysa(period);//Задержка в 20мс, ПОКА использую силы CPU 
}
Lirzman писал(а):
- Код: Выделить всё • Развернуть
 //**************ПРОЦЕДУРА ПЕРЕПОЛНЕНИЯ ТАЙМЕРА***********************
SIGNAL(SIG_OVERFLOW0)
{
__asm__("nop;");//Инструкция ничего-неделанья
PORTB CLR_B(gservo);//В ПРОТЕУСЕ загорелся соответствующий пин!!!!
delaysa(period);//Задержка в 20мс, ПОКА использую силы CPU
}
aesok писал(а):Запомните: НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЗАДЕРЖКИ В ПРЕРЫВАНИЯХ!!!
aesok писал(а):подумайте как обойтись без задежки
Lirzman писал(а):Кстати а почему прерывания должны обрабатываться максимально быстро, там что ограничения стоят какие-то?
char s;
int angle;
 char szInput [3];
s=USART_Receive();
s=s-0x31;
szInput[0] = USART_Receive();
szInput[1] = USART_Receive();
szInput[2] = USART_Receive();
szInput[3] = USART_Receive();
szInput[4] = 0;  // Строка должна заканчиваться 0
 angle = atoi (szInput);
aesok писал(а):Всегда внимательно следите за размерностью масивов!
Lirzman писал(а):Люди!
Так что надо искать выход из данной ситуации!!!!
SIGNAL (....)      
{
    static int cur_state;   
  if(0 == cur_state) {
     вывести '1'
     настроить таймер на задежку t ms
     cur_state = 1;
  } else {
     вывести '0'
     настроить таймер на задежку (20 - t) ms
     cur_state = 0;
  }
}
void delaysa(unsigned int mks)
{
  while(mks>0){
    mks--;
  }
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0