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

Обсуждаем контроллеры компании Atmel.
Black_Wolf
Родился
Сообщения: 19
Зарегистрирован: Вс окт 27, 2013 14:07:37

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

Сообщение Black_Wolf »

Ванюшка писал(а): У меня почему-то "0" на выходе только в одном случае: PA3 - "1", PA4 - "1", PA5 - "0". Во всех остальных случаях PC0 - "1"
Если в коде есть "тупейшие" ошибки, не судите меня строго, это моя первая программа.
Изображение
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

вот так проще наверное в Вашем случае?

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

.equ Input = ((1<<PA3)|(1<<PA4)|(1<<PA5))
.equ Condition = ((1<<PA3)|(1<<PA4))
.equ Output = PORTC

loop:
	in	r16, PINA
	andi	r16, Input
	cpi	r16, Condition
	breq	set_to_zero
	sbi	Output, 0
	rjmp	loop
set_to_zero:
	cbi	Output, 0
	rjmp	loop
Ставим плюсы: )
Реклама
Ванюшка
Родился
Сообщения: 2
Зарегистрирован: Вт ноя 19, 2013 17:00:12
Откуда: Челябинская область

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

Сообщение Ванюшка »

Всем огромнейшее СПАСИБО. Я не правильно высчитывал таблицу истинности. :oops:
ibiza11 спасибо за код, в котором, я хотя многих инструкций еще не знаю и приемов не понимаю, т.к. я только-только начинающий, думаю разобраться.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

есть некая незамысловатая ф-ция :))

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

;*************************************************************************
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz),   use T/2 > 1.3us
;*************************************************************************
	.stabs	"",100,0,0,i2c_delay_T2
	.stabs	"i2cmaster.S",100,0,0,i2c_delay_T2
	.func i2c_delay_T2	; delay 5.0 microsec with 4 Mhz crystal	
i2c_delay_T2:        ; 4 cycles
	rjmp 1f      ; 2   "
1:	rjmp 2f      ; 2   "
2:	rjmp 3f      ; 2   "
3:	rjmp 4f      ; 2   "
4:	rjmp 5f      ; 2   "
5: 	rjmp 6f      ; 2   "
6:	nop          ; 1   "
	ret          ; 3   "
	.endfunc     ; total 20 cyles = 5.0 microsec with 4 Mhz crystal 


;*************************************************************************
что значат данные строки ?

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

.stabs	"",100,0,0,i2c_delay_T2
.stabs	"i2cmaster.S",100,0,0,i2c_delay_T2
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

В AVR-ассемблере встроенном в студию (4) я таких директив не видел...
7.54 .stabd, .stabn, .stabs
Эти три директивы, начинающиеся с .stab, формируют символы (смотрите главу 5 "Символы") для использования их в символических отладчиках. Эти символы не входят в hash-таблицу as: на них не может быть как-либо ссылок в исходном файле
источник
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

почему в выше нриведенной ф-ции написано так

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

1:
2:
3:
а не

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

1f:
2f:
3f:
Tell Me The Truth
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Фиг его знает, нужно читать хелп к этому ассемблеру. Может быть из-за того, что это какая-то функция (похожа на макрос в обычном AVR-ассемблере) и суффикс f стоит как указатель на то, что это не абсолютная метка, а метка в конкретно этой функции.
Короче нужно выяснить что это за ассемблер, а там видно будет...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

похоже на самодельно определенные макросы...
только вот явно не avrasm... :shock:
предположительно
rjmp 2f обращается к выполнению какого-то фрагмента 2f(1f,3f,4f,5f), которого в вышеприведенном тексте нету... а чего в тех фрагментах нарисовано, только их автору ведомо.
текущие метки 1: и иже сними отношение к 1f и остальным имеют через пока неведомый кусочек.
или определение "локальной метки" (у каждого компилятора по-своему) :roll:
А чего на самом деле только справка по тому компилятору поможет.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Короче, Свежий ошибся веткой :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

похоже на самодельно определенные макросы...
Я бы сказал больше похоже на листинг какого-то компилятора...
tohafox
Родился
Сообщения: 2
Зарегистрирован: Пн дек 02, 2013 20:30:52

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

Сообщение tohafox »

Помогите решить простые задачки на ассемблере (типо лабораторная работа)
1) Задать 9 однобайтовых чисел расположенных в EEPROM, начиная с адреса 0x0B05. Найти отрицательные элементы массива и записать их в ОЗУ начиная с адреса 0x0D99. Для адресации использовать индексные регистры.


2) Произвести вычисление следующего выражения R=4*x2*x3+x1^4-3*x3 операнды целые однобайтные числа находящиеся в ОЗУ, начиная с адреса 0x0220. Результат заносится в память, начиная с адреса 0x0228.


3) К порту B подключено 8 светодиодов. Необходимо включить 0 и 1 биты на 0,2 мс, выключить их на 0,1 мс, снова включить их на 0,3 мс и выключить.

По идее все элементарно...
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

tohafox писал(а):По идее все элементарно...
Я тоже так думаю.
Все будет только лучше, в крайнем случае - хуже.
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

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

Сообщение SmarTrunk »

tohafox
Напишите, что получилось, мы Вас поправим, если что.
Аватара пользователя
ANALOG
Мучитель микросхем
Сообщения: 444
Зарегистрирован: Вс ноя 28, 2010 15:18:52
Откуда: Минск

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

Сообщение ANALOG »

Вообще, задание некорректно сформулировано:
Во-первых, не указано какой именно AVR используется - от этого зависит возможно ли использовать команду mul для умножения или нужно писать свою функцию для этого.
Во-вторых, не указана частота, на которой будет работать МК, а без этого в программе невозможно задать временные интервалы (можно задать интервалы в тактах, а уж сколько это будет миллисекунд - зависит от частоты)
tohafox
Родился
Сообщения: 2
Зарегистрирован: Пн дек 02, 2013 20:30:52

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

Сообщение tohafox »

Благодарю всех за помощь, особую благодарность выражаю pyzhman.
valera_sr
Родился
Сообщения: 1
Зарегистрирован: Пт дек 13, 2013 00:19:21

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

Сообщение valera_sr »

Доброго времени суток. Я пытаюсь разобраться с формированием временных интервалов. Я пытаюсь записать значение TCNT0 в R16 регистр, для последующего сравнения, но этого не происходит, счетчик работает до момента записи в temp и обнуляется. В регистре R16 ноль.
Собственно, не могу разобраться, где я накосячил. Контроллер attiny2313 AtmelStudio 6.1.2730

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

  ldi temp, 0b0000001;
 out TCCR0,temp; задаем предделитель
 
 Start:

nop
nop
nop
nop
nop
nop


 out TCNT0, temp; значение таймера записываем в R16
 nop

 rjmp Start;
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

valera_sr писал(а):Я пытаюсь разобраться с формированием временных интервалов. Я пытаюсь записать значение TCNT0 в R16 регистр
Для этого нужно

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

IN R16,TCNT0
Сейчас Вы заносите 1 в TCNT0 в конце каждого цикла.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

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

ldi temp, 0b0000001;
Вообще говоря, в байте восемь бит. Мелкий огрех, но тем не менее.
Раз уж вы запустили таймер, то может проще все сравнения делать в прерываниях от него? И зачем эти сравнения, если можно задать время прерывания?
Docendo discimus
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Замечу, что

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

LDI R16,0b1
или

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

LDI R16,0b00000000000001
студией (3.21 и 4.19) понимаются одинаково.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

как и

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

LDI R16, 1
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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