Вс июн 17, 2007 23:27:44
Вс июн 17, 2007 23:45:16
Пн июн 18, 2007 10:10:24
Пн июн 18, 2007 11:00:45
Пн июн 18, 2007 16:25:20
tych писал(а):ТРЕНЕРУЙТЕ ВНИМАНИЕ !!!
на странице 5a есть:
1.2.4. Указатели
Обчитаешься.
Пн июн 18, 2007 19:28:28
#include <tiny2313>
#include <delay>
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
PORTB.0=~PORTB.0;
}
void main(void)
{
DDRB=0xFF;
TCCR0B|=(1<<CS00);//|(1<<CS02);
#asm("SEI");
while(1);
}
Пн июн 18, 2007 20:02:46
Negor писал(а):Продолжаю изучать таймеры:чего не хватает в этом коде чтобы по переполнению таймера состояние на PORTB.0 изменилось на противоположное?
Пн июн 18, 2007 20:08:05
tych писал(а):Нужно включить прервание от таймера.
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
PORTB.0=~PORTB.0;
}
#asm("SEI")
Пн июн 18, 2007 20:27:43
Пн июн 18, 2007 20:49:56
Пн июн 18, 2007 21:14:19
Negor писал(а):Я глазами проел 3-ю страницу курса, но кроме того что надо установить 7 бит статус регистра ничего не увидел...
в CodeVision:
interrupt [прерывание] void adc_isr(void)
{
код выполняемый при возникновении
разрешенного локально и глобально прерывания
}
Пн июн 18, 2007 21:21:19
Пн июн 18, 2007 21:25:28
Пн июн 18, 2007 23:17:09
Вт июн 19, 2007 00:06:23
#include <tiny2313>
#include <delay>
unsigned char FrstState,ScndState,RealState,Flag;
unsigned char KeyState(void)
{
FrstState=PIND; //Запоминаем состояние кнопок
delay_ms(10); //Задержка на антидребезг
ScndState=FrstState & PIND; //Контрольная проверка на нажатие
RealState=(ScndState) & ~(Flag); //Состояние изменилось?
Flag=ScndState; //Флаг для контроля состояния при след проверке
return RealState;
}
void main(void)
{
unsigned char i=0;
DDRB=0xFF;
DDRD=0x00;
while(1)
{
if (KeyState()!=0) i++;
}
}
Вт июн 19, 2007 07:12:21
Negor писал(а):Для новичков сообщаю - не наступайте на грабли - читайте даташит(не знаю почему, но с даташитом мне веселее чем с Визардом)
Вт июн 19, 2007 09:45:25
Negor писал(а):Итак: требуется критика...
Вт июн 19, 2007 18:04:43
Кашпо писал(а):Negor писал(а):Итак: требуется критика...
есть ещё один вариант. проверяем состояние кнопок по переполнению таймера (например 100 раз в секунду)
если в предыдущий раз и в текущий раз состояние кнопки не изменилось, значит пишем это состояние в какую-либо глобальную переменную.
в основном цикле программы (да и вообще из любого места) для того чтобы узнать нажата ли кнопка или нет - достаточно заглянуть в эту переменную.
Ср июн 20, 2007 03:29:34
Negor писал(а):если кнопка нажата длительное время - реакции на нажатие не поступало. т.е. допустим кнопка нажата в течении десяти циклов, но реакция на нажатие была только в первом и больше не произойдёт, пока кнопку не отпустят...
Ср июн 20, 2007 15:55:14