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

Асемблер Для Мк Avr Подскажите Плз


HOT ICE

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

Привет,чтото не могу я подружиться с Си,хочу попробовать асемблер-подскажите пожалуйста Софт на котором нужно писать для AVR и хороший учебник по этой теме

Спасибо

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

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

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

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

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

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

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

Если Вы только начинаете что-то программить, то не стоит накидываться на язык не изучив перед этим "железа" хотя бы чуть чуть.Беда многих кто задает вопросы на форумах (в том числе и в этом) как раз и кроется в этом.Не представляя себе КАК работает тот или иной элемент "железа" написать сколько нибудь удачную программку "на выход" очень трудно.

А если при этом еще и хвататься за такой в общем-то непростой язык как Си...Ничего против него не имею,но начинать нужно с азов, т.е. - Ассемблера. По сути Ассемблер это та же система команд кристалла только дополненная пользовательскими упрощениями процедур доступа к памяти и переферии. Иногда ассемблер может лишь чуть чуть отличаться от ЯВУ...

Для начала сходите на www.atmel.ru и в рубрике Softwear найдите инсталляцию Algorithm Builder. Весит она немного и доступна для скачивания даже в Dial up. Это графический ассемблер. Существует множество мнений на его счет, но одно бесспороно-нагляднее программу ни один классический язык не представляет.За исключением разве что Паскаля и его клонов...А когда поймете что же такое АЛГОРИТМ в ПРИНЦИПЕ, то и освоение другого языка пойдет проще. Не лишним будет и литература по МК.Для АВР-ов это Евстифеев "Микроконтроллеры серий Tiny и Mega фирмы ATMEL". Можно найти в Инете. У меня даже где-то валялось в DJVU формате...если не выкинул. Посмотрю.Если надо напишите на мыло: alt@inbox.ru В теме только напишите что про книги по АВР, а то в спам выкину...:) Только они тоже немало весят что-то около метра...Про Pic тоже что-то было но я ими уже давно не интересуюсь.Но описалово про них доступно на русском сайте компании Microchip в PDF по моему...Причем на русском.

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

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

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

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

Скачал я AVR студию написал там следующий текст

когда нажимаю Build выдаёт ошибку -ERROR: Unable to open input file 'C:\Documents and Settings\Tøªðûøú\¦þø ôþúºüõýªv\VV\VV.asm'

Вот программа:

.device Atmega8

.nolist

.include "F:\AVRs\AvrAssembler\Appnotes\m8def.inc"

.list

;================================================

.def temp=r16

;================================================

rjmp Init ;

;===============================================

Init:

ldi temp,0b00000000;

out DDRB,temp ;

ldi temp,0b00000000;

out DDRC,temp;

ldi temp,0b00000000;

out DDRD,temp;

ldi temp,0b00000000;

out PortB,temp;

ldi temp,0b00000000;

out PortC,temp;

ldi temp,0b00000000;

out PortD,temp;

;================================================

Start:

ldi ZL,20;

rjmp Start;

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

.def temp=r16

rjmp Init ;

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

1. Между этими сторками нужно вписать такие строчки

.cseg

.org 0

2. Ошибку может выдавать если название проекта написано по русски.

3. Нужно в открытой АВРстудии нажать на вкладку Project > Assembler Options > AVR Assembler - и выбрать Version 1 > OK

И так каждый раз при создании нового проекта. B)

Сильно не бейте если что не так , а лучше поправте. ;)

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

Не стоило создавать проект в папке Мои документы, не любит он русский язык

Перенеси проект в другое место и все заработает

Да точно пересоздал всё ок.Спасибо.

А я могу так делать hex,файл и заливать его через CodeVisionAVR?Так как програматор у меня LPT

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

А я могу так делать hex,файл и заливать его через CodeVisionAVR?Так как програматор у меня LPT

Ну да. Из авр студио с помощью лпт программатор прошить нельзя, насколько я помню.

Или можно еще через PonyProg заливать.

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

А я могу так делать hex,файл и заливать его через CodeVisionAVR?Так как програматор у меня LPT

Ну да. Из авр студио с помощью лпт программатор прошить нельзя, насколько я помню.

Или можно еще через PonyProg заливать.

CodeVisionAVR можно как STK200)

Ясн ну тогда буду пробовать чтото писать

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

Блин(

Читаю книгу по асемблеру для AVR

Решил написать маленькую програмку чтоб при нажатии на кнопку на полевик типа P!Подавался сигнал и через него светился св диод

rjmp Init ;Первая выполняемая команда

;===============================================

Init:

ldi temp,0b00000010;Определяяем входы и выходы порта B

out DDRB,temp ;

ldi temp,0b00000000;Определяем входы и выходы порта C

out DDRC,temp;

ldi temp,0b00000000;Определяем входы и выходы порта D

out DDRD,temp;

ldi temp,0b00000000;Включаем подтяжку для входов порта B

out PortB,temp;и задаём начальные состояния входов

ldi temp,0b00000000;Включаем подтяжку для входов порта C

out PortC,temp;и задаём начальные состояния входов

ldi temp,0b00000000;Включаем подтяжку для входов порта D

out PortD,temp;и задаём начальные состояния входов

;================================================

;Основное тело программы

Start:

sbic PinD,4 ;нажата ли кнопка тоесть 1?

rjmp ledon;переход к метке св диод вкл

sbi PortB,1 ;выкл

rjmp Start

ledon:

sbi PortC,2;

rjmp Start;Возврат к метке START

////И не пашет(((Уже пробывал по разному писать место sbi PortC,2; писал cbi всёравно нет результата нажимаю кнопку и св диод молчит

Что не так не могу понять,а в эта книга воообще меня запутала(

Скажите плз sbi устанавливает в 1?сbi в 0?

В книге опечатки блин и не могу понять где правильно а где нет(

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

ledon:

sbi PortC,2;

так у тебя светодиод подключен к С2 или В1 ??

ldi temp,0b00000000;Включаем подтяжку для входов порта D

подтяжка включается записью 1

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

выложи еще раз исправленный текст, а то непонятно где ты исправил

при нажатии кнопка замыкается на землю или питание?

rjmp Init ;Первая выполняемая команда

;===============================================

Init:

ldi temp,0b00000010;Определяяем входы и выходы порта B

out DDRB,temp ;

ldi temp,0b00000100;Определяем входы и выходы порта C

out DDRC,temp;

ldi temp,0b00000000;Определяем входы и выходы порта D

out DDRD,temp;

ldi temp,0b00000000;Включаем подтяжку для входов порта B

out PortB,temp;и задаём начальные состояния входов

ldi temp,0b00000000;Включаем подтяжку для входов порта C

out PortC,temp;и задаём начальные состояния входов

ldi temp,0b00010000;Включаем подтяжку для входов порта D

out PortD,temp;и задаём начальные состояния входов

;================================================

;Основное тело программы

Start:

sbic PinD,4 ;нажата ли кнопка тоесть 1?

rjmp ledon;переход к метке св диод вкл

sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту

rjmp Start

ledon:

cbi PortB,1;вкл СИд

sbi PortC,2;А это тот который через полевик

rjmp Start;Возврат к метке START

Кнопка замыкается на землю!

Функцыя кнопки работает.Потому что светодио который на портк PB1 светица когда кнопка нажата

А тот который через полевик нет(

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

посмотри что еще на етих пинах висит.. иногда периферия не дает нормально юзать порт.. над фузы смареть..

+ повесь полевик на тот порт где светодиод мигает ..

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

Трудно сообразить, не видя как что подключено.

Если кнопка на землю, то нажатие даёт 0, а не 1. Соответственно программа у тебя сразу после включения идёт на ledon и выдаёт в С2 единицу. И дальше эта единица в твоей проге нигде в ноль не сбрасывается - хоть жми на кнопку, хоть не жми!

Сделай хотя бы так:

...

sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту

cbi PortC,2

rjmp Start

....

Должно заработать, хоть и задом-наперёд...

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

Ребят спасибо вам за ответы!!!!!

Я вот сел подумал и нашол ошибкуу код должен быть таким

Init:

ldi temp,0b00000010;Определяяем входы и выходы порта B

out DDRB,temp ;

ldi temp,0b00000100;Определяем входы и выходы порта C

out DDRC,temp;

ldi temp,0b00000000;Определяем входы и выходы порта D

out DDRD,temp;

ldi temp,0b00000000;Включаем подтяжку для входов порта B

out PortB,temp;и задаём начальные состояния входов

ldi temp,0b00000100;Включаем подтяжку для входов порта C

out PortC,temp;и задаём начальные состояния входов

ldi temp,0b00010000;Включаем подтяжку для входов порта D

out PortD,temp;и задаём начальные состояния входов

;================================================

;Основное тело программы

Start:

sbic PinD,4 ;нажата ли кнопка тоесть 1?

rjmp ledon;переход к метке св диод вкл

sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту

cbi PortC,2

rjmp Start

ledon:

cbi PortB,1;вкл СИд

sbi PortC,2;А это тот который через полевик

rjmp Start;Возврат к метке START

Теперь всё работает,буду учить чтото следующее наверно то как сформировать задержку на 5 минут

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

блиНННн((((Разобрался с одним не могу теперь с другим((

Я пишу задержку без таймера вот такой код делаю

Происходит следующее-Светодиод который подключен без полевика ели заметно светица когда нажимаю кнопку,а тот который через полевик вообще не хочет,а когда не пишу задержку всё ок,скажите пожалуйста в чём дело и что я делаю не так?

И если не сложно объясните как сформировать задержку на 1мин и 10 сек не использую таймер0,и с его использованием?Я вообще не могу понять книга про это мало говорит(

____________________________
.device Atmega8
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"
.list
;================================================
;
.def temp=r16
.def delay=r17
.def delay2=r18


;================================================


d:
ldi delay,0x72;это примерно я не понял как выщитать задержку 
ldi delay2,0x72;
Loop:
subi delay,1;вычитаю 1 из делеи
sbci delay2,0;Вычитаю 1 из делеи если флаг С=1
brcc loop;
ret ;возврат из подпрограмы

rjmp Init       ;
;===============================================

Init:
ldi  temp,0b00000010;
out  DDRB,temp ;
ldi  temp,0b00000100;выход
out  DDRC,temp;
ldi  temp,0b00000000;
out  DDRD,temp;

ldi  temp,0b00000000;
out  PortB,temp;
ldi  temp,0b00000100;Начальное состояние ноги 1
out  PortC,temp;
ldi  temp,0b00010000;подтяжка вкл
out  PortD,temp;

;================================================


Start:

sbic PinD,4 ;проверка кнопки которая подключена на минус
rjmp ledon;переход к вкл светтодиоды
sbi PortB,1  ;светодиод без полевика подключён к -
cbi PortC,2 ;с полевиком
rjmp Start
ledon:

cbi PortB,1;
sbi PortC,2;
rcall d;вкл задержку тоесть мне нужно чтоб светодиоды светились какоето время N

rjmp Start;

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

Во-первых. По адресам, начиная с 0000, должны распологаться вектора переходов от прерываний. Если прерывания не используются (как у тебя в данном случае), то конечно можно расположить основной код в этом месте. Но у тебя с самого начала расположена подпрограмма и именно с неё и начинается работа. Перекинь её в конец или поставь по адресу 0000, т.е. самым первым оператором rjmp init.

Во-вторых. Ты забыл настроить указатель стека. А он у тебя используется, т.к. есть команды rcall и ret. Добавь в кусок, где у тебя инициализация строчки:

ldi temp,high(RAMEND)

out SPH,temp

ldi temp,low(RAMEND)

out SPL,temp ;установка стека

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

Во-первых. По адресам, начиная с 0000, должны распологаться вектора переходов от прерываний. Если прерывания не используются (как у тебя в данном случае), то конечно можно расположить основной код в этом месте. Но у тебя с самого начала расположена подпрограмма и именно с неё и начинается работа. Перекинь её в конец или поставь по адресу 0000, т.е. самым первым оператором rjmp init.

Во-вторых. Ты забыл настроить указатель стека. А он у тебя используется, т.к. есть команды rcall и ret. Добавь в кусок, где у тебя инициализация строчки:

ldi temp,high(RAMEND)

out SPH,temp

ldi temp,low(RAMEND)

out SPL,temp ;установка стека

Скажи пожалуйста где ты смотриш что находится по этим адресам?

В книге не сказано было про это(И так же не сказано что нужно писть вот те строчки(

Так хочу разобраться потехунькку с этим всем.

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

Если адрес не указывать принудительно директивой .org xxxx, то компилятор по умолчанию начинает счёт с 0000, и встретив в тексте первый оператор, воткнёт его код именно с адреса 0000.

Если сильно хочется посмотреть, какой оператор в какие адреса попал, открой окно "disassembler". Это можно сделать после того как запущена отладка ("Start Debugging").

зы: Ну не может быть, чтобы в книге не было сказано про вектора прерываний по начальным адресам!! Чё это за книга такая?? Да это и без книги в любом даташите есть, раздел "Interrupt Vectors"

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

''Книга микроконтроллеры AVR вводный курс''

Я купил микросхему ST 232BN мне сказали на рынке что она типа RS232.Это так?Я хочу подключить к компу МК чтоб изучать связь AVR И пк.Если есть схема подключения выложи пожалуйста

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

Чтото всёравно не работает и теперь я полностью во всём запуталсЯ(

;АВТОР:                        *
;ДАТА:                         *
;ВЕРСИЯ:
;Имя файла:
;ДЛЯ AVR:
;ТАКТОВАЯ Частота:
;*****************************
;Выполняемые функцыи_____________________________
.device Atmega8
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"
.list
;================================================
;Объявления
.def temp=r16
.def delay=r17
.def delay2=r18


;================================================
;НАЧАЛО программ



rjmp Init       ;Первая выполняемая команда
;===============================================

Init:
ldi  temp,0b00000010;Определяяем входы и выходы порта B
out  DDRB,temp ;
ldi  temp,0b00000100;Определяем входы и выходы порта C
out  DDRC,temp;
ldi  temp,0b00000000;Определяем входы и выходы порта D
out  DDRD,temp;

ldi  temp,0b00000000;Включаем подтяжку для входов порта B
out  PortB,temp;и задаём начальные состояния входов
ldi  temp,0b00000100;Включаем подтяжку для входов порта C
out  PortC,temp;и задаём начальные состояния входов
ldi  temp,0b00010000;Включаем подтяжку для входов порта D
out  PortD,temp;и задаём начальные состояния входов

;================================================
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp ;установка стека
;подпроги 
d:
ldi delay,0x72;формирую 
ldi delay2,0x72;задержку
Loop:
subi delay,1;вычитаю 1 из делаи
sbci delay2,0;вычитаю 1 из делаи 2 если флвг С=1
brcc loop;возвращаюсь в лоп если флаг C сброшен
ret
;Основное тело программы 
Start:

sbic PinD,4 ;нажата ли кнопка тоесть 0?
rjmp ledon;переход к метке св диод вкл
sbi PortB,1  ;выкл это просто светодиод который подключён напрямую к порту
cbi PortC,2
rjmp Start
ledon:

cbi PortB,1;вкл СИд 
sbi PortC,2;А это тот который через полевик
rcall d

rjmp Start;Возврат к метке START

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

Напримр, так:

...
;НАЧАЛО программ

Init:
ldi  temp,0b00000010;Определяяем входы и выходы порта B
out  DDRB,temp ;
ldi  temp,0b00000100;Определяем входы и выходы порта C
out  DDRC,temp;
ldi  temp,0b00000000;Определяем входы и выходы порта D
out  DDRD,temp;

ldi  temp,0b00000000;Включаем подтяжку для входов порта B
out  PortB,temp;и задаём начальные состояния входов
ldi  temp,0b00000100;Включаем подтяжку для входов порта C
out  PortC,temp;и задаём начальные состояния входов
ldi  temp,0b00010000;Включаем подтяжку для входов порта D
out  PortD,temp;и задаём начальные состояния входов

ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp ;установка стека

;================================================
;Основное тело программы 
Start:

sbic PinD,4 ;нажата ли кнопка тоесть 0?
rjmp ledon;переход к метке св диод вкл
sbi PortB,1  ;выкл это просто светодиод который подключён напрямую к порту
cbi PortC,2
rjmp Start
ledon:

cbi PortB,1;вкл СИд 
sbi PortC,2;А это тот который через полевик
rcall d
rjmp Start;Возврат к метке START

;подпроги ---------------------------------------------
d:
ldi delay,0x72;формирую 
ldi delay2,0x72;задержку
Loop:
subi delay,1;вычитаю 1 из делаи
sbci delay2,0;вычитаю 1 из делаи 2 если флвг С=1
brcc loop;возвращаюсь в лоп если флаг C сброшен
ret

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

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

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

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

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

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

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

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

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

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

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

    • Ловите, как раз на широкую полосу для Палника рисовали, автора не знаю. Все, что нужно.   
    • @Андрей0З9  Это что за учитель и где, такой по трудовому обучению, задает задачи по физике 10 класса.?!  Бред полный.
    • Румынский дядька - перфекционист-фенечник. Бисера и бусин - дофига, вот и ставит куда не попадя, в данном случае бусинками выставил единую высоту ряда конденсаторов. Подобное встречалось, когда на ножки впаиваемых элементов одевались короткие кембрики одинаковой высоты, чем задавалась единая высота монтажа. Ну видимо румынскому дядьке лень было нарезать кучу одинаковой мелочёвки, зато было вналичии много бисера..., и креативно и желаемого достиг. С уважением, Сергей. 
    • О, это очень полезные регистры! в 88 только GPIOR0 сохранил свои полезные свойства. использую их как флаги событий прерываний. для GPIOR0 адрес порта ввода-вывода 0х1Е, а значит к нему применяются команды cbi, sbi, sbic, sbis   ну и   in, out. Когда происходит прерывание, процессор переходит на адрес обработки прерывания, вот там-то мы и располагаем код: sbi   GPIOR0, 0     ;установить в 1 бит 0 в регистре GPIOR0 reti                        ;вернуться из прерывания   Без использования регистра GPIOR0, а с использованием обычного регистра код выглядел бы иначе: push   R0                          ;освобождаем регистр R0 для SREG и сохраняем его in        R0, SREG               ;сохраняем SREG в R0, все флаги операций текущей программы sbr     R23, 1<<0             ;выставляем флаг признака прерывания, например бит 0 в регистре R23 out    SREG, R0               ;восстанавливаем SREG, все флаги операций текущей программы pop   R0                          ;восстанавливаем значение R0 reti                                  ;вернуться из прерывания   Нетрудно заметить......!   А, да команда: sbr     R23, 1<<0 в идеале изменяет флаги в SREG, потому и такая длинная цепочка команд.
    • Сабсоник 3 порядка потом усилитель на Оу. Далее все на столе отстроить и все 
    • Вот и я думаю сделать на сдвоенном операционнике входной усилитель и сабсоник. 
    • Я всегда подозревал, что эта схема была содрана кЕтайцами с какого-то старого и хорошо известного (но не у нас) блока питания, и что в оригинале использовались именно 741 операционники. И вот тому подтверждение... Все равно те микросхемы и транзисторы что они используют в наборах, чаще всего подделки. Мне например, пришлось заменить D1047 транзистор что шел в наборе на пару таких же, но нормальных (выдраных с дохлого усилка). Транзистор из набора (маркировка явно "левая", без какого-либо намека на изготовителя) сильно грелся даже на 1,5А. Такой же транзистор D1047, но из усилка грелся раза в два меньше, да и маркировка "нормальная".  Подозреваю что и TL081 что в наборе идут тоже возможно что перемаркированные 741 (они супердешевые, сравнимо с 358). 741 операционники выпускали все кому не лень, аналогов было выпущено очень много за полвека.  Были и на плюс-минус 22в, надо смотреть конкретный даташит и производителя, даже от буквы в конце это зависит.  Например, есть такой аналог uA741 от ST ("микро-А741"). ua741-957400.pdf ua741.pdf MA741.PDF
×
×
  • Создать...