Цитата
void del(void) //сюда приходим после прерывания
{
TIMSK=1; //здесь запускаем таймер (разрешаем прерывание)
... //здесь успеваем сделать нечто не связанное с прерыванием
}
Первое: я бы посоветовал так устанавливать бит в регистре
TIMSK|=(1<<TOIE0); //разрешаем прерывания от таймера 0
а так сбрасывать:
TIMSK&=~(1<<TOIE0); //запрещаем прерывания от таймера0
а то не очень понятно, да и при переносе программы с одного АВРа на другой могут быть проблемы, т.к. положение битов может изениться.
Потом запускать и останавливать таймер лучше на мой взгляд с помощью регистра управления таймером TCCR0.
Например так:
TCCR0|=(1<<CS01); //запускаем таймер с частотой Fclk/8, причем остальные биты остаются не тронутыми
TCCR0&=~(1<<CS01); //останавливаем таймер, причем остальные биты остаются не тронутыми
Цитата
void init_peref(void)
{
...
TCCR0=0x02; //делитель clk/8
TCNT0=0x06; //начальное значение = 6
OCR0=0x00; //сравнить с 0 (итого де-то 200 мс)
asm ("sei");
}
Не понятно, как возникают прерывания, регистр TIMSK не инициализирован, а при старте МК этот регистр "нулевой"?
Последнее
Цитата
Здравствуйте господа, такой вопрос:
имеется IAR 4.10B, имеется AVRStudio 4.11.401, имеется MEGA32 (частота 4 МГц), имеется тупая задержка от timer0 де-то 200 мкс
200 МКС??? Микросекунд??? Да это делать на таймере изврат!!! Извините за слова



ИМХО: на таймере задержки делать от 5-10 мс (миллесекунд), иначе таймер будет срабатывать слишком часто и тормозить систему.
Задержку в 200 мкс можно сделать так:
__delay_cycles(0.0002*F_CLK);
где 0.0002 это 200 мкс, а F_CLK частота вашего кварца (4 МГц)
Только нужно подключить #include <intrinsics.h>
Удачи!!!!!
В общем я с утра сегодня не много не в себе, если что-то напутал, то sorry.
Вот если что ICQ 339085018, можно пообщаться.
Выбор.