Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Ассемблер для AVR

Список форумов» Программное обеспечение» Микроконтроллеры
АвторСообщение
pavel-pervomaysk
Your editor
Сообщения: 8037




07-03-2008 18:59

Здесь будем работать с обучением и примерами на асемблере для атмелов улыбка .

Для начала кидаю команды на асемблере , переношу из другой темы , там удалил .

  Команды для AVR.rar  12,83 КБ  Скачано: 2922 раз(а)

pavel-pervomaysk
Your editor
Сообщения: 8037




23-08-2008 21:03

Приложу ка я свою первую полезную подпрограмку для работы с Энкодером типа PEC-16 :

.def tmp = r16
.equ encod = PB2
.equ enc_2 = PB1

.org INT2addr // прерывание по внешнему сигналу INT2 для энкодера громкости
rjmp Encoder // обработчик прерывания от энкодера

.CSEG // сегмент кода
//Векторы прерываний:
.org 0 // по адресу 0 вектор сброса
rjmp RESET // перейти на метку ресет

RESET:
in temp,MCUCR
ori temp,(1 out MCUCR,temp
in temp,GIMSK
ori temp,(1 out GIMSK,temp ;разрешаем внешнее прерывание INT2
sei

// тут пишем всякую инициализацию //

// Подпрограмма
Encoder:
sbi PORTD,7 // контроль на PD7 внешнего прерывания
push tmp // сохранение темп
in tmp,SREG // читаем статус регистр
push tmp // сохраняем его
sbis pinb,encod // проверяем наличие прерывания
rcall encoder_read // читаем энкодер
pop tmp // извлекаем статус регистр
out SREG,tmp // восст. SREG
pop tmp // восст. temp
cbi PORTD,7 // гасим светодиод контроля
reti // выходим и разрешаем прерывания

Encoder_read: // чтение энкодера
sbis pinb,1 // если установлен бит 1 в порте то пропуск след ком
rcall plus // вызываем плюс
sbic pinb,1 // если очищен бит 1 в порте то пропуск след ком
rcall minus // вызываем минус
reti // выход из прерывания

minus: //
rcall lcd_sub //
reti //

plus: //
rcall lcd_add //
reti //


При подключении энкодера к МК , необходимо паралельно шинам прицепить емкости 0,1мКф , и включить пулапы . Я дополнительно навешал 2 резистора по 10к на +5в.
OleghkA
.
Сообщения: 593




11-01-2010 22:58

есть код
Цитата:

.def Temp=R19
...
.dseg
....
Digit: .byte 4
.macro stsi
ldi Temp, @1
out @0, Temp
.endmacro
/в теле вызов макро
stsi Digit ,0
stsi Digit+1,0
stsi Digit+2,0
stsi Digit+3,0

где
ldi Загрузить константу = в порт с адресом содержащимся в Temp будет записано @1
тоесть первый параметр?

out Запись в порт = в порт по адресу содержащемуся в Temp будет записано @0
нулевой параметр?

как правильно интерпритировать @0 и @1?
это
Цитата:
Макрос может иметь до 10 параметров, к которым в его теле обращаются через @0-@9. При вызове параметры перечисляются через запятые

я читал, где нулевой, где первый параметр?

при вызове макро
stsi Digit, 0

так подстановка произойдет?
ldi Digit, 0
out Digit, Temp

если да, ор нет примеры можно с 5 параметрами, например?
anatoliyttt
Новичок
Сообщения: 21




04-03-2011 21:24

Паша, а подпрограммы для работы с i2c выложить можешь?
pavel-pervomaysk
Your editor
Сообщения: 8037




06-03-2011 11:01

anatoliyttt, В мыло пиши, дам. Кстати в проэкте тюнера есть все готовое. подшучивать, дразнить
Konstantin_18
Участник
Сообщения: 3389




16-03-2014 16:11

pavel-pervomaysk, Как создать битовую переменную, чтобы работать с ее битами так-же как с битами портов ВВ?
Контроллер ATMEGA48.
Список форумов» Программное обеспечение» Микроконтроллеры» Ассемблер для AVR
Перейти:  
Текущий раздел» Программное обеспечение» Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)








Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы
Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!