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

Асемблер Для Мк 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 по моему...Причем на русском.

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Выбираем схему 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 пользователей онлайн

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

    • Спрошу здесь, извиняюсь заранее если не совсем верно в тему.  Вопрос в следующем - хочу сделать экранчик для своего цапа (преобразователя) чтобы выводил частоту дискретизации (допустим это). Я узнал что можно реализовать эту задачу на контроллере Ардуино, можно Нано или другой и дисплей SSD1306 I2C OLED. Сигнал с цапа снимается по LRCLK с I2S и преобразовывается в I2C для вывода на экран. Купить экран и контроллер не проблема, а как подключить контроллер к цапу если на самом нано нет нужного пина или я что то не понимаю и все возможно? Прошивка есть! Хочу разобраться с подключением и купить плату с экраном. Можете обьяснить как соединять?  Вот у человека все подключено и работает. Частично он мне обьяснил...    
    • Ну надо сказать, заработало. Причём режимы даже совпали с расчётными. По усилению только не совсем понятно, толи погрешность осциллографа, толи действительно есть небольшой разбег...
    • "Так а если этот ваш телефон или монитор перенести на другую улицу - там все эти глюки пропадают?"  Телефон так работает везде по городу и области. Монитор не везде, но степень разная, где-то лучше, где-то хуже, но это не 1 монитор, это любой монитор. То есть в каких-то местах где одно устройство хорошо работает - там будет работать хорошо и другие.
    • Вот такие "мелкие" казалось бы детали, которые многие могут не заметить. Но я сразу подозревал, что на этой плате все-таки стоит внутренняя видеокарта (несмотря на заявления ТС что ее там нет). И выложеные (большое спасибо за это) выше таблицы раз за разом это подверждают тоже - чипсет 945GZ таки имеет встроенную видеокарту. В данном случае, ТС также использует внешнюю видеокарту (NVidia GeForce 210), а для внутренней не установлен драйвер, почему он и показан как "Microsoft Basic Adapter" (используется "драйвер Windows по-умолчанию"). Для того чтобы "добавить" памяти в систему (максимум что может добавиться это 512мб, писал об этом выше), надо вначале выключить внутреннюю видеокарту в BIOS (ну и включить Memory Re-Map, как уже предлагали). 
    • Так а если этот ваш телефон или монитор перенести на другую улицу - там все эти глюки пропадают?
    • Всех радиолюбителей поздравляю С ДНЁМ РАДИО.
    • Это мимо кассы - пк древний, в биос он похоже не влазил.  Тонкое наблюдение. Прямо из названия темы  
×
×
  • Создать...