Перейти к содержанию

Различается Работа В Симуляторе И В Реальной Схеме. Attiny2313A


Tokes

Рекомендуемые сообщения

Разумеется, не такое, а правильное. Например, устанавливаются выводы 2 и 3 а не 4, на котором висит кнопка.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Не работает тот пример (пост 85). Во всяком случае нет границ главного цикла, поэтому "задумка" трактуется непонятно. Если начало цикла поставить перед SBIC PINB,4, то состояние выходов на светодиоды не меняется, при изменении входа кнопки. Если же поставить метку цикла перед ldi r16,~(1<<2|1<<3), то меняется только PB3, Причем, если кнопка нажата (PB4=0), то PB2, PB3=0 всегда. Если отжата и PB4=1, то PB2=0, а PB3 имеет циклическую последовательность (вначале цикла = 0, а после SBIC PINB,4 естественно SBI PORTB,3).

Как-то так.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Ок, вот исправленный вариант, с циклом и исправлением ошибок. Тот кусок предполагался как концепция, а не конечный код. Вообще, мне больше понравились варианты со сдвигом, что 78, что 92.

ldi r16,(1<<2|1<<3)
out DDRB,r16
ldi r16,~(1<<2|1<<3)
CYCLE:
  out PORTB,r16
  ldi r16,~(1<<2|1<<3)
  sbic PINB,4
  sbr r16,3
  sbis PINB,4
  sbr r16,2
rjmp CYCLE

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ок, вот исправленный вариант...

ldi r16,(1<<2|1<<3)
out DDRB,r16
ldi r16,~(1<<2|1<<3)
CYCLE:
  out PORTB,r16
  ldi r16,~(1<<2|1<<3)
  sbic PINB,4
  sbr r16,0x07
  sbis PINB,4
  sbr r16,0x0B
rjmp CYCLE

SBR использует битовую маску, а не номер бита.

Или вот так, чтобы на одну инструкцию уменьшить.

ldi r16,(1<<2|1<<3)
out DDRB,r16
CYCLE:
  ldi r16,~(1<<2|1<<3)
  sbic PINB,4
  sbr r16,0x07
  sbis PINB,4
  sbr r16,0x0B
  out PORTB,r16
rjmp CYCLE

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Ок, простите, забыл, что SBR - всего лишь синоним ORI.

Или вот так, чтобы на одну инструкцию уменьшить.

Можно и еще на одну команду сократить

Эти развлечения с минимизацией кода - конечно, хорошо и весело, но стоит ли в данном случае? Тут и Сишный компилятор неплохо справился. Как насчет придумать полезный алгоритм, на котором знания асма помогли бы хорошо оптимизировать. Пусть для начала будет вычисление бита контроля четности, то есть четно ли количество единиц во введенном байте. У меня, с учетом инициализаций, получилось команд 18 для лобового подхода и 12 после минимальной оптимизации.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Пример вычисления бита контроля четности?

На Си можно сделать как-то так, это без оптимизации (разницы, контроль четности или нечетности, принципиальной нет, решается инверсией).

char parity_control(char inp){
char res=0,count;
for(count=0;count<8;count++{//лучше, конечно, while(inp), но так нагляднее
 if(inp & 0x01)res++;
 inp>>=1;
}
return (res & 0x01);
}

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

А как быть с нулевым значением байта? К какому пункту отнести (чет/нечет)?

Пока, в лоб, вписывается в 12 инструкций.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

А ноль - четное число? Четное, на 2 он делится без остатка, так и тут.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Тогда мое решение в лоб.

clr r17		 ;обнулим счетчик единичек
ldi r16,0b00000000 ;проверяемое число
tst r16		 ;проверим на исключение (равно 0)
breq exit		 ;соответствует, просто выйдем
count:				 ;
  lsr r16         ;сдвинем
  brcc count         ;если нет переноса вернемся
  inc r17         ;поймали единичку, нарастим счетчик
  tst r16         ;и проверим, есть ли еще единички в числе
  brne count         ;есть, вернемся
m1:					 ;единички закончились
  lsr r17         ;проверим четность
  brcc exit         ;четное кол-во, выйдем
  ldi r16,0x01     ;нечетное, поднимем флажек
exit:
;результат проверки находится в регистре r16
;четное r16=0, нечетное r16=1

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Мое решение почти в лоб

PARITY_CONTROL: //r16 - входной байт, r17 - выходной
 ldi r17,0
 lsl r16
PARITY_CONTROL_CYCLE
 sbci r17,0
 lsl r16
 brne PARITY_CONTROL_CYCLE
 andi r17,0x01
ret

И более оптимальное по времени

PARITY_CONTROL: //r16 - входной байт, r17 - выходной
 mov r17,r16
 swap r16
 eor r16,r17
 clr r17
 sbrc r16,0
	  inc r17
 sbrc r16,1
	  inc r17
 sbrc r16,2
	  inc r17
 sbrc r16,3
	  inc r17
 andi r17,0x01
ret

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Мне нравится по-упражняться в таких задачках (чтобы мозги не закисали). Да и опытом поделиться и чужой перенять не помешает. С построением задач сложнее. Своих выше крыши, а взяться и сделать - лень какая-то навалилась в последние две недели (тем более придумывать еще какие-нибудь, вообще облом). Наверное жара действует. :) Так что прошу прощения, я пока постою в стороне.

Ссылка на комментарий
Поделиться на другие сайты

Жаль, конечно, но все равно интерес проявили всего человек 5.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Не в алгоритмы, а в AVR, все-таки по конкретным контроллерам тематика. Но уж точно переехать из "различается работа..." :-)

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Ассемблер для них разный, не стоит путать.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...