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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

подскажите пожалуйста алгоритм такой штуки?
Есть n-ое значение в регистре, а в двух других верхний и нижний предел.
Нужно проверить, находится ли значение байта между нижним и верхним пределом. Если находится, то ничего не делать а если нет, то узнать по какому из них не проходит.
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

есть ньюанс.... неравенства включают или исключают крайние значения?
Реклама
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

включают
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Значит с начала проверяешь нижний порог - если меньше выходишь с проверки с признаком "мало"
Потом верхний - если больше выходишь с признаком "много".

CP X, LO_LIMIT
BRLO <выход с "нижний предел">
CP HI_LIMIT, X
BRLO <выход с "верхний предел">
<выход с "норма">

Как-то так.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

Благодарю! завтра попробую. Сегодня что то не так.
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Луна не в той фазе?
Реклама
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

да нет просто что-то в голове было не то.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

вопрос относительно оформления векоров обработчика преываний
я встречал две формы оформления
первая https://dpaste.de/GrXR/raw
вторая https://dpaste.de/rKeZ/raw
по поводу первой формы мне все понятно
вторая говорят более универсальная
в чем заключается ее универсальность ?
когда следует применять первую, когда вторую, а когда только вторую ?
Tell Me The Truth
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

А, ты и тут засветился... я уж было думал меня глючит.

действовать надо по обстоятельствам. Главное, чтобы инструкции перехода на обработчик находились на своих местах, а компилятору до лампочки как ты ему это сообщишь. Остаётся только эстетика для человека-программиста, вот исходя из этого и выбирай.
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

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

Сообщение nirq »

Если в какой-то микросхеме вектора прерываний идут в именно этом порядке с шагом в ровно одно слово - никто не гарантирует, что в похожей микросхеме и порядок, и шаг останутся точно такими же.
Всегда явно задавай адреса, никаких "авось"!

Приглядись внимательнее к фирменным файлам .inc, посравнивай, проникнись хитрожопостью задумки: условная метка (произвольный набор символов) везде выглядит одинаково, а её "расшифровка" (числовое значение) определяется для конкретной и только конкретной микросхемы.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

FreshMan писал(а): я встречал две формы оформления
когда следует применять первую, когда вторую, а когда только вторую ?

ИМХО и так и так не правильно :)
Лучше брать имена из inc-файла:

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

   .include   "m8def.inc"
   .cseg
   .org   0
   RJMP   RESET

   .org   OC2addr
   RJMP   DO_PWM

   .org   OC1Aaddr
   RJMP   FIFTY_MS
   
   .org   URXCaddr
   RJMP   UART_RX

   .org   UTXCaddr
   RJMP   UART_TX   

   .org   INT_VECTORS_SIZE
RESET:   
   CLI
   CLR   ZERO
   OUTI   SPL,Low(RAMEND)
   OUTI   SPH,High(RAMEND)
[...]

С точки зрения удобства - по имени вектора сразу понятно от чего он. Единственное неудобство - нужно соблюдать порядок векторов, т.е. UTX после URX и т.д., без этого было бы еще проще.
С точки зрения отладки: если случится косяк, и программа перескочит на незадействованный вектор, то в тех 2-х вариантах, она тупо вернется по RETI, как будто ничего и не было. В варианте выше, на месте незадействованного вектора будет 0xFFFF, реальный МК сбросится (уже признак косяка), а любой эмулятор ругнется на недопустимый опкод, да еще и скажет по какому адресу.
Ну и так короче получается, не нужна длинная таблица.
PS: Я тоже через это прошел, сначала очень долго применял первую форму, потом попробовал вторую, но остановился на приведенной мной выше.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

вне зависимости от модели (tiny, mega, xmega) вектор прерывания занимает 2 байта ?
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

FreshMan писал(а):вектор прерывания занимает 2 байта ?

Нет, конечно :) Конкретно надо смотреть ДШ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

у жирных мег (от 16к флеша) переходы на обработчики делаются по JMP, соответственно сами вектора 4 байтные. Если обработчик состоит из одной команды, например SBI, то можно схитрить и в сам вектор запихать SBI и RETI.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

Engineer_Keen писал(а):у жирных мег (от 16к флеша) переходы на обработчики делаются по JMP, соответственно сами вектора 4 байтные.

припустим я юхаем атмегу16 и обработчик лежит в пределах 4кслов
могу я в этом случае применить rjamp ?
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

FreshMan писал(а):могу я в этом случае применить rjmp ?

Конечно.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Только не 4кслова, а +2кслова. Т.к. RJMP относительный переход и из начала флеша в 16кбайт на -2кслов перепрыгнуть без грязных хаков не даст компилятор, мы это обсуждали пару страниц назад... С хаками можно из векторов прерываний прыгнуть по RJMP в области 0-2к и "размер флеша"-2к.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Kill17 »

Подскажите пожалуйста.

Пытаюсь организовать вход в BOOTLOADER по принципу приема байта в течении определенного времени. Что-то не получается ничего :cry:

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


   LDI   r16,high(ramend)
   OUT   SPH,r16     
   LDI   r16,low(ramend)
   OUT   SPL,r16     

      clr   temp        ; USART: 115200, 8-N-1
      STS   UBRR0H,temp
      ldi   temp,NB   
      STS   UBRR0L,temp
      ldi   temp,(1<<RXEN0)|(1<<TXEN0)   
      STS   UCSR0B,temp
      ldi   temp,(1<<UCSZ00)|(1<<UCSZ01)
      STS   UCSR0C,temp
 
      LDs   R16, UCSR0A
   
    
; ===========
;    delay loop generator
;     88472000 cycles:
; ----------
; delaying 49939965 cycles:
          ldi  R22, $FF
WGLOOP0:  ldi  R23, $FF
WGLOOP1:  ldi  R24, $FF
WGLOOP2:  dec  R24
          brne WGLOOP2
          dec  R23
          brne WGLOOP1
          dec  R22
          brne WGLOOP0
; ----------
; delaying 38531763 cycles:
          ldi  R22, $FB
WGLOOP3:  ldi  R23, $D7
WGLOOP4:  ldi  R24, $ED
WGLOOP5:  dec  R24
          brne WGLOOP5
          dec  R23
          brne WGLOOP4
          dec  R22
          brne WGLOOP3
; ----------
; delaying 270 cycles:
          ldi  R22, $5A
WGLOOP6:  dec  R22
          brne WGLOOP6
; ----------
; delaying 2 cycles:
          nop
          nop
; ===========



 sbrs   R16, RXC0
 LDS   R16,UDR0   
 cpi   r16,'?'     
 jmp  $0
 rjmp  $1f10

Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: AVR studio 4 в вопросах и ответах

Сообщение Engineer_Keen »

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

 LDs   R16, UCSR0A ;ок, нормально
 sbrs   R16, RXC0 ;тоже верно
 LDS   R16,UDR0   ;а вот задержку ожидания приема делают не так, есть же пример в даташите! перед этой строкой должен быть переход на повторное чтение флага
 cpi   r16,'?'     ;ок, приняли, сравнили,
 jmp  $0 ;почему безусловный переход в 0? сравнивали мы для чего? тут либо BRNE либо BREQ, либо любая другая подходящая BRxx
 rjmp  $1f10 ;эта строка никогда не выполнится из-за предидущей

надо так

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

WAIT_RX: 
LDS R16, UCSR0A
SBRS R16, RXC0
RJMP WAIT_RX
LDS R16,UDR0
CPI r16,'?'
BRNE WAIT_RX ;ну или где вам там ждать надо...
RJMP  $1f10

PS: тема не та, это скорее Ассемблер (ASM) для AVR в вопросах и ответах
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Kill17 »

Engineer_Keen писал(а):

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

WAIT_RX: 
LDS R16, UCSR0A
SBRS R16, RXC0
RJMP WAIT_RX
LDS R16,UDR0
CPI r16,'?'
BRNE WAIT_RX ;ну или где вам там ждать надо...
RJMP  $1f10



Спасибо! Извините, что не в ту тему влез!
Работает! Но он ожидает байт до посинения, а потом его сравнивает, а как сделать, чтобы время ожидания составляло секунд 8-10 ?
Ответить

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