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

 
 
> Таймер, Непонятно, как можно так писать?
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
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
Wild007
сообщение Jan 31 2007, 14:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
Непонятно, как можно так писать?
smile.gif smile.gif smile.gif smile.gif
А кто ЭТО так пишет?
Цитата
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp

это smile.gif загружает temp в TCNT0
если нужен такой цикл то пишут через флаг например так:
Код
WAIT_T:    
    WDR
    IN         TMP1,TIFR    ;
    SBRS     TMP1,OCF1A    ;ОЖИДАТЬ ПОЯВЛЕНИЯ ФЛАГА СОВПАДЕНИЯ ТАЙМЕРА(1)(1)
    RJMP     WAIT_T


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 31 2007, 14:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(T&D @ Jan 31 2007, 18:27) *
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
Судя по комментарию, должно выглядеть наоборот:

Код
in temp, TCNT0; !!!


А в Вашем коде Вы наоборот загоняете в TCNT0 то, что находится в temp...


--------------------
Go to the top of the page
 
+Quote Post
T&D
сообщение Jan 31 2007, 14:52
Сообщение #4





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



Цитата(prottoss @ Jan 31 2007, 14:40) *
Цитата(T&D @ Jan 31 2007, 18:27) *
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
Судя по комментарию, должно выглядеть наоборот:

Код
in temp, TCNT0; !!!


А в Вашем коде Вы наоборот загоняете в TCNT0 то, что находится в temp...



Скорее всего и наоборот, но вопрос немного в другом был:
Есть вероятность, что мы при таком написании пропустим момент, когда в регистре таймера счетчика окажется 80? И следовательно не выйдем из цикла, хотя должны были выйти?
Например, когда будет выполняться команда сравнения в регистре таймера будет 80, а в переменную temp сохранилось 79. 79 не равно 80, опять попадаем в цикл. Сохраняем в переменную temp значение таймера счетчика, а в нем уже 81 или 82, таким образом мы проскакиваем значение 80.
Или я что-то в этом недопонимаю?
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 31 2007, 15:06
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
Есть вероятность, что мы при таком написании пропустим момент, когда в регистре таймера счетчика окажется 80? И следовательно не выйдем из цикла, хотя должны были выйти?
Например, когда будет выполняться команда сравнения в регистре таймера будет 80, а в переменную temp сохранилось 79. 79 не равно 80, опять попадаем в цикл. Сохраняем в переменную temp значение таймера счетчика, а в нем уже 81 или 82, таким образом мы проскакиваем значение 80.
Или я что-то в этом недопонимаю?

Да, и это можно проверить в AVR_Studio, запустив отладчик и посмотреть как будет меняться переменная temp в этом цикле.


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
add
сообщение Jan 31 2007, 15:10
Сообщение #6


Местный
***

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



Да...уф.. Задача собственно несовсем понятна, даже совсем непонятна!? Чем Вам не нравятся прерывания? зачем программно следить за переполнением?
Ну абстрагируясь :-), в вашем случае должно быть так:
TimeLoop:
in temp,TCNT0;Сохраняем содержимое регистра таймера счетчика в temp
cpi temp, 80 ; Сравниваем это содержимое с 80 (именно cpi!!!)
brlo TimeLoop ; Если меньше, то возвращаемся к началу цикла

Зы: Я заранее извиняюсь, может это и не так, но тема и вопрос очень тянут наизвечную проблему новичков "хочу в свои" и "как мне набрать постов.." Надеюсь что это не так.:-)


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
T&D
сообщение Jan 31 2007, 15:23
Сообщение #7





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



Цитата(add @ Jan 31 2007, 15:10) *
Да...уф.. Задача собственно несовсем понятна, даже совсем непонятна!? Чем Вам не нравятся прерывания? зачем программно следить за переполнением?
Ну абстрагируясь :-), в вашем случае должно быть так:
TimeLoop:
in temp,TCNT0;Сохраняем содержимое регистра таймера счетчика в temp
cpi temp, 80 ; Сравниваем это содержимое с 80 (именно cpi!!!)
brlo TimeLoop ; Если меньше, то возвращаемся к началу цикла

Зы: Я заранее извиняюсь, может это и не так, но тема и вопрос очень тянут наизвечную проблему новичков "хочу в свои" и "как мне набрать постов.." Надеюсь что это не так.:-)

Этот пример не мной придуман, он взят из книги Мортона "Микроконтроллеры AVR. Вводный курс".
Мне лично прерывания нравятся, и я бы их использовал. Но этот автор привел такой пример и утверждает, что он работает, хотя по мне, так мы можем очень долго не выйти из этого цикла, если идет проверка именно на равенство какому-либо числу.
Go to the top of the page
 
+Quote Post
add
сообщение Jan 31 2007, 15:27
Сообщение #8


Местный
***

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



Цитата
Этот пример не мной придуман, он взят из книги Мортона "Микроконтроллеры AVR. Вводный курс".

:-) найду, посмеятся на досуге...:-) тот код, который Вы привели, наполовину корректен с точки зрения компилятора..(1я 4я строка норм. 3 и 4-я явные ошибки )


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


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Может автор
Цитата
Мортона "Микроконтроллеры AVR. Вводный курс".

и написл так, чтобы Вы шевелили серым веществом, а не переписывали бездумно приведенные примеры. smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
T&D
сообщение Jan 31 2007, 15:36
Сообщение #10





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



Цитата(add @ Jan 31 2007, 15:27) *
Цитата
Этот пример не мной придуман, он взят из книги Мортона "Микроконтроллеры AVR. Вводный курс".

:-) найду, посмеятся на досуге...:-) тот код, который Вы привели, наполовину корректен с точки зрения компилятора..(1я 4я строка норм. 3 и 4-я явные ошибки )

В строчке я сам немного напортачил
cp temp, 80 (здесь, конечно, нужно было написать cpi temp, 80)
в оригинале у автора написано:
cp temp, Mark80 , где Mark80 - регистр общего назначения (автор дал ему такое имя)

Все остальные строчки полностью переписаны из книги.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jan 31 2007, 15:41
Сообщение #11


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Ржал. Опуфуительная книжка должно быть. Навроде какой-нибудь "С за 21 час". Интересно откуда такие аффтары берутся и как они собственно в печать пролезают.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
add
сообщение Jan 31 2007, 15:49
Сообщение #12


Местный
***

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



Цитата
Все остальные строчки полностью переписаны из книги.

Да, есть такое :-) (стр.63). Дорогой друг! Такое(опечатки, неточности, грубые ошибки) в технической литературе встречаеться оч. часто :-) как это неприскорбно... Сам натыкался не раз...К примеру в серии про Мегу, классик, и т.д. Тут можно согласится с Wild007 про серые клеточки..:-)


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


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SpiritDance @ Jan 31 2007, 14:41) *
Интересно откуда такие аффтары берутся и как они собственно в печать пролезают.

Из banned курса вестимо..
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 31 2007, 16:45
Сообщение #14


Шаман
******

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



Цитата(add @ Jan 31 2007, 14:49) *
Цитата
Все остальные строчки полностью переписаны из книги.

Да, есть такое :-) (стр.63). Дорогой друг! Такое(опечатки, неточности, грубые ошибки) в технической литературе встречаеться оч. часто :-) как это неприскорбно... Сам натыкался не раз...К примеру в серии про Мегу, классик, и т.д. Тут можно согласится с Wild007 про серые клеточки..:-)

Есть ещё одно прискорбное наблюдение - чем ниже интеллект или преподавательские способности аффтара, тем больше его тянет писАть подобные "курсы". См. об одном из таких здесь.

PS остерегайтесь вводных курсов, читайте серьёзные книги сразу.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 31 2007, 16:57
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
PS остерегайтесь вводных курсов, читайте серьёзные книги сразу.

К сожалению, новичёк всегда начинает с "вводных курсов", потом приходит на такой форум как наш где и понимает, что прочитанное ранее надо забыть и читать только "серьёзные книги" . smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post

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

 


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


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