|
Микроконтролеры AVR. Джон Мортон. Ошибки в книге? |
|
|
|
Oct 27 2009, 12:40
|

Участник

Группа: Участник
Сообщений: 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 равенства не наступит. Правильно ли я понимаю, или есть какие-то особенности?
|
|
|
|
|
 |
Ответов
|
Oct 27 2009, 14:02
|

Гуру
     
Группа: Свой
Сообщений: 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 (если строго говорить, то плюс ещё сколько-то тактов).
|
|
|
|
|
Oct 28 2009, 07:32
|

Участник

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

|
Цитата(Палыч @ Oct 27 2009, 17:02)  Ну один из примеров, где используется этот принцип, вполне, мне кажется, применим. Как система управления на светофоре. А насчет отодвинем 30 раз? после 4 раз мы же переполним регистр Mark80? Да и таймер, получается, столько не отсчитает.. Цитата(SasaVitebsk @ Oct 27 2009, 17:34)  Стандартным видом задержки является что-то в виде следующего. Что-то похожее есть у автора, например так же секундная задержка: Код ldi Delay1,0x00 ldi Delay2,0x35 ldi Delay3,0x0C
Loop: subi Delay1,1 sbci Delay2,0 sbci Delay3,0 brcc Loop Предыдущий способ предлагается использовать когда нужно во время работы счетчика выполнять другие действия. Но, мне кажется, Вы правы. Без инициализации таймера не работоспособен пример.. Во всяком случае я не понимаю, как он может работать
Причина редактирования: Нарушение п.3.4 правил форума.
|
|
|
|
Сообщений в этой теме
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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|