Страница 266 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 17, 2016 17:59:30
Kavka
Vaha писал(а):Вопрос: - существует ли возможность includ-ы описывать, вставлять в верху файла, а их реальное размещение происходило по метке. Например: в файле "hex2ascii.asm" вставить строчку ".org pp_hex2ascii", а гдето в теле программы в нужном месте поставить метку "pp_hex2ascii:" - типа, чтоб сюда влился код из файла "hex2ascii.asm"?
Хм... Замудрёно как-то. Но если сильно хочется, то...
Если код в инклюде просто вставляется и исполняется. Нет вызовов процедур/функций внутри инклюдника извне, то оформить всё что есть в инклюднике как макрос, подключать инклюдник в начале, а где надо вставлять вызов макроса.
Vaha писал(а):.equ portB,0 = pinRS
Обычно наоборот

Слева то, чему присваивают, справа то чему равно.
Может будет полезно (на русском) -
тынц.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 24, 2016 17:47:19
СКАЗОЧНИК
Возможно задам глупый вопрос.... Но иначе, у меня такой компактный код не получается, как у дЖЕдаев на форуме и я себя чувствую крайне не комфортно.
вот оператор AND или ANDI. Мы делаем
ПЕРЕМЕННАЯ
И ПЕРЕМЕННАЯ (КОНСТАНТА).
Пусть у меня:
Переменная = 0b00010000, а константа 0b10011001, тогда если сделать с ними Логическое И, установится флаг Z (Флаг нуля/ Зиро)? ПОчему?
Я понимаю, если я делаю сравнение и вычитаю одно число из другого, тогда может установится флаг нуля. А здесь я в Логическом И получаю единицу только там, где единицы совпали, причем они будут в переменной совпавшие, а остальные останутся нулями.
О! Все.
Пока писал понял. Спасибо. Вопрос снят.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн янв 25, 2016 16:18:34
Z_h_e
СКАЗОЧНИК писал(а):О! Все. Пока писал понял. Спасибо. Вопрос снят.
Кстати, вот один из методов проверки регистра на равенство нулю без изменения его значения. Я сейчас не про AVR, а в общем
Если регистр равен 0, то флаг Z будет установлен. Не во всех процессорах были команды типа TEST.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн янв 25, 2016 18:21:16
Jetetex
Всем доброго времени суток, помогите с компаатором на ат90с2313. Написал алгоритм с прерыванем по совпадению компаратора, а он почему-то работает по переполнению. Мож где то в коде накоячил.
Вот здесь
http://radiokot.ru/forum/viewtopic.php? ... 8&start=20 в последнем посте архив с исходником и проэктом.
Только отставание не 10, а 2 сек. Тоесть у мк в минуте 62сек, что совпадает с переполнением.
Заранее спасибо за помосч.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн янв 25, 2016 19:44:03
COKPOWEHEU
ат90с2313 или AT90S2313?
Аналоговый компаратор или блок сравнения таймера?
Покажите инициализацию в человеческом виде (присвоение регистрам не магических чисел, а использование сдвигов и битовых операций, наличие осмысленных комментариев).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн янв 25, 2016 22:00:37
Jack_A
Z_h_e писал(а):Не во всех процессорах были команды типа TEST.
А если и были, то это всего лишь другая мнемоника все той же команды AND Rx,Rx или ANDI Rx, 0xFF, так что недостающую TEST легко прописать макросом для любого камня

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт янв 26, 2016 01:55:33
akl
Правую часть картинки не понял. Поясните, причем здесь команда LSL Rd(ADD Rd,Rd). Например, Rd=$80
Применительно к AVR можно сравнить с 0 регистровые пары R25:R24, XH:XL, YH:YL, ZH:ZL командами
Jetetex писал(а):Всем доброго времени суток, помогите с компаатором на ат90с2313. Написал алгоритм с прерыванием по совпадению компаратора, а он почему-то работает по переполнению.
Да и не должен таймер срабатывать по переполнению. По сравнению со значением в OCR1A будет срабатывать.
Jetetex писал(а):...Только отставание не 10, а 2 сек. Тоесть у мк в минуте 62сек, что совпадает с переполнением.
Так и будет. Вы не включили режим CTC1, поэтому только первая секунда будет формироваться правильно.
Спойлер
Код: Выделить всё
.INCLUDE "2313def.inc"
.equ Fo=4000000
.def temp=r16
.ORG 0
RJMP RESET
.ORG 4
Timer1_comp1:
NOP
RETI
reset:
ldi Temp,RamEnd ;инициализация стека
out SPL,Temp
ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
ldi Temp,0b01111000
out ddrd,Temp
ldi Temp,HIGH(Fo/64-1) ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,LOW(Fo/64-1)
out OCR1AL,Temp
; ldi Temp,0xF4 ;инициализация компаратора
; out OCR1AH,Temp
; ldi Temp,0x24
; out OCR1AL,Temp
ldi Temp,0b01000000 ;разрешить прерывание компаратора
out TIMSK,Temp
OUT TIFR,Temp
ldi Temp,0b00001011 ;тактовый сигнал = Fo/64 режим CTC
out TCCR1B,Temp
sei
RJMP PC
.exit
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт янв 26, 2016 09:16:42
Jack_A
Левая часть иллюстрирует тот факт, что команда TST - не что иное, как команда AND регистра самим с собой. Правая к этому факту отношения не имеет; это пример, что и некоторые другие команды - не что иное, как другая мнемоника уже известной команды. В самом деле, сложить регистр с самим собой = сдвинуть значение на один разряд влево.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт янв 26, 2016 09:48:01
Z_h_e
Jack_A писал(а): то это всего лишь другая мнемоника
А я все думал, на кой ляд в AVR куча дублирующих команд, а их оказывается нет. Проверить лень было, вернее все хотел посчитать какое реальное количество команда камня AVR, но так и не посчитал.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт янв 26, 2016 10:31:40
Jetetex
Вопрос по компаратору снят. Пока ждал ответа - дотумкал. По недосмотру при обработке прерывания обнулял не тот регистр.
Вместо TCNT1 (значения самого таймера) обнулял OCR1A (значение компаратора). в результате после 1й секунды он считал от 0 до 65536, тоесть 1,048 сек.
Всем спасибо за помощь.
=======
COKPOWEHEU писал(а):ат90с2313 или AT90S2313?
AT90S2313
COKPOWEHEU писал(а):Аналоговый компаратор или блок сравнения таймера?
Даже из приведенного куска кода видно, что используется компаратор первого таймера -
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
COKPOWEHEU писал(а):Покажите инициализацию в человеческом виде (присвоение регистрам не магических чисел, а использование сдвигов и битовых операций, наличие осмысленных комментариев).
В архиве (см пост выше) есть исходник, там весь текст программы.
===========
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 03, 2016 22:56:08
Vaha
Kavka - Спасибо за "тынц", - полезная штука (как для меня, распечатал, полистываем

).
И на счет директивы .EQU - сперва что присваиваем, потом кому., в моем случае:
.EQU pinRS = portB0
следует обратить внимание на "portB0" - если в программе пишем "portB,0" - через запятую указываем пин, то при присвоении - нужно писать слитно

(долго мучело - мяучело, подсмотрел на просторах "сети"

)
И еще раз спасибо.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс фев 07, 2016 15:47:57
COKPOWEHEU
Jetetex писал(а):
Даже из приведенного куска кода видно, что используется компаратор первого таймера -
Поскольку нормальной ссылки на код не было и нет, в первую очередь приходится судить по описанию. А под термином "компаратор" в первую очередь понимают именно аналоговый компаратор, а вовсе не блок сравнения таймеров.
Jetetex писал(а):
В архиве (см пост выше) есть исходник, там весь текст программы.
Что мешало дать нормальную ссылку на тот код, который вы пытались скомпилировать? Посыл "где-то в той теме, в последнем посте" воспринимаются как "ищите сами, если найдете ошибку - не то нашли". Если имелось в виду вот
это, то там всего один файл, отдаленно похожий на код, и тот не исходник. Зачем копировать туда содержимое стандартных заголовочных файлов? Зачем там адреса и коды команд? Куда уползает форматирование? Почему ни одна настройка не сделана по-человечески (со сдвигами, логическими операциями и комментариями)?
Вот, например
Timer1_comp1:
| 000063 E040 | ldi Temp,0 ;обнуление таймера
| 000064 BD4D | out TCNT1H,Temp
| 000065 BD4C | out TCNT1L,Temp
| 000066 3050 | cpi Temp5,0b00000000
| 000067 F011 | breq point_on
| 000068 E050 | ldi Temp5,0b00000000
| 000069 C001 | rjmp Shift
| 00006A E850 | point_on: ldi Temp5,0b10000000
Зачем-то прокомментировано обнуление TCNT1, хотя эта операция и так видна из кода. Зато сравнение Temp5 с 0b00000000 оставлено без внимания. Что такое Temp5? Что такое 0b00000000, что его пришлось записывать в двоичной форме? Только имя метки относительно осмыслено (это включение десятичной точки?).
.
И на счет директивы .EQU - сперва что присваиваем, потом кому., в моем случае:
Вообще-то сначала
чему присваивает, потом
что, в вашем случае pinRS <- PortB0, то есть присвоить "переменной" pinRS значение PortB0, то есть 0 (не особо понимаю, чем в данном случае константы portB0, pinB0, ddrB0, PB0 и т.п. лучше простого десятичного числа 0, но, видимо, кому-то нравится).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт фев 12, 2016 11:21:33
Jetetex
Прошу прощения. Пересмотрел тот архив и понял что не все положил.
Проект закончен, осталось только собрать. Если кому интересно, все в архиве (исходник тоже, ПДФ файл - плата). В протеусе все работает, комментарии старался оставлять, но довести до ума никак не соберусь.
Так вот, после сборки возникла проблема - не заводится контроллер. При касании пальцем к 5-й ноге МК как бы заводится, но походу на малых частотах (индикатор моргает поочередно, нарушены знаки), убираешь рука, снова тухнет. Подскажите кто в курсе, куда копать, или где можно найти внятную информацию.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт фев 12, 2016 12:00:05
akl
Похоже кварц не заводится. Если применен действительно 90S2313, попробуйте убрать кондесаторы рядом с кварцем, а корпус оного посадите на 10 лапу.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт фев 12, 2016 12:58:02
Jetetex
Попробовал, не помогло. Другой кварц поставил, результат тот-же. И вот в чем парадокс-то - на макетке все работало.
Если это поможет - вот
видео.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт фев 12, 2016 15:01:35
akl
Посмотрел видео. Проблема, по мне, в тактировании. Кварц к контроллеру поставить поближе. Хорошо вымыть в районе 4,5 лап.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс фев 14, 2016 14:24:50
Jetetex
Действительно, притчина в тактировании - отсутствовал контакт конденсаторов с минусом. Аж стыдно на такой мелочи завалится.
PS. Во время сборки схема чуток изменилась - аноды индикаторов (bsr10011) питаются через нпн транзисторы, и на 6-ю ногу подтяжка "-" через 10кОм, иначе минуты и часы переставяются по ветру
PPS. Протупают сегменты из предидущего розряда. Как от этого избавится?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 17, 2016 19:51:36
Z_h_e
Jetetex писал(а):PPS. Протупают сегменты из предидущего розряда. Как от этого избавится?
Выключить текущий разряд, включить сегменты следующего разряда, включить следующий разряд.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс фев 28, 2016 14:18:56
СКАЗОЧНИК
Напрямую к ШИМ этот вопрос не относится, поэтому задам его здесь.
Код: Выделить всё
ldi temp, 00 ; Загрузка коэффициентов для каналов
sts Capture1, temp
ldi temp, 60
sts Capture2, temp
ldi temp, 130
sts Capture3, temp
ldi temp, 170
sts Capture4, temp
ldi temp, 210
sts Capture5, temp
ldi temp, 225
sts Capture6, temp
ldi temp, 240
sts Capture7, temp
Вот это надо двигать в цикле по кругу... Т.е. значение Capture1 сдвинуть на место Capture2 и т.д., а последнее на место первого. Как? Понятно, что надо какой-то массив сделать, в него выгрузить, потом обратно загрузить в переменные из массива, сдвигая каждый раз адрес на один...
Не. не так. Блин, туплю. Надо кольцом зафигачить.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс фев 28, 2016 14:51:54
akl
Может двигать указатель?
Код: Выделить всё
LDI YH,HIGH(Capture0)
LDI Yl,low(Capture0)
GO:
LD R0,Y+
OUT PORTB,R0
ANDI YL,0b00000111 ; для 8 точек
RCALL DELAY
RJMP GO
http://radiokot.ru/forum/viewtopic.php? ... 1#p2671311