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

 
 
> Таймер, Непонятно, как можно так писать?
T&D
сообщение Jan 31 2007, 14:27
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Вот фрагмент кода

TimeLoop:
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
cp temp, 80 ; Сравниваем это содержимое с 80
brne TimeLoop ; Если не равно, то возвращаемся к началу цикла


Вот мне непонятна одна вещь:
каждая команда выполняется за один такт (какие-то команды могут выполняться за 2 такта).
Один такт и в регистре таймера счетчика оказывается 1 (предполагается, что делитель частоты не используется).
Следоваетльно в цикле описанном выше можно проскочить момент, когда в регистре таймера счетчика будет 80. Может, я что-то неправильно здесь понимаю?
Конечно, по мне гораздо удобнее воспользоваться прерываниями.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
add
сообщение Feb 1 2007, 09:51
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
то можно переписать след. образом

Уважаемый SasaVitebsk, читайте вчерашний пост №6 :-)
Да еще...:
Цитата
brle TimeLoop ; Если меньше или равно, то возвращаемся к началу цикла

Ну нету такой команды в авр-е, нету...:-)
Цитата
bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить.

При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 15:50
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(add @ Feb 1 2007, 09:51) *
Цитата
bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить.

При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше.


Обьясняю популярно,
TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0. smile.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 1 2007, 16:39
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(bodja74 @ Feb 1 2007, 14:50) *
Обьясняю популярно,
TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0. smile.gif

Кто-то говорил, что при исполнении этого цикла прерывания запрещены?
Если нет, то вероятность проскочить далеко не нулевая.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 20:23
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(IgorKossak @ Feb 1 2007, 16:39) *
Кто-то говорил, что при исполнении этого цикла прерывания запрещены?
Если нет, то вероятность проскочить далеко не нулевая.

И про сторожевой таймер тоже никто не говорил.

2GM

Здесь 0 и 1 ровно 32 такта ,за остальное пардон,пока считать не научился ,вечно блох ловлю smile.gifsmile.gifsmile.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 1 2007, 20:52
Сообщение #6


Ambidexter
*****

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



Цитата(bodja74 @ Feb 1 2007, 17:23) *
2GM

Здесь 0 и 1 ровно 32 такта ,за остальное пардон,пока считать не научился ,вечно блох ловлю smile.gifsmile.gifsmile.gif

Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1
Длительность цикла 3+4+4+4+4+3=30 плюс 4 команды
ldi R20,$05
nop
nop
LABEL3: cbi portB,1
Здесь начнётся нуль. Всего будет 34 такта. Также и с нулём можно посчитать.

На самом деле, надо 16 тактов для 1 и 16 тактов для 0, поскольку период клока равен 7,8125 мкс (128 кГц клок), а период у сигнала с частотой 4000 Гц равен 250 мкс. Т.е. 250/7,8125=32 такта на период, по 16 тактов на 1 и 0 соответственно.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 21:44
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(=GM= @ Feb 1 2007, 20:52) *
Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1
Длительность цикла 3+4+4+4+4+3=30 плюс 4 команды
ldi R20,$05
nop
nop
LABEL3: cbi portB,1
Здесь начнётся нуль. Всего будет 34 такта. Также и с нулём можно посчитать.

Ну что тут скажеш ,это конечно сильно smile.gif
особенно вот это.
Цитата
3+4+4+4+4+3=30

smile.gifsmile.gifsmile.gif

Делаем расклад

LABEL2: sbi portB,1 =2
subi R20,$01 =1
brne LABEL2 =2 (и =1 в конце) итого 5+5+5+5+5+4=29
ldi R20,$05 =1
nop =1
nop =1 итого 32
LABEL3: cbi portB,1

Далее немного сложнее ,так как нужно выполнить еще одно условие ,но в том же духе.


Цитата
На самом деле, надо 16 тактов для 1 и 16 тактов для 0, поскольку период клока равен 7,8125 мкс (128 кГц клок), а период у сигнала с частотой 4000 Гц равен 250 мкс. Т.е. 250/7,8125=32 такта на период, по 16 тактов на 1 и 0 соответственно.


Я уже это понял. sad.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 1 2007, 23:38
Сообщение #8


Ambidexter
*****

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



Цитата(bodja74 @ Feb 1 2007, 18:44) *
Цитата(=GM= @ Feb 1 2007, 20:52) *

Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1
Длительность цикла 3+4+4+4+4+3=22 плюс 4 команды
ldi R20,$05
nop
nop
LABEL3: cbi portB,1
Здесь начнётся нуль. Всего будет 27 тактов. Также и с нулём можно посчитать.

Ну что тут скажешь, это конечно сильно smile.gif
особенно вот это.
Цитата
3+4+4+4+4+3=30

smile.gifsmile.gifsmile.gif

Делаем расклад

LABEL2: sbi portB,1 =2
subi R20,$01 =1
brne LABEL2 =2 (и =1 в конце) итого 5+5+5+5+5+4=29
ldi R20,$05 =1
nop =1
nop =1 итого 32
LABEL3: cbi portB,1

Далее немного сложнее ,так как нужно выполнить еще одно условие ,но в том же духе.

Черт, прошу пардону, у меня табличка старенькая по командам отпечатана, так там sbi и cbi по одному такту(:-(. Ну а тут, 3+4+4+4+4+3=30, оправдаться нечем, рука пронесла (:-)!


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

Сообщений в этой теме
- T&D   Таймер   Jan 31 2007, 14:27
- - Wild007   ЦитатаНепонятно, как можно так писать? А ...   Jan 31 2007, 14:39
- - prottoss   Цитата(T&D @ Jan 31 2007, 18:27) out ...   Jan 31 2007, 14:40
|- - T&D   Цитата(prottoss @ Jan 31 2007, 14:40) Цит...   Jan 31 2007, 14:52
- - Wild007   ЦитатаЕсть вероятность, что мы при таком написании...   Jan 31 2007, 15:06
- - add   Да...уф.. Задача собственно несовсем понятна, даже...   Jan 31 2007, 15:10
|- - T&D   Цитата(add @ Jan 31 2007, 15:10) Да...уф....   Jan 31 2007, 15:23
- - add   ЦитатаЭтот пример не мной придуман, он взят из кни...   Jan 31 2007, 15:27
|- - T&D   Цитата(add @ Jan 31 2007, 15:27) ЦитатаЭт...   Jan 31 2007, 15:36
- - Wild007   Может автор ЦитатаМортона "Микроконтроллеры A...   Jan 31 2007, 15:36
- - SpiritDance   Ржал. Опуфуительная книжка должно быть. Навроде ка...   Jan 31 2007, 15:41
|- - defunct   Цитата(SpiritDance @ Jan 31 2007, 14:41) ...   Jan 31 2007, 15:55
- - add   ЦитатаВсе остальные строчки полностью переписаны и...   Jan 31 2007, 15:49
|- - IgorKossak   Цитата(add @ Jan 31 2007, 14:49) ЦитатаВс...   Jan 31 2007, 16:45
- - Wild007   ЦитатаPS остерегайтесь вводных курсов, читайте сер...   Jan 31 2007, 16:57
|- - zltigo   Цитата(Wild007 @ Jan 31 2007, 15:57) пото...   Jan 31 2007, 18:59
- - smk   Все философское хорошо, но выучить ассеблер нужно....   Jan 31 2007, 21:03
|- - bodja74   Цитата(smk @ Jan 31 2007, 21:03) Все фило...   Jan 31 2007, 23:49
||- - =GM=   Цитата(bodja74 @ Jan 31 2007, 20:49) Цита...   Feb 1 2007, 18:55
|- - singlskv   Цитата(smk @ Jan 31 2007, 21:03) Все фило...   Feb 1 2007, 01:39
- - SasaVitebsk   Цитата(T&D @ Jan 31 2007, 15:27) Вот ...   Feb 1 2007, 00:08
- - bodja74   Если цикл сравнения проходит быстрее клока таймера...   Feb 1 2007, 00:41
|- - SasaVitebsk   Цитата(add @ Feb 1 2007, 10:51) Цитатато ...   Feb 1 2007, 13:54
|- - T&D   Цитата(bodja74 @ Feb 1 2007, 15:50) Обьяс...   Feb 1 2007, 16:12
||- - defunct   Цитата(T&D @ Feb 1 2007, 15:12) А есл...   Feb 1 2007, 17:17
- - T&D   Спасибо за ответы. Можно ещё один вопрос задать? В...   Feb 1 2007, 12:53
|- - Сергей Борщ   Цитата(T&D @ Feb 1 2007, 11:53) Я пра...   Feb 1 2007, 13:06
|- - T&D   Цитата(Сергей Борщ @ Feb 1 2007, 13:06) А...   Feb 1 2007, 13:32
|- - Сергей Борщ   Цитата(T&D @ Feb 1 2007, 12:32) Миган...   Feb 1 2007, 16:00
- - add   Собственно фрагмент книги, из-за которого создана ...   Feb 2 2007, 10:13
- - Wild007   Цитата(add @ Feb 2 2007, 09:13) Собственн...   Feb 2 2007, 10:17


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:13
Рейтинг@Mail.ru


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