а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?ploop писал(а): Когда в исходном коде мы делаем массив, мы ставим метку. Ну допустим команда rjmp метка сразу заносит адрес метки в счетчик, но как бы поделённый на два, чтоб программа перепрыгнула куда надо. Но нам надо не прыгать туда а извлечь данные, т.е. нужен реальный адрес.
Мелкие вопросы по МК и ПЛИС.
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Мелкие вопросы по МК и ПЛИС.
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Значит, не умеете пользоваться поиском по страницеMr.Denis писал(а):Что-то я там не нашёл ATmega16U2
Это семейство "USB AVR". Правда, там действительно есть только U2, да и то с пометкой "1кв 2010", т.е. данные на странице немного устаревшие.
Будет выдавать совсем не тот адрес, т.к. младший бит адреса указывает, старший или младший байт надо брать, а умножение на два эквивалентно сдвигу влево на один разряд.Necroteeth писал(а):а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Мелкие вопросы по МК и ПЛИС.
Такой вопрос: заказывал ща детали, хотел до кучи пару tiny2313 заказать и с удивлением обнаружил, что mega48 чуть ли не пополам дешевле. Читаю даташиты - так она и "нафарширована" покруче (мега же)...
В чём подвох?
В чём подвох?
Re: Мелкие вопросы по МК и ПЛИС.
Necroteeth, в студии кажется можно было открыть программу сразу в машинных кодах. Попробуйте написать несколько строк (хоть nop'ов) и метку с rjmp. И дальше пойдите отладчиком, поглядывая на счетчик команд и машинный код. И как метка изменяет его. Так же можно добавить данные (.db) их тоже будет видно.
И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)
И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Может быть, Мега - складская позиция, а Тиньку будут заказывать у других. Корпус, опять же...ploop писал(а):В чём подвох?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Мелкие вопросы по МК и ПЛИС.
rjmp, если я правильно понял, это относительный переход, а jmp абсолютный, то бишь rjmp имеет ограничения по дальнобойности, но зато меньше байт памяти требует (судя по program counter).ploop писал(а): И можете побаловаться с RJMP и JMP (надеюсь, отличие представляете?)
вроде как rjmp 2 байтная команда, а jmp 4-байтная.
если мы для обращения к .db используем умножение на 2, почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?
Re: Мелкие вопросы по МК и ПЛИС.
Да потому, что это не метка, а тупо число. Посмотрите, что в файле, который в include прописан. Ну например, у меня в tn2313.inc есть вот что:почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?
Код: Выделить всё
;*****************************************************************************
; Data Memory Declarations
;*****************************************************************************
.equ RAMEND = 0xDF ; Highest internal data memory (SRAM) address.
;(128 Bytes RAM + IO + REG)
.equ EEPROMEND = 0x7F ; Highest EEPROM address.
;(128 Bytes)
.equ EEADRBITS = 7 ; no. of bits in EEPROM address register
.equ RAM_SIZE = 128
Кстати, так любые константы задавать можно. Очень удобно.
Re: Мелкие вопросы по МК и ПЛИС.
Можно несколько по другому пояснить:Necroteeth писал(а):если мы для обращения к .db используем умножение на 2, почему при инициализации стека Ramend тоже не умножаем на 2? в чем отличие этих двух ситуаций?
Программный счетчик (РС) использует пословную адресацию. Слово - это два байта, которые составляют одну строку для этого счетчика. РС считает строки с дискретностью еденицы. Но в каждой строке - 2 байта. Если встречается метка, то ей присваивается значение счетчика команд, т. е. номера строки, перед которой стоит эта метка. Поэтому, например, чтобы по команде правильно адресовать метку, ей нужно сообщить абсолютный байтовый адрес, а не словный, как у РС. Для этого адрес метки умножается на 2, как в тех примерах, что вы выше приводили.
По поводу Ramend вам уже пояснил ploop. Дополнительно можно сказать, что если в указатель стека загружаем адрес начала стека, то таких премудростей, как с программной памятью не будет, т. к. адресация RAM, т. е. счетчика оперативной памяти - байтовая.
Последний раз редактировалось ValBag Ср янв 19, 2011 00:38:09, всего редактировалось 3 раза.
Re: Мелкие вопросы по МК и ПЛИС.
Да нет, пропускать ничего не будет, но будет их брать совсем из другой области флеши, что лежит "на полпути" между желаемой областью и нулем ( начало памяти ).Necroteeth писал(а): а что тогда будет с данными, если адрес на 2 не буду умножать? программа будет пропускать половину данных?
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Мелкие вопросы по МК и ПЛИС.
если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?ValBag писал(а):Можно несколько по другому пояснить:
Программный счетчик (РС) использует пословную адресацию. Слово - это два байта, которые составляют одну строку для этого счетчика. РС считает строки с дискретностью еденицы. Но в каждой строке - 2 байта. Если встречается метка, то ей присваивается значение счетчика команд, т. е. номера строки, перед которой стоит эта метка. Поэтому, например, чтобы по команде правильно адресовать метку, ей нужно сообщить абсолютный байтовый адрес, а не словный, как у РС. Для этого адрес метки умножается на 2, как в тех примерах, что вы выше приводили.
По поводу Ramend вам уже пояснил ploop. Дополнительно можно сказать, что если в указатель стека загружаем адрес начала стека, то таких премудростей, как с программной памятью не будет, т. к. адресация RAM, т. е. счетчика оперативной памяти - байтовая.
Вот в данном случае я правильно написал?
Код: Выделить всё
LDI ZL, LOW(M1*2)
LDI ZH, HIGH(M1*2)
ICALL M1
M1: NOP
NOP
Re: Мелкие вопросы по МК и ПЛИС.
Нет, неправильно. Если метка используется для выполнения команды, используется словная адресация, поскольку счетчик команд оперирует словами, а не байтами. А если для команды LPM, то адресация данных БАЙТОВАЯ.Necroteeth писал(а): если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
Вот в данном случае я правильно написал?Код: Выделить всё
LDI ZL, LOW(M1*2) LDI ZH, HIGH(M1*2) ICALL M1 M1: NOP NOP
Re: Мелкие вопросы по МК и ПЛИС.
Метка, как и в примере выше - константа, тоже подставляется компилятором в hex-файл в виде числа. Разница только в том, что константа сразу интерпретируется как число, а метка вычисляется исходя из того, сколько команд было до неё, начиная с директивы .org только в словах, а не в байтах.если я вас правильно понял, то ЛЮБУЮ метку надо таким образом адресовать - будь она хоть идентификатором массива, хоть просто меткой перехода, так?
- Necroteeth
- Потрогал лапой паяльник
- Сообщения: 362
- Зарегистрирован: Вс окт 10, 2010 17:43:48
- Откуда: Воронеж
Re: Мелкие вопросы по МК и ПЛИС.
кажется, начинает понемногу доходить... во всем виновата команда LPM, которая берет из регистровой пары Z байтовый адрес. она одна такая или какие-то команды тоже работают с байтовыми адресами?
-
kyraxinoff
- Родился
- Сообщения: 13
- Зарегистрирован: Пн апр 19, 2010 09:58:37
Re: Мелкие вопросы по МК и ПЛИС.
прошу помощи с прерыванием от компаратора на mega8.
не понимаю как сформировать импульс примерно длительностью 5мс, на одной из ног мк (PB0), при совпадении сигналов на входах компаратора AIN1 и AIN0.
Сам компаратор запускается,
ACSR = 0<<ACD | 1<<ACIE | 1<<ACIC | 0<<ACIS1 | 0<<ACIS0;
на ACO уровень постояно скачет так как и надо.
но как сделать прерывание при любом измении на ACO не могу разобраться.
не понимаю как сформировать импульс примерно длительностью 5мс, на одной из ног мк (PB0), при совпадении сигналов на входах компаратора AIN1 и AIN0.
Сам компаратор запускается,
ACSR = 0<<ACD | 1<<ACIE | 1<<ACIC | 0<<ACIS1 | 0<<ACIS0;
на ACO уровень постояно скачет так как и надо.
но как сделать прерывание при любом измении на ACO не могу разобраться.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Глобально прерывания разрешены?kyraxinoff писал(а):но как сделать прерывание при любом измении на ACO не могу разобраться.
Зачем вам ACIC: Analog Comparator Input Capture Enable?kyraxinoff писал(а):| 1<<ACIC |
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Мелкие вопросы по МК и ПЛИС.
kyraxinoff писал(а): ACSR |= (0<<ACD) | (1<<ACIE )| (1<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
Re: Мелкие вопросы по МК и ПЛИС.
Подскажите, чтоб использовать аппаратный UART (через согласователь уровней с компьютером, например) линии RxD контроллера надо соединять с TxD компа и наоборот?
Или Rx->Rx, Tx->Tx?
Или Rx->Rx, Tx->Tx?
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Rx - приём
Tx - передача
Соответственно Rx-Tx и Tx - Rx.
Tx - передача
Соответственно Rx-Tx и Tx - Rx.
- java
- Держит паяльник хвостом
- Сообщения: 962
- Зарегистрирован: Вт янв 04, 2011 13:26:17
- Откуда: Лен.Обл.
Re: Мелкие вопросы по МК и ПЛИС.
Подскажите плиз, как выставить RC Генератора 4 мег?CKSEL3..0 0011 я выставил. вот как написано: <<Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011>>
контроллер ATmega8L
контроллер ATmega8L
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Re: Мелкие вопросы по МК и ПЛИС.
Написано от внутреннего RC генератора 4МГц, а фьюзы даны под кварц.. Там не перепутано с CKSEL3..0 1100 ? Уточнить бы, от чего тактирование там.java писал(а):вот как написано: <<Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011>>
контроллер ATmega8L
На скрине для прошивки лошадью, под RC на 4МГц (в какой программе прошиваешь не указал) п.с. Не часы Мосина? так там кварц часовой...
scio me nihil scire...
_______________________
<= Жалобная кнопка в правом нижнем углу... )
_______________________


