Страница 70 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 15, 2011 21:58:15
Roman Venom
вопрос по приёму 2-х байтного числа(мега 16, РС485). Приём одного байта происходит нормально. Двух - нет, принимается только один
Код: Выделить всё
USART_RXC:
cbi PORTC, PC7; вкл. приём
nop
nop
in work2,UDR;cчитываем какой-то байт
nop
nop
sbrs work,7; в 1-м байте седьмой бит всегда=1
rjmp byte_2;запомнить байт№2
rjmp byte_1;запомнить байт№1
[b]byte_1:[/b]
mov work2,work
;rjmp byte_2
rjmp exit_RXC
[b]
byte_2:[/b]
mov work1,work
ldi YH,0x2
ldi r28,BLDC_cnt
st Y+, work1
rjmp exit_RXC
[b]exit_RXC:[/b]
sbi PORTC, PC7
nop
nop
reti
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 09:19:09
qmix
Пытаюсь разобраться в программированиии, нужна помощь. Нарисовал блок схему обычной логики, как такое реализовать на attiny2313? А если еще и коментарии будут написаны, то буду просто безмерно презнателен.
Вообще интересует реализация обычной логики на avr.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 09:26:47
ploop
А теперь поясните, что под этой схемой вы имели ввиду? Это реальные входы/выходы микросхемы или операции над битами?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 09:40:28
qmix
Да, что то пояснений не дал. Все, что за пределами квадрата (или че там, прямоугольник получился) это реальные ноги. соответсвенно слева входы, справа выход... Квадрат это сам avr...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 09:55:42
Gudd-Head
qmix писал(а):Вообще интересует реализация обычной логики на avr.
На плисине было бы, конечно, проще... Но и так можно вывернуться. Вся загвоздка в том, что АВР заточен под работу с регистрами, т.е. входные биты надо будет растаскивать по разным регистрам, сдвигать их в один и тот же бит, а потом уже попарно делать "И" и "ИЛИ". Короче, ничего сложного... но долго (на взгляд, уйдёт больше 10 тактов). Если очень припрёт, могу додумать.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 10:05:17
ploop
Да, что то пояснений не дал. Все, что за пределами квадрата (или че там, прямоугольник получился) это реальные ноги. соответсвенно слева входы, справа выход... Квадрат это сам avr...
Ну тогда, как правильно заметил
Gudd-Head, нужно знать один ли это порт, или разные. А лучше дайте на примере конкретного контроллера (что у вас есть) конкретные ноги.
Смысл прост: читаем входы IO-порта в регистр, делаем битовые операции, выводим результат.
А вообще это действие бессмысленно. Проще поставить обычную логику, а если логическая схема сложна, то использовать ПЛИС, т.к. МК умрёт двигая туда-сюда биты, производительность в итоге будет никакая.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 10:20:00
qmix
Раньше был знаком с Альтерой MAXplus. (правда только в теории, до физической реализации что то так и не дошло). Вот там красиво в програмке всю логику можно было разрисовать... Я так понимаю с avr мне все так просто не прокатит.
контроллер attiny2313 ноги и порты без разницы какие юзать. мне сам смысл понять хоца...
Что Вы имеете ввиду, когда проедлагаете использовать ПЛИС. опять возвращаться к альтере, или есть другие альтернативы?.
p.s. А вльтере мне не нравится большое количество ног, под малые задачи. да и обвязка там сколько помню побольше.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 10:35:33
ploop
Что Вы имеете ввиду, когда проедлагаете использовать ПЛИС
Я имею ввиду реальный проект. Если вам только для обучения - ща набросаю пример для 2313.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 10:56:30
ChipKiller
qmix писал(а):Пытаюсь разобраться в программированиии, нужна помощь. Нарисовал блок схему обычной логики, как такое реализовать на attiny2313? А если еще и коментарии будут написаны, то буду просто безмерно презнателен.
Вообще интересует реализация обычной логики на avr.
... кажется Вы хотите не разобраться, а скорее запутаться

Если нужно реализовать лог. уравнение, то зачем применять AVR ??? .
qmix писал(а):Раньше был знаком с Альтерой MAXplus. (правда только в теории, до физической реализации что то так и не дошло).
.. с теорией похоже тоже не разобрались. Возьмите, например, ATF16v8 и WinCupl. Ваша "задача" решается несколькими строками.
ЗЫ. Вообще следует различать, когда "выгодно" применять "рассыпуху" и ПЛМ, а когда МК и не путать одно с другим.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 11:07:52
ploop
Вот, как и обещал, как это выглядит. Хорошо хоть внутри одного регистра, иначе без поллитры... ну вы поняли
Код: Выделить всё
; пусть верхний вход на вашей схеме PB0 (12 нога)
; нижний - PB3 (15 нога)
; выход - PD6 (11 нога)
; пусть порты уже сконфигурированы
in R16,PinB ; читаем содержимое порта B
; сразу проверим третий бит. Если он в 1 остальные действия не нужны
sbrc R16,3
rjmp exit1
; инвертируем бит 1 и бит 2
sbrc R16,1 ; проверяем бит 1
rjmp l0 ; если он в "1" переходим на метку l0
ori R16, 0b00000010 ; иначе ставим его в "1"
rjmp l1
l0: ; сбросим бит 1
andi R16,0b11111101
l1:
; теперь то же самое с битом 2
sbrc R16,2 ; проверяем бит 2
rjmp l2 ; если он в "1" переходим на метку l2
ori R16, 0b00000100 ; иначе ставим его в "1"
rjmp l3
l2: ; сбросим бит 2
andi R16,0b11111011
l3:
; теперь отсечём всё ненужное из R16
com R16 ; инвертируем
andi R16, 0b00000111
brne exit0 ; если не 0, значит на выход 0
; иначе на выход 1
exit1:
sbi PortD,6 ; ставим на выход 1
rjmp exit
exit0:
cbi PortD,6 ; ставим на выход 0
exit: ; собственно всё
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 11:20:27
ChipKiller
2 ploop - все можно сделать "понятнее" и работать это будет раз в 10 быстрее, если применить
ijmp - всего 16 возможных состояний (правда места в Flash займет побольше

)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 11:24:06
ploop
Таблицей что-ли?
Да суть не в этом, для реальной задачи всё можно упростить. К примеру использовать еще один регистр - уберутся условные переходы при инвертировании битов, ну и т.д. Это просто пример, как коряво "в лоб" имитируется логика.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 11:25:52
Gudd-Head
ploop писал(а):Вот, как и обещал, как это выглядит. Хорошо хоть внутри одного регистра, иначе без поллитры...
Пипееец. Вот мой пример с вашими исходными:
Код: Выделить всё
in R16,PinB ; читаем содержимое порта B
ldi r17, 0b00000110; а можно в отдельном регистре держать 0b00000110, тогда не надо будет каждый раз записывать
eor r16, r17; проинвертировали биты 2 и 3 (они же 1 и 2)
mov r17, r16; скопировали
lsr r17; сдвинули р17 вправо
and r16, r17; первое И
lsr r17; снова вправо
and r16, r17; второе И
lsr r17; снова вправо
or r16, r17; ИЛИ
andi r16, 0b00000001; обнуляем все биты, кроме нулевого. В нём - результат.
Хотя таблицей, согласен, будет быстрее (и, возможно, проще)

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 11:29:32
ChipKiller
ploop писал(а):Таблицей что-ли?
.. таблицы не требуется
Это просто пример, как коряво "в лоб" имитируется логика.
.. в "лоб" можно и не коряво

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 11:37:00
ploop
Давайте свой пример, посмотрим

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 12:31:55
ChipKiller
Код: Выделить всё
in r16,PinB ; в r16 номер функции
lsl,r16 ; размер функции = 2 ( ldi + ret )
;
ldi ZH,high(function)
ldi ZL,low(function)
add ZL,r16
clr r16
adc ZH,r16 ; адрес функции = function + r16*(function size)
ijmp
function:
; case 0000
ldi r16,...
ret
; case 0001
ldi r16,...
ret
; case 0010
...
... хотя таблицы явно не задано, этот метод можно назвать табличным переходом.
Недостаток перед "чистой" таблицей - больше размер и меньше скорость, поэтому применим, там где нужна бОльшая "гибкость"
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 12:40:19
ploop
Ну так примерно это я и имел ввиду под таблицей.
Но для ответа этот вариант не подходит. Достаточно сделать 8 входов и/или несколько выходов как с ней сядешь, а человек спрашивал общее решение.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 12:43:02
ploop
ChipKiller, и в вашем коде icall нужен, а не ijmp.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 12:50:03
ChipKiller
ploop писал(а):Достаточно сделать 8 входов
... тогда простая таблица на 256 значений
ploop писал(а):ChipKiller, и в вашем коде icall нужен, а не ijmp.
... это просто
пример, хотя если Вы хорошо владеете ассемблером, то наверняка знаете, как вместо
ijmp можно применить
icall и наоборот ....

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 16, 2011 12:54:25
Gudd-Head
ploop писал(а):человек спрашивал общее решение.
На предыдущей странице я накропал общее решение. Без вывода можно уложиться в 10 тактов.