Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
nikolenco
Родился
Сообщения: 7
Зарегистрирован: Ср янв 06, 2010 21:17:15

компилятор

Сообщение nikolenco »

дайте пожалуйста компилятор для перевода asm в hex для avr все обыскал не где немогу найти
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Сообщение SII »

Плохо искали. Что мешает скачать AVR Studio прямо с сайта производителя контроллеров, т.е. ATMEL?
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Сообщение Meteor »

nikolenco, ну Вы "загадили" :shock: Уберите лишние посты.
Какие микроконтроллеры пользовать собрались? Если AVR, то как правильно сказали Вам туда и счастлиого пути.
Руководство к действию.
Скачиваем AVR Studio 4
Устанавливаем на компьютер (избегаем путей с русскими буквами)
Создаем проект.
Вставляем код из asm в проект (копируем).
Компилируем.
Наслаждаемся созданным хексом.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Esya
Встал на лапы
Сообщения: 133
Зарегистрирован: Ср фев 20, 2008 03:09:21
Откуда: Украина г.Харьков
Контактная информация:

Сообщение Esya »

какой командой на асеме можно одновременно сбросить два пина порта ввода/вівода???
cbi portb ....... можно этой?? если да то как записать??
Русский человек читает инструкцию тогда, когда точно понял, что поломал.
Аватара пользователя
Esya
Встал на лапы
Сообщения: 133
Зарегистрирован: Ср фев 20, 2008 03:09:21
Откуда: Украина г.Харьков
Контактная информация:

Сообщение Esya »

я разницу знаю между этими командами cbr работает с рон, а cbi с рвв,
cbr работает как логическая операция
Русский человек читает инструкцию тогда, когда точно понял, что поломал.
DrunyaRuma
Родился
Сообщения: 1
Зарегистрирован: Вт мар 02, 2010 23:48:20
Откуда: Украина, Днепродзержинск

Сообщение DrunyaRuma »

to Esya: прямой команды нет,нужно использовать конструкцию
"чиение-модификация-запись",например:

Код: Выделить всё

  in     r16,PORTD
  andi   r16,$45
  out    PORTD,r16
engel65536
Родился
Сообщения: 1
Зарегистрирован: Ср мар 03, 2010 18:38:07
Откуда: Тула

ATmega16: таймер

Сообщение engel65536 »

Доброго времени суток, уважаемые форумчане. Недавно заинтересовался и начал изучать МК. В данный момент столкнулся с проблемой, причину и решение которой у меня найти не получается.
Я попробовал работать с таймерами по прерываниям, прерывания правильно отрабатываются, но вот частота срабатывания не совпадает с расчётной.
МК mega16, частота кварца 4 МГц, использую таймер T1 (16-битный), прерывание по переполнению, предделитель стоит на CLK/64. Итого частота срабатывания должна быть:
4000000/64/65536 = 0.95 Гц,
т.е. приблизительно должно происходить одно срабатывание в секунду. Однако период гораздо длинней - порядка 4 секунд (т.е. около 0.25 Гц). При каждом срабатывании инвертируется состояние светодиодов на выводах порта A.
В чём проблема - понять не могу... Если кто-то знает возможные причины и решения - буду благодарен за совет. Заранее спасибо за помощь.
Вложения
DLED.asm
Исходный код прошивки
(1.14 КБ) 319 скачиваний
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Скорее всего не правильно выставлены фьюзы.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Сообщение Meteor »

Согласен с Pooher'ом, скорее всего стоят настройки по умолчанию и тактируется частотой 1МГц
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Всем Привет !!!!!

to Meteor Если помните недели две назад у меня были проблемы с RC5 , хотел фиксировать длительное и короткое нажатие кнопки , для того чтобы например при нажатии кнопки on off реле включилось и не выключалась даже если я передержал клавишу !!!!
пока инет не работал , пробовал разные варианты , вот один из последних....

Код: Выделить всё

scan: ;обработка RC5
      rcall  detect
      andi   command, 0x7F ;   обнулить 7 бит
      lds    r16, oldcommand 
      cp     r16, command     ;если
      sts    oldcommand, r16
      brne   endscan1       
      ori    command, 0x80 ;  выставить  7 бит
endscan1:
ret


применение

Код: Выделить всё

next:
     rcall scan
     cpi    command,0b00000110   ; on off  короткое
     breq    Key3          
;     cpi    command,0b10000110   ; on off  длинное
;     breq    Key3          
     rjmp   next

KEY1: rcall  KPlus           ;вызов процедуры нажатия +
          rjmp   next
KEY2: rcall  KMinus
          rjmp   next
KEY3: rcall  KL
          rjmp   next
KEY4: rcall  KL1
........
........
    rjmp   next


KL: ;обработка  кнопки on off
            push  tmp
   in    tmp , pinb
   sbrs  tmp, 3         
   rjmp  SET1         
   cbi     OutPort,(6<<OutPin)  ;
   rjmp  ENDR         
SET1:
   sbi     OutPort,(6<<OutPin)  ;
ENDR:
            pop  tmp
ret



Вообщем ничего не получилось , при удержании все равно
переключает реле туда сюда????

Я так понял от управляющего бита походу нельзя отталкиваться для реализации длинного нажатия !!!

Может кто нибуть сказать в чем может быть дело и как правильно надо делать ????
Вложения
HG1.JPG
(83.37 КБ) 243 скачивания
Последний раз редактировалось MTF Пт мар 05, 2010 14:03:31, всего редактировалось 1 раз.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Так и должно быть, у тебя ведь циклический опрос кнопок, а здесь нужно определять момент отпускания кнопки.
Предположим у нас девайс в положении ON, нажимаем и держим кнопку - фиксируется факт что нажата кнопка ON-OFF и ждем отпускания кнопки (т.е. когда значение прочитанного из порта изменится) и только после это переводим девайс в режим OFF.
Ну и аналогично для OFF.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Приветствую GP1!!!

это теперь не надо ????

Код: Выделить всё

scan: ;обработка RC5 
      rcall  detect
      andi   command, 0x3F ;   обнулить 7 и 6 бит
;      andi   command, 0x7F ;   обнулить 7 бит
;      lds    r16, oldcommand 
;      cp     r16, command     ;если
;      sts    oldcommand, r16
;      brne   endscan1       
;      ori    command, 0x80 ;  выставить  7 бит
;endscan1:
ret


Не совсем понял , как ловить отпускание кнопки ????

Код: Выделить всё

KL: ;обработка  кнопки on off 
   push  tmp
   lds   tmp oldcommand
   cp    tmp , command
   breq  ENDR 
   in    tmp , pinb
   sbrs  tmp, 6         
   rjmp  SET1         
   cbi     OutPort,(6<<OutPin)  ;
   rjmp  ENDR         
SET1:
   sbi     OutPort,(6<<OutPin)  ;
ENDR:
            pop  tmp
ret



в какой момент надо записывать oldcommand ???
Последний раз редактировалось MTF Пт мар 05, 2010 14:52:20, всего редактировалось 2 раза.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Так уточним.
Ты пытаешься обработать код от пульта на ON-OFF?
Прием кода остается прежней, а вот сам код команды надо обработать чуть по-другому. Надо подумать.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Прием кода остается прежней
так нам нужен или нет
управляющий бит ???
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Думаю пригодится.
Говорю же - надо подумать.
А тут мешают - столы накрывают :)))
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Сообщение Meteor »

MTF,
введите переменные управления flag и времени time. тогда обработка будет выглядеть так:

Код: Выделить всё

control:
          sbrc flag, 2; Если уже обработали нажатие
          rjmp loop1;то не проверяем
          sbic  portd, knopka; Проверяем на уровень
          rjmp detected_time;Переходим к определению времени нажатия
loop1:
         sbis portd, knopka;
         rjmp strt_time;Переходим к запуску времени
exit_time:
         rcall delay;Задержка
         rjmp control;
;====
strt_time: ;проверяем флаг и устанавливаем начало отсчета
         sbrs flag,0; если флаг.0 =1, пропускаем очистку регистра
         clr time;
         cbr flag, 0x02;Убираем признак обработанного нажатия
         sbr flag,0x01;Ставим признак события "нажали"
         inc time;увеличиаем счетчик
         rjmp exit_control;
;====
time_ctrl: ;Проверяем время нажатия
         cbr flag,0x01; Сбросили флаг
         sbr flag, 0x02; Ставим флаг что обработали
         cpi time, var1; С чемто сравниваем
         brlo korotkoe;
         .......; Чтото делаем с длительным нажатием
         .......
         rjmp exit_control;
korotkoe:   ;
          .....; Чтото делаем при краткоременном нажатии
          exit_control;

Подправил некоторые нюансы
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

To Meteor спасибо что откликнулись на мою проблему , я просто никак не могу дотумкать !!!!

код посмотрел только что то не пойму он похож для обработки кнопок расположенных на устройстве , или я что то не понял ???


с кнопками у меня проблем нет я их обрабатываю в прерывании T0 с частотой CK/256

сам таймер T0 работает CK/0 и CK/256
спасибо за помощь GP1 и _noise подсказали как сделать с 2 делениями !!!

Код: Выделить всё

    push  tmp
    in    tmp,sreg
    push  tmp
;============== CK/0 Hz Section =================
*************
*************
*************
    lds   tmp, tm2
    inc   tmp
    sts   tm2, tmp
    tst   tmp
    brne  tm0_exit
;============== CK/256 Hz Section =================
    in     tmp, pind              ; читаем  порт  D
    ori    tmp, 0b11001111  ;уст в 1 лишних pd
    cpi    tmp, 0xff           ;
    breq K1                  ;если все 1 то clr
    cp     keyold ,tmp         ;сравниваем со старым кодом
    mov  keyold, tmp         ;текущий код в keyold
    brne  K1                  ;не совпад со старым кодом кнопки
    inc    tmkey               ;tmkey +1
;короткое
    cpi   tmkey, 15   ;  0,1 c
    brne  DL
    mov   key, keyold
    rjmp  keyend
DL:
;длинное нажатие
    cpi   tmkey , 50   ;  более 1 c
    brne  keyend       ;  если не равно то end
    lds   tmp, autorpt
    sub   Tmkey, tmp   ; 50 - autorpt (0,3c) 
    ldi     tmp, 0x80     ; 0b10000000
    or     tmp, keyold   ; r16 + KeySold = 80h + Keyold
    mov   key ,tmp
    rjmp  keyend
K1:
    clr   tmkey               ;0
;   clr   Keyold              ;0
    rjmp  keyend         
keyend:

**************
**************
tm0_exit:   
    pop   tmp
    out   sreg,tmp   
    pop   tmp


а вот с пульта RС5 никак не получается отличать длительное от короткого , за исходник взял Datasheet AVR410 , все бы ничего но не получается нажав на кнопку power пульта RC5 включить реле , еще раз нажать выключилась , проблема в том что если передержать нажатие на кнопку будет щелкать реле туда сюда , разбирались с GP1 вроде обещал подумать !!!
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Сообщение Meteor »

MTF, какая половая разница какое воздействие отличать?
Я показал как работать с флагами. Думаю (читал посты Ваши и GP1) что он советует тоже самое. Конечно не слово в слово. Но суть одна, надо:
1) выделить 2 флага, один из которых будет соответстовать признаку начала, а второй признаку (GP1 прав на 100^100%) обработки "отпускания";
2) иметь процедуру запуска эталона времени;
3) иметь процедуру сравнения времени по наступлению события "отпустили";
4) иметь признак того что проведена операция распознавания отрезков времени.
Это все приведено примере. Вам остается только "перестроить" под себя.
Последний раз редактировалось Meteor Пт мар 05, 2010 23:45:08, всего редактировалось 1 раз.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Спасибо!!!! :beer: алгоритм с 2 флагами понятен попробую переделать..
poff
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс авг 10, 2008 00:41:08

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение poff »

Уважаемые колеги, прошу Вашей помощи, поскольку сам, после трех бессонных ночей вошел в ступор, все идеи закончились..
Суть проблемы: Програмуля во вложенном файле выполняется только до первой метки - метка обозначена строкой из восьмерок в коментариях после точки с запятой.
Используется процессор MEGA8535 16PU. Таже програмуля переделанная под ATTINY2313 работает нормально. Для компиляции использую tavrasm.
Подскажите где грабли пожалуйста.. Заранее благодарен.
Вложения
code.asm
(19.46 КБ) 297 скачиваний
Ответить

Вернуться в «AVR»