Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Боюсь, что пока не будет схемы из какой-то "книги , по которой написана программа 51-го контроллера" и по которой Вы пытаетесь перейти на AVR, ничего путного не получится.
В обучалке есть статья по динамичекой индикации
Есть популярная статья с исходником и ее обсуждение на форуме, где тоже есть исходники. При желании, много полезного почерпнете.
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Сб окт 16, 2010 19:52:32
Откуда: Сургут

Сообщение ZERO.. »

Да вопрос собственно не втом чтобы перейти именно с той книги, НЕПОВЕРИТЕ весь инет облазил и не нашел на AT90S2313 программы "часы" на Ассемблере - да с пояснениями!!!
Ваша помощь - akl - неизмирима (так-же как интернет) СПАСИБО -такое-же!!!
И сайт Уважать стал ещё больше!!! :love: :chmoked: :kiss:
[color=#FF4000]Ищу где? и как? надо пользоваться личкой[/color]
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

небольшое дополнение:
сейчас вряд ли удастся найти 90S2313, вместо неё выпускается tiny2313, а там есть отличия.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

Ребят, помоите разобраться, на дипломе дали прошивку для контоллера. никак не могу в ней разобраться! Моя задача написать програму на ПК которая будет управлять вращением шагового двигателя, т.е должна задавать направление вращения и скорость вращения. Программу по отправки через COM порт я написал, дело в том, что я не знаю, что именно нужно отправлять контроллеру! Никогда асемблер не изучал! Объясните пожлуйста как работает прошивка.
Вложения
1.asm
(10.07 КБ) 204 скачивания
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Исходник - чистый ужас... практически что не строчка так пример как писать НЕ НУЖНО.
Не удивительно что после такого у людей отпадает желание писать на ассемблере.

Что видно из исходника - подпрограмма ждет с UART последовательность '#KSUtikto' и после её получения выдает '#1' но судя по всему в этот момент в приемнике возникнет состояние ошибки а если не возникнет то в порт уйдет только '1'. Это видимо такая проверка что устройство работает.

Если выдать ему '#KSUX' затем направление командой '#KSU'<байт=0> или '#KSU'<байт=4> и два параметра '#KSU'<байт=X1> и '#KSU'<байт=X2> наверно определяющих скорость вращения? или количество шагов и скорость вращения... по исходнику фиг сразу разберешь...
Потом выдать '#KSUY' и остальное аналогично как для X

Команды выдавать надо именно в такой последовательности, иначе произойдет сбой и сложно сходу сказать как поведет себя программа.

После этого в терминал будет выдано 'ОК'. Опять же, не уверен что выдаст именно так - программа попытается, но передача в TX без проверки готовности передатчика... скорей всего просто проскочит только 'K'.

Если выдать '#KSUnull' ... то ничего не будет, видимо там эта подпрограмма еще не реализована, и стоит обычная заглушка.


Мутная программа, очень мутная.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Alexeyslav писал(а):Мутная программа, очень мутная.
И к тому же явно не дописана.
Повеселило это место:

Код: Выделить всё

	clr	 r16   			          // ?????? ???????? 19200
	;out UBRR0H,R16;----------------------------------------------
	ldi r16,47						
	out UBRR0L,r16				

	ldi r16, (1<<4)|(1<<3)        // ????????? ?????/???????? ( ??? )
	out UCSR0B,r16

	; Set frame format: 8data, 2stop bit
	ldi r16,(1<<3)|(3<<1) // ???
	;out UCSR0C,r16;------------------
Компилятор ругается что out of range? Ну и хрен с ним, закомментируем эту строчку :))) То что в этом случае надо использовать STS вместо OUT автор видимо не знал...
Процедура чтения команды конечно сделана оригинально... Ну про вывод в UDR без ожидания готовности уже написали.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Еще убивает

Код: Выделить всё

(1<<3)|(3<<1)
Неужели трудно использовать имена битов?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Или раз уж имена не использовать, то хоть писать одну константу типа 0b01100101, а то ни туда ни сюда - читаемость никакая :facepalm:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Это квест такой. "Я угадаю эту константу с трёх бит!"
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Леонид Иванович писал(а):Еще убивает

Код: Выделить всё

(1<<3)|(3<<1)
А мне нравится ! Чувствуется любовь автора к симметрии :)
Почему-то вспомнилось из древних "Szpilki" : "Меняю пианино на таксу. Или наоборот" .
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

Jack_A писал(а):А мне нравится ! Чувствуется любовь автора к симметрии :)
...без именованных констант словить ошибку проще простого.....
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

Ребят, так в и тоге, что мне нужно по юарту этому быдлокоду отправлять-то, что бы оно крутило двигатель-то мне?
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

И еще ребят, объясните пожалуйста значение вот этого куска:
ldi ZH,high(data*2)
ldi ZL,low(data*2)
ldi XH,high(0x0100)
ldi YH,high(0x0100)
ldi XL,low(0x0100)
ldi temp,0x0c

load:
lpm // загружаем байт памяти
st X+,R0 // записываем в СОЗУ с использованием индекса Х
adiw ZL,0x01 // сложить первы байт регистра Z с 0x01
dec temp
brne load // перейти если не равно на load --- условие флаг регистра z = 0 тогда выполнять
ldi XH,high(0x0100)
ldi XL,low(0x0100)
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Alexeyslav же расписал всё. #SUKAX #KSUX и так далее пробуй.
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

Спасибо большое за помощь! Ребят, а ни у кого нет никакой прошивки, для управления ШД с компа? был бы очень благодарен! Диплом скоро сдавать, а у меня 0 прогресс в плане прошивки. Я асемблер впервые вижу практически ((
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

MS24 писал(а):Спасибо большое за помощь! Ребят, а ни у кого нет никакой прошивки, для управления ШД с компа? был бы очень благодарен! Диплом скоро сдавать, а у меня 0 прогресс в плане прошивки. Я асемблер впервые вижу практически ((
А какой язык программирования Вы знаете? Ну хотя бы Си - как более распространённый кумекаете?
Родился
Сообщения: 2
Зарегистрирован: Чт апр 19, 2012 23:54:05

Сообщение Alex Yustas »

Доброго времени суток всем форумчанам.
Пожалуйста, помогите разобраться с тактированием МК Tiny13 от внутреннего генератора.
Нужно програмно уменьшить частоту до 1.2 МГц.
Покопавшись в книгах и обучающих курсах понял, что работа ведётся с регистрами CKSEL и CLKPR.
А вот как и где прописать это в коде?
Заранее спасибо.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Alex Yustas писал(а):Доброго времени суток всем форумчанам.
Пожалуйста, помогите разобраться с тактированием МК Tiny13 от внутреннего генератора.
Заранее спасибо.
Так как этот МК на заводе ( default) установлен на работу с частотой внутреннего генератора 9.6 Мгц а так же установлен Fuse CKDIV8 - то уже изначально этот MK работает на частоте 1,2 Mгц . Источник - даташит Tiny13. Пожалуйста.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Если в коде, то отключаем прерывания, пишем в CLKPR 0x80, потом не позднее 4 тактов пишем туда же 0x03, возвращаем прерывания. Это что касается делителя. А вот источник тактирования можно изменить только программатором, потому что CKSEL это не регистр, а биты во фьюзе.
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

ILYAUL писал(а):А какой язык программирования Вы знаете? Ну хотя бы Си - как более распространённый кумекаете?
Да с СИ я достаточно хорошо знаком. Просто условие диплома написать на асемблере.
Ответить

Вернуться в «AVR»