Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
Добавлено: Пт июн 15, 2012 20:34:04
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Либо Вы пытаетесь перейти по условию к несуществующей метке, либо она далековато находится. Относительный переход - это переход не по адресу метки, а переход относительно текущего содержимого счетчика команд PC. На более низком уровне выглядит как brcs PC+XX или PC-XX Команды относительного перехода едят меньше памяти, но на них есть такое вот ограничение. Точно не помню, на сколько единиц можно прыгать. То ли +128\-127 , то ли меньше. Ваша метка Start должна быть немного ближе и тогда проблему можно решить. Если быстродействие не критично, то можно часть кода, находящегося между меткой Start и условием brcs Start вынести в виде подпрограммы. Можно так же постараться развернуть алгоритм другим способом (реализовать по другому)
_________________ I am DX168B and this is my favourite forum on internet!
Дело в том, что это программа из книжки, по которой я учусь программировать. Там написано, что эта команда может перейти через не более чем 64 команды. А там их примерно 100. Сократить не могу, потому что: во-первых, не соображаю как это сделать, а во-вторых, если это пример, то он должен быть рабочим.
Может эту команду заменить на rjmp, но мне нужно чтобы флаг С обрабатывался тоже. Как можно сделать, скажите пожалуйста? Так можно заменить эту команду:
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
Добавлено: Пт июн 15, 2012 20:57:57
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Возможно, компилятор не понимает, что такое PC+2 (думает, что это метка) Сделайте так:
Код:
... brcc Label rjmp Start Label: ...
По сути, PC+2 это прыжок через rjmp Start Просто автор книги решил не заморачиваться с метками, и написал так. А компилятор у него другой был. Видать, какой-то из старых TAVRASMов.
_________________ I am DX168B and this is my favourite forum on internet!
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
Добавлено: Пт июн 15, 2012 21:17:57
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Млин. Чет я тупанул маленько. В принципе да. Можно и так, RJMP достает дальше. В книге проверяют, установлен ли флаг С в регистре SREG, и если установлен, то переход к началу программы. Мы меняем условие. Проверяем состояние флага на сброс и если флаг сброшен, перепрыгиваем переход к началу и идем далее по программе. А если флаг будет установлен, то условие не выполнится и произойдет переход к началу программы (метка Start) А на счет Протеуса: Может есть еще ошибки в программе?
_________________ I am DX168B and this is my favourite forum on internet!
Последний раз редактировалось DX168B Пт июн 15, 2012 21:20:52, всего редактировалось 1 раз.
Млин. Чет я тупанул маленько. В принципе да. Можно и так, RJMP достает дальше. В книге проверяют, установлен ли флаг С в регистре SREG, и если установлен, то переход к началу программы. Мы меняем условие. Проверяем состояние флага на сброс и если флаг сброшен, перепрыгиваем переход к началу и идем далее по программе. А если флаг будет установлен, то условие не выполнится и произойдет переход к началу программы (метка Start)
Да, компилятор принимает. Но в Протеусе полная каша получается. Я думаю, это уже по моей вине. Где-то есть мелочи, которые нужно исправлять, схему переделывать. С другой стороны, так даже лучше, чем просто тупо перепечатывать код из книги, надо и мозг напрячь, поискать ошибки.
Заголовок сообщения: Re: Ошибка команды относительного перехода brcs.
Добавлено: Сб июн 16, 2012 19:43:42
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
AVR Studio 4 понимает. Если Вы в протеусе прикрепили к МК исходник, то лучше попробуйте прицепить к нему скомпилированный в AVR Studio файл прошивки (HEX файл) И проверьте исходники на прочие ошибки. В книгах бывают и опечатки.
_________________ I am DX168B and this is my favourite forum on internet!
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения