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

 
 
> Микроконтролеры AVR. Джон Мортон. Ошибки в книге?
Merovey
сообщение Oct 27 2009, 12:40
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 24-08-07
Из: Санкт-Петербург
Пользователь №: 30 043



Добрый день!
Речь идет не о банальных опечатках, а о более глобальных ошибках.
Например, вот фрагмент кода, который формирует секундную задержку для микроконтроллера AT90S1200. Кварц на 2.4576 МГц.

Код
     ldi Count30,30
     ldi Mark80,80  
TimeLoop:
    out TCNT0,temp  
    cp temp,Mark80  
    brne TimeLoop    
    subi  Mark80,-80
    dec   Count30    
    brne  TimeLoop

Понимаю, что вместо out TCNT0,temp должно быть in temp,TCNT0. Быстрей всего это косяк переводчика. Но насколько работоспособен сам принцип формирования такой задержки? Насколько я понял, таймер считает до 255 и начинает заново, значит после 3-х циклов, когда Mark80 превысит значение 255 равенства не наступит. Правильно ли я понимаю, или есть какие-то особенности?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Oct 27 2009, 14:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Merovey @ Oct 27 2009, 15:40) *
Но насколько работоспособен сам принцип формирования такой задержки?
Вы не привели начало программы... Но, если инициализация проведена "правильно", и пределитель = 1024, то 30 * 80 * 1024 = 2457600. Вроде всё правильно. Насколько это жизнеспособно? Имхо, такие (по продолжительности) задержки в программе - самоубийство (разве, что что-то совсем простое проектируется, но таких устройств в жизни не бывает). Ставить задержки в программу можно (нужно) только если требуемая задержка сопоставима по продолжительности со временем работы процедуры обработки прерывания. Учебный пример может быть далёк от жизни, поскольку он иллюстрирует некий приём, метод работы.

Цитата(Merovey @ Oct 27 2009, 16:46) *
Код
subi Mark80, -80

на 4 итерации, следовательно мы превысим 255
Регистр таймера - 8 бит, и переменная Mark80 - тоже. В переменной Mark80 хранится значение регистра таймера, уменьшенное на 80. Т.е. через 80*1024 тактов генератора счетный регистр таймера примет значение, такое же как и Mark80, значение в Mark80 "отодвинем" ещё на 80 и счетчик Count30 уменьшим на единицу. И так 30 раз (первоначальное значение счетчика). Итого: через 30*80*1024 тактов покинем TimeLoop (если строго говорить, то плюс ещё сколько-то тактов).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Merovey   Микроконтролеры AVR. Джон Мортон. Ошибки в книге?   Oct 27 2009, 12:40
- - V_G   А как байт (Mark80) может превысить 255? А какую ч...   Oct 27 2009, 13:33
- - Merovey   ЦитатаА как байт (Mark80) может превысить 255? Раб...   Oct 27 2009, 13:46
|- - Merovey   Цитата(Палыч @ Oct 27 2009, 17:02) Ну о...   Oct 28 2009, 07:32
|- - Палыч   Цитата(Merovey @ Oct 28 2009, 10:32) А на...   Oct 28 2009, 07:57
- - SasaVitebsk   Как переводчик может перепутать: "out TCNT0,t...   Oct 27 2009, 14:34
|- - Палыч   Цитата(SasaVitebsk @ Oct 27 2009, 17:34) ...   Oct 27 2009, 14:59
|- - ReAl   Цитата(SasaVitebsk @ Oct 27 2009, 16:34) ...   Oct 27 2009, 15:03
|- - SasaVitebsk   Цитата(ReAl @ Oct 27 2009, 18:03) Вычитае...   Oct 27 2009, 17:26
- - Merovey   Ну вот пример программы из книги, где это использу...   Oct 28 2009, 12:31
|- - Палыч   Цитата(Merovey @ Oct 28 2009, 15:31) Код....   Oct 28 2009, 13:11
|- - Merovey   Цитата(Палыч @ Oct 28 2009, 16:11) P.S. У...   Oct 29 2009, 06:02
- - SasaVitebsk   Разобраться с самим МК, конечно надо. И немного ас...   Oct 30 2009, 09:05
- - Valek   У меня есть вопрос какраз по этой книге. Когда мы ...   Nov 1 2012, 08:00
|- - bookd   Цитата(Valek @ Nov 1 2012, 11:00) У меня ...   Nov 1 2012, 08:12
- - Valek   В моей формуле Т - это время задержки (сек) которо...   Nov 1 2012, 12:36
|- - bookd   Цитата(Valek @ Nov 1 2012, 15:36) В моей ...   Nov 1 2012, 12:58
- - Valek   УРА!!! УРА!!! УРА!...   Nov 1 2012, 13:44


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

 


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


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