Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт авг 22, 2025 02:07:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 69, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 11, 2011 02:10:45 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Ну за успех ликбеза, поздравляю. :beer:
Ещё один совет, по поводу оформления векторов. :)
Если заглянуть в файл m16def.inc то там можно найти следующее:
Код:
.equ   INT0addr=$002   ;External Interrupt0 Vector Address
.equ   INT1addr=$004   ;External Interrupt1 Vector Address
.equ   OC2addr =$006   ;Output Compare2 Interrupt Vector Address
.equ   OVF2addr=$008   ;Overflow2 Interrupt Vector Address
.equ   ICP1addr=$00A   ;Input Capture1 Interrupt Vector Address
.equ   OC1Aaddr=$00C   ;Output Compare1A Interrupt Vector Address
.equ   OC1Baddr=$00E   ;Output Compare1B Interrupt Vector Address
.equ   OVF1addr=$010   ;Overflow1 Interrupt Vector Address
.equ   OVF0addr=$012   ;Overflow0 Interrupt Vector Address
.equ   SPIaddr =$014   ;SPI Interrupt Vector Address
.equ   URXCaddr=$016   ;UART Receive Complete Interrupt Vector Address
.equ   UDREaddr=$018   ;UART Data Register Empty Interrupt Vector Address
.equ   UTXCaddr=$01A   ;UART Transmit Complete Interrupt Vector Address
.equ   ADCCaddr=$01C   ;ADC Interrupt Vector Address
.equ   ERDYaddr=$01E   ;EEPROM Interrupt Vector Address
.equ   ACIaddr =$020   ;Analog Comparator Interrupt Vector Address
.equ    TWIaddr =$022   ;Irq. vector address for Two-Wire Interface
.equ   INT2addr=$024   ;External Interrupt2 Vector Address
.equ   OC0addr =$026   ;Output Compare0 Interrupt Vector Address
.equ   SPMRaddr=$028   ;Store Program Memory Ready Interrupt Vector Address

А это значит, что тот-же мой пример, который я показывал выше, можно оформить и так:
Показываю только вектора:
Код:
.cseg
.org 0x0000
jmp RESET ;От суда мы идем в начало программы, после подачи питания.
.org OVF1addr
jmp TIM1_OVF ;От суда мы идём в обработку прерывания по переполнению таймера 1
.org URXCaddr
jmp USART_RXC ;От суда мы идём в обработку прерывания приёма данных с USART
.org ADCCaddr
jmp ADC ;От суда мы идём в обработку прерывания АЦП
.org INT_VECTORS_SIZE ;Это указывает на конец таблицы векторов прерываний

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 11, 2011 08:25:14 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
DX168B писал(а):
А это значит, что тот-же мой пример, который я показывал выше, можно оформить и так:
Показываю только вектора:
Код:
.cseg
.org 0x0000
jmp RESET ;От суда мы идем в начало программы, после подачи питания.
.org OVF1addr
jmp TIM1_OVF ;От суда мы идём в обработку прерывания по переполнению таймера 1
.org URXCaddr
jmp USART_RXC ;От суда мы идём в обработку прерывания приёма данных с USART
.org ADCCaddr
jmp ADC ;От суда мы идём в обработку прерывания АЦП
.org INT_VECTORS_SIZE ;Это указывает на конец таблицы векторов прерываний

первый раз встретил ситуацию, ктогда кто-то другой (не я) советует ПРАВИЛЬНО оформлять векторы прерываний!!!! браво!!!! неужели в массы пошло ЗНАНИЕ?!?!?!

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 11, 2011 10:27:56 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
первый раз встретил ситуацию, ктогда кто-то другой (не я) советует ПРАВИЛЬНО оформлять векторы прерываний!!!! браво!!!! неужели в массы пошло ЗНАНИЕ?!?!?!

Всё зависит от количества словленных граблей. Видимо, DX168B их целый сарай насобирал :))

А серьёзно - у большинства осваивающих МК дело редко доходит дальше мигания светодиодами. Типа получилось - хорошо, теперь я знаю и умею, если что понадобится - напишу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 11, 2011 12:51:03 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Нееет. С векторами прерываний у меня никогда граблей небыло. :)
Это совсем элементарное. Когда читал первый раз о векторах, я уже знал, что это такое, так как до АВРов имел дело с другими процессорами. Но в них был только один вектор, а хто вызвал прерывание - это уже надо было вручную флаги проверять. Там и ассемблер был совсем другой.
Просто так, во первых, как сказал ARV - правильно, а во вторых - писанины намного меньше и в третьих - не ошибёшься, если правильно всё сделаешь. :)
Мне этот метод самому понравился, вот и пользуюсь. :)

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 11, 2011 19:55:35 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 884
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6071
Откуда: Minsk
Рейтинг сообщения: 0
DX168B писал(а):
Код:
.cseg
.org 0x0000
jmp RESET ;От суда мы идем в начало программы




От суда никакие векторы не спасут, только кража, пожар или взятка :-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 16:37:54 
Родился

Зарегистрирован: Ср фев 02, 2011 22:12:55
Сообщений: 9
Рейтинг сообщения: 0
Пожалуста подскажите, почему при INC r17 значение в регистре не меняеться напроизвольное от 0 до 11? причем если выполнять пожагово, то все выполняется корректно..


return1:clr R17
return2:out 0x12,R17
inc R17
cpi R17,0x0b
brsh return1
brne return2


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 16:54:14 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Сб сен 11, 2010 13:45:01
Сообщений: 1946
Откуда: Екатеринбург
Рейтинг сообщения: 0
Мяууф! Вот хотел раньше спросить, но чето не спросил. Вот в обучалке написано
Код:
ldi temp, 0
loop: dec  temp
brne loop


и
Цитата:
Сначала мы инициализировали Temp числом 0. Далее из Temp вычитается 1. Его значение становится -1 (иначе говоря, 255).
Почему 255? Вес-то и вопрос!

_________________
Ко мне можно на "ты", так даже лучше!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 17:17:12 
Друг Кота

Карма: 64
Рейтинг сообщений: 1013
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4343
Откуда: Ижевск
Рейтинг сообщения: 0
Повикипедируй - "дополнительный код числа"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 18:18:22 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Почему 255? Вес-то и вопрос!

А что должно быть? :)
При этом устанавливается флаг переноса. Если это младший разряд числа - из старшего вычитается единица, млпдший становится 255.

Например, если из 50 вычесть 1 сколько будет? И что будет с младшим разрядом? Был 0, станет 9 (49).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 18:43:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Сб сен 11, 2010 13:45:01
Сообщений: 1946
Откуда: Екатеринбург
Рейтинг сообщения: 0
ну был 0, вычли 1 сколько будет? -1, а откуда 255? если 255, то было 256, откуда?

_________________
Ко мне можно на "ты", так даже лучше!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 18:46:52 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Код:
ldi temp, 0
loop: dec  temp
brne loop
ploop писал(а):
При этом устанавливается флаг переноса.
.. нет - инструкции dec и inc не влияют на флаг переноса.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 19:07:27 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Сб сен 11, 2010 13:45:01
Сообщений: 1946
Откуда: Екатеринбург
Рейтинг сообщения: 0
Ну так почему 255? Почему не 300 например, откуда это число? 0-1=-1

_________________
Ко мне можно на "ты", так даже лучше!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 21:04:31 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
А потому что МК восьмибитный.
Сколько будет комбинаций единиц и нулей в восьми битах? Верно - 256 комбинаций.
Начиная от 0b00000000 (0) и заканчивая 0b11111111 (255).
То есть это циклическая особенность. Было 0x00, после декремента стало 0xFF, ещё один декремент и стало 0xFE , ещё один и стало 0xFD. И так пока не станет 0x00. За тем всё повторяется. То есть число циклом крутится, как белка в колесе.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 12, 2011 21:13:25 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
.. нет - инструкции dec и inc не влияют на флаг переноса.

Я даже не видел, что речь идёт о dec. А так да, только Z и еще какие-то.

Цитата:
ну был 0, вычли 1 сколько будет? -1, а откуда 255? если 255, то было 256, откуда?

У тебя восемь светодиодов. Только восемь. Изобрази ими число -1


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 13, 2011 02:46:59 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
ploop писал(а):
У тебя восемь светодиодов. Только восемь. Изобрази ими число -1

10000001 = -1. первый "светодиод" знак числа (0-положительное, 1-отрицательное), остальные семь - модуль числа в двоичном формате. :)))

TO ALL
только то, что я написал всего условность, которую я могу для себя принять. на самом деле условность давно уже приняли и она отличается от моей.
в этой арифметике принято два вида целых чисел: знаковые и беззнаковые. (для примера рассмотрим 8-битную машину)
беззнаковые: 8 бит данных, которые соответствуют числу от 0 до 255. максимальное кол-во комбинаций в 8-битном регистре равно 2^(8)=256 (два в восьмой степени), 8 это число бит в регистре. соответственно если регистр 16-битный, то кол-во комбинаций равно 2^(16)=65536.
знаковые: Это те же 8 бит данных, кол-во комбинаций также не изменилось и равно 256, только люди по другому их "конвертируют" в нашу арифметику, а именно, если старший бит (в данном случае самый левый) равен нулю(0), то число как и обычное беззнаковое конвертируется в значения от 0 до 127,
(кстати кол-во комбинаций от 0 до 127 = 128 = 2^(7) , подумайте над этим на досуге),
если же старший бит равен единице(1), то число отрицательное, остальная часть числа воспринимается как модуль числа, только не в нормальном формате, а инвертированном, а именно 1111111=1, 1111110=2, 1111101=3.....0000001=127, 0000000=0. :)))

в итоге число b'10000010 можно представить двумя способами:
1)если число беззнаковое, то оно равно "129"
2)если число знаковое, то оно равно "-126"

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 13, 2011 07:35:10 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Сб сен 11, 2010 13:45:01
Сообщений: 1946
Откуда: Екатеринбург
Рейтинг сообщения: 0
Ладно про 256 понял, я и сам так думал, т. к. 256/8. Но вот 128? Откуда? Понятно что это половина от 256.

ЗЫ. Светодиодов у мну нет, так как нужен контроллер и программатор а их на халяву не дают, а денга нет т. к. недавно был куплен осцилл, и еще делаеться блок питания, у мну только комп и вы! :)))

Последний пост я ваще не вкуриваю, можно это как-нить для семикласника объяснить?

_________________
Ко мне можно на "ты", так даже лучше!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 13, 2011 10:55:11 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
10000001 = -1. первый "светодиод" знак числа (0-положительное, 1-отрицательное), остальные семь - модуль числа в двоичном формате.

Ну а теперь попробуй применить обычную арифметическую операцию - вычти из него единицу. Должно быть -2, а у тебя получится -0 (кстати, будет два нуля, -0 и +0 (10000000 и 00000000) :) )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 13, 2011 11:21:45 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
ploop писал(а):
Цитата:
10000001 = -1. первый "светодиод" знак числа (0-положительное, 1-отрицательное), остальные семь - модуль числа в двоичном формате.

Ну а теперь попробуй применить обычную арифметическую операцию - вычти из него единицу. Должно быть -2, а у тебя получится -0 (кстати, будет два нуля, -0 и +0 (10000000 и 00000000) :) )

так из него я буду вычитать сложением, у меня же для этого единица стоит, обозначающая отрицательное число, она и будет инвертировать вычисление))) а два нуля, это да, согласен) пофигу)))) это же только пример для понимания)

sergeys писал(а):
Последний пост я ваще не вкуриваю, можно это как-нить для семикласника объяснить?
Если это по поводу моего поста, то задавайте вопросы. Будем объяснять. :?

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 13, 2011 11:44:55 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
так из него я буду вычитать сложением

А фиг получится!
Подумай логически. АЛУ пофигу, что там за число. Если ему надо вычесть из 10 число 5 - он вычтет, результат будет 5. А если из 10 вычесть 20? Получается вручную будешь в цикле вычитать до нуля и прибавлять после?
А если эти данные неподконтрольны программисту (приходят извне)?

Именно поэтому и приняли второй способ. Во-первых ноль один, во-вторых все арифметические операции корректны.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 13, 2011 13:07:12 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
ploop писал(а):
Именно поэтому и приняли второй способ. Во-первых ноль один, во-вторых все арифметические операции корректны.
да что ты прицепился) я же написал: "это же только пример для понимания)"
было 10 = 00001010, нужно вычесть 20 = 00010100, видим что 20 больше 10, тогда выставляем старший разряд и вычитаем из двадцати десять. получаем 10 и бит означающий отрицательное число. :)))
то же самое принять положительное направление тока от "+" к "-", но ведь на самом деле движутся электроны и движутся от "-" к "+". Просто условность.

_________________
Ставим плюсы: )


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 69, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 157


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y