Сергей писал(а):Почему не симметрично? +- 0.8мс от центра.
действительно. значит я ошибся.
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--;
}
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4