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

 
 
> вызвать прерывание каждые 50мсек
romez777
сообщение Nov 19 2004, 07:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Приветствую.

Продолжаю разборки с atmega162. Вот такой кусок кода, использующий прерывание и таймер (использую WinAVR и AVRstudio для отладки):

#include <inttypes.h>
#include <interrupt.h>
#include <io.h>
#include <sig-avr.h>

SIGNAL(SIG_OUTPUT_COMPARE1A)
{
// далее обработка ......
// .........
}

void Timer1_Init(void)
{
SREG = (1 << SREG_I); // enable global interrupt
TCCR1A = 0x00;
TCCR1B = 0x04; // set prescale
TCCR1B = (1 << CS10) | (1 << WGM12);

TIMSK = (1 << OCIE1A);

// load value
TCNT1H = 0xFE;
TCNT1L = 0x7A;

// set compare register for 50ms
OCR1AH = 0x01;
OCR1AL = 0x86;
}

int main(void)
{
Timer1_Init();

// DDRB = 0xFF;
while (1)
;
return 1;
}

На первый взгляд все правильно, но не сдается мне что не получаю я задержки в 50мсек, а проверить в симуляторе, как предложил IgorKossak, не могу (симулятор не позволяет).

Вообщем, я окончательно запутался smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Fish
сообщение Nov 23 2004, 11:42
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 7-07-04
Из: Novosibirsk
Пользователь №: 281



Цитата(lamerok @ Nov 19 2004, 03:10 PM)
Еще поправим маленько. Вечер глучу малость  blink.gif
Код
#pragma  vector = TIMER1_COMPB_vect
__interrupt void CompareB(void)
{
union  {unsigned char B[2];unsigned int I} Temp;

Temp.B[0]=OCR1BL;
Temp.B[1]=OCR1BH;
Temp.I +=PERIOD;
OCR1BH = Temp.B[1];
OCR1BL = Temp.B[0];
TIFR  |= (1<<OCF1B);

}

Вот теперь точно все правильно smile.gif  :P

2 lamerok
Этот код без сомнения работает, но... пара вопросов:
1. Нафига объединение? Так ведь проще:
OCR1B = TCNT1 + PERIOD;
Ведь, как видно из кода инициализации, таймер работает в нормальном режиме + прерывание по совпадению. Я использую этот режим, хотя Atmel и не рекомендует:
Using the Output Compare to generate waveforms in Normal mode is not recommended, since this will occupy too much of the CPU time.
Хм... Туплю видимо unsure.gif
2. Зачем флаг прерывания вручную сбрасывается?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- romez777   вызвать прерывание каждые 50мсек   Nov 19 2004, 07:54
- - Alex2172   А осциллографа то нет под рукой? (Ну или хотябы св...   Nov 19 2004, 08:13
- - romez777   Цитата(Alex2172 @ Nov 19 2004, 11:13 AM)А осц...   Nov 19 2004, 08:25
- - Styv   Попробуй подели генерируемую частоту (~50мс) на 2...   Nov 19 2004, 08:59
- - KRS   А зачем при инициализации таймера в TCNT писать 0x...   Nov 19 2004, 11:15
- - lamerok   Кодvoid InitTimer (void) {   TCCR1A ...   Nov 19 2004, 11:55
- - lamerok   Блин нечаяно нажалось, первое не смотрите.... Вот ...   Nov 19 2004, 12:07
- - lamerok   Еще поправим маленько. Вечер глучу малость Код#...   Nov 19 2004, 12:10
- - romez777   Цитата(KRS @ Nov 19 2004, 02:15 PM)А зачем пр...   Nov 22 2004, 00:08
- - romez777   Цитата(lamerok @ Nov 19 2004, 03:07 PM)Блин н...   Nov 22 2004, 02:14
- - KRS   Цитата(romez777 @ Nov 22 2004, 03:08 AM)Так п...   Nov 22 2004, 10:27
- - romez777   Цитата(KRS @ Nov 22 2004, 01:27 PM)Изначально...   Nov 22 2004, 10:48
- - KRS   Цитата(romez777 @ Nov 22 2004, 01:48 PM)Но во...   Nov 22 2004, 11:19
- - romez777   Цитата(KRS @ Nov 22 2004, 02:19 PM)Так и долж...   Nov 22 2004, 11:52
- - KRS   Цитата(romez777 @ Nov 22 2004, 02:52 PM)Цитат...   Nov 22 2004, 12:04
- - romez777   Цитата(KRS @ Nov 22 2004, 03:04 PM)А как можн...   Nov 22 2004, 14:37
- - lamerok   romez777 1. В режиме слейва данные передаются толь...   Nov 22 2004, 15:17
- - IgorKossak   Цитата(KRS @ Nov 22 2004, 02:19 PM)Но в любом...   Nov 22 2004, 15:34
- - romez777   Цитата(Fish @ Nov 23 2004, 02:42 PM)2 lamerok...   Nov 23 2004, 12:18
- - lamerok   Fish 1. Это я взял, из программы, где необходимо б...   Nov 24 2004, 04:33
- - lamerok   Там везде должно быть SBCI R17,0xYY вместо SBCI R...   Nov 24 2004, 05:20
- - Fish   Согласен, написал глупость OCR1B = TCNT1 + PERIOD;...   Nov 24 2004, 05:33


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

 


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


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