реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> delay через таймер
unkier
сообщение Jan 20 2008, 10:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-01-08
Пользователь №: 34 249



делал по примерам, но не работает, зацикливается на прерывании.
куда копать уже не знаю.
mega64
avr studio 4
winavr

Код
#include <stdio.h>
#include <stdlib.h>
#include <avr/interrupt.h>

uint8_t sleep_value;

ISR(TIMER0_OVF_vect)
{

if (sleep_value>0) {sleep_value--;};

}

void timer_start()
{

// (CL_1)
  TCCR0 = (1<<CS02)|(1<<CS00);  // Timer Clock = system clock / 1024
// (CL_2.0)
  TIFR  = 1<<TOV0;        // Clear TOV0 / Clear pending interrupts
// (CL_2.1)
  TIMSK = 1<<TOIE0;             // Enable Timer 0 Overflow Interrupt

}

void timer_sleep(uint8_t value)
{

sleep_value = value;

timer_start();

for(;;)
{
if (sleep_value == 0) break;
}

}

int main(void)
{

    sei();

    timer_sleep(2);
    cli();

for(;;);

}


help.gif
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 20 2008, 10:34
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



volatile uint8_t sleep_value;

Анатолий.

PS: Кстати у 64 меги тоже есть фюз M103C, в каком он у вас состоянии?

Сообщение отредактировал aesok - Jan 20 2008, 10:47
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2008, 11:07
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



В таких случаях как ваш, обычно прерывания не используют. Прерывания используются, когда паралельно, с отмериванием паузы у вас выполняется какой-нибудь процесс. Хотя и так как у вас - тоже правильно и имеет место быть. smile.gif Я - ошибки не вижу.

вот такой вот пример
Прикрепленные файлы
Прикрепленный файл  timerhw.zip ( 1.52 килобайт ) Кол-во скачиваний: 47
 
Go to the top of the page
 
+Quote Post
unkier
сообщение Jan 20 2008, 12:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-01-08
Пользователь №: 34 249



Цитата(aesok @ Jan 20 2008, 15:34) *
volatile uint8_t sleep_value;

Анатолий.

PS: Кстати у 64 меги тоже есть фюз M103C, в каком он у вас состоянии?


спасибо большое, помогло.
про фьюз не скажу, пока нет доступа к железу, но помню что его никогда не менял.

Цитата(SasaVitebsk @ Jan 20 2008, 16:07) *
В таких случаях как ваш, обычно прерывания не используют. Прерывания используются, когда паралельно, с отмериванием паузы у вас выполняется какой-нибудь процесс. Хотя и так как у вас - тоже правильно и имеет место быть. smile.gif Я - ошибки не вижу.

вот такой вот пример


это кусочек от проекта, там как раз будет параллельная работа

спасибо за пример

тема закрыта
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016