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

 
 
> Вопрос о таймере, остановка процесса по окончанию счета
-Alexey-
сообщение Jan 30 2008, 13:21
Сообщение #1





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



Нужно сделать так, чтобы во время отсчета таймером 0 интервала времени и до его окончания выполнялись некоторые действия, после таймер заново перезагружался.
Например, для тестового варианта посылка в UART. UART отдельно работает, проверен.
В данном варианте я жду появления флага совпадения OCF0.
В результате выполнения получаю только единицы между START и END.
А должны быть 16-ть раз поочередно N-единиц и N-нулей.
Т.е. while выполняется только первый. Да и выполняется сам код слишком быстро, а должен 8сек работать.
Заранее спасибо.

Используются: CVavr, mega16.

Код
#include <mega16.h>
#include <stdio.h>

#define F_XTAL 1000000L
#define SPEED 2L

void Start_Timer0(void)
{
TCCR0 = 0b00111101;        // CTC
OCR0=F_XTAL/2L/1024L/SPEED-1;
TIMSK = 0b11;
}

void Stop_Timer0(void)
{
TCCR0=0;
}

void send1(void)
{
  while ((TIFR & 0b10)==0)
  {
  putsf("1");
  };
}

void send0(void)
{
  while ((TIFR & 0b10)==0)
  {
  putsf("0");
  };
}


void main ()
{
[...]        //UART init
putsf("\nSTART\n");

Start_Timer0();
for (i=0;i<16;i++)
  {
  if ((0x5555&(1<<i))) send1(); else send0();
  };
Stop_Timer0();

putsf("\nEND");
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Jan 30 2008, 13:54
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(-Alexey- @ Jan 30 2008, 13:21) *
Нужно сделать так, чтобы во время отсчета таймером 0 интервала времени и до его окончания выполнялись некоторые действия, после таймер заново перезагружался. В данном варианте я жду появления флага совпадения OCF0.
Т.е. while выполняется только первый. Да и выполняется сам код слишком быстро, а должен 8сек работать

1) OCR0 у вас 8-битный, а вы пытаетесь записать туда число 488.

2) После того как OCF0 установится, надо бы его сбросить, а то он всё время будет в 1, невзирая ни на что.

3) Что делает ваша программа после выполнения putsf("\nEND")?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post



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

 


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


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