Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
подскажите пожалуйста алгоритм такой штуки?
Есть n-ое значение в регистре, а в двух других верхний и нижний предел.
Нужно проверить, находится ли значение байта между нижним и верхним пределом. Если находится, то ничего не делать а если нет, то узнать по какому из них не проходит.
Есть n-ое значение в регистре, а в двух других верхний и нижний предел.
Нужно проверить, находится ли значение байта между нижним и верхним пределом. Если находится, то ничего не делать а если нет, то узнать по какому из них не проходит.
- Реклама
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
есть ньюанс.... неравенства включают или исключают крайние значения?
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Значит с начала проверяешь нижний порог - если меньше выходишь с проверки с признаком "мало"
Потом верхний - если больше выходишь с признаком "много".
CP X, LO_LIMIT
BRLO <выход с "нижний предел">
CP HI_LIMIT, X
BRLO <выход с "верхний предел">
<выход с "норма">
Как-то так.
Потом верхний - если больше выходишь с признаком "много".
CP X, LO_LIMIT
BRLO <выход с "нижний предел">
CP HI_LIMIT, X
BRLO <выход с "верхний предел">
<выход с "норма">
Как-то так.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Благодарю! завтра попробую. Сегодня что то не так.
- Реклама
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Луна не в той фазе?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
да нет просто что-то в голове было не то.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вопрос относительно оформления векоров обработчика преываний
я встречал две формы оформления
первая https://dpaste.de/GrXR/raw
вторая https://dpaste.de/rKeZ/raw
по поводу первой формы мне все понятно
вторая говорят более универсальная
в чем заключается ее универсальность ?
когда следует применять первую, когда вторую, а когда только вторую ?
я встречал две формы оформления
первая https://dpaste.de/GrXR/raw
вторая https://dpaste.de/rKeZ/raw
по поводу первой формы мне все понятно
вторая говорят более универсальная
в чем заключается ее универсальность ?
когда следует применять первую, когда вторую, а когда только вторую ?
Tell Me The Truth
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А, ты и тут засветился... я уж было думал меня глючит.
действовать надо по обстоятельствам. Главное, чтобы инструкции перехода на обработчик находились на своих местах, а компилятору до лампочки как ты ему это сообщишь. Остаётся только эстетика для человека-программиста, вот исходя из этого и выбирай.
действовать надо по обстоятельствам. Главное, чтобы инструкции перехода на обработчик находились на своих местах, а компилятору до лампочки как ты ему это сообщишь. Остаётся только эстетика для человека-программиста, вот исходя из этого и выбирай.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Если в какой-то микросхеме вектора прерываний идут в именно этом порядке с шагом в ровно одно слово - никто не гарантирует, что в похожей микросхеме и порядок, и шаг останутся точно такими же.
Всегда явно задавай адреса, никаких "авось"!
Приглядись внимательнее к фирменным файлам .inc, посравнивай, проникнись хитрожопостью задумки: условная метка (произвольный набор символов) везде выглядит одинаково, а её "расшифровка" (числовое значение) определяется для конкретной и только конкретной микросхемы.
Всегда явно задавай адреса, никаких "авось"!
Приглядись внимательнее к фирменным файлам .inc, посравнивай, проникнись хитрожопостью задумки: условная метка (произвольный набор символов) везде выглядит одинаково, а её "расшифровка" (числовое значение) определяется для конкретной и только конкретной микросхемы.
- Engineer_Keen
- Друг Кота
- Сообщения: 3870
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
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: Я тоже через это прошел, сначала очень долго применял первую форму, потом попробовал вторую, но остановился на приведенной мной выше.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вне зависимости от модели (tiny, mega, xmega) вектор прерывания занимает 2 байта ?
Tell Me The Truth
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan писал(а):вектор прерывания занимает 2 байта ?
Нет, конечно
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Engineer_Keen
- Друг Кота
- Сообщения: 3870
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
у жирных мег (от 16к флеша) переходы на обработчики делаются по JMP, соответственно сами вектора 4 байтные. Если обработчик состоит из одной команды, например SBI, то можно схитрить и в сам вектор запихать SBI и RETI.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Engineer_Keen писал(а):у жирных мег (от 16к флеша) переходы на обработчики делаются по JMP, соответственно сами вектора 4 байтные.
припустим я юхаем атмегу16 и обработчик лежит в пределах 4кслов
могу я в этом случае применить rjamp ?
Tell Me The Truth
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
FreshMan писал(а):могу я в этом случае применить rjmp ?
Конечно.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Engineer_Keen
- Друг Кота
- Сообщения: 3870
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Только не 4кслова, а +2кслова. Т.к. RJMP относительный переход и из начала флеша в 16кбайт на -2кслов перепрыгнуть без грязных хаков не даст компилятор, мы это обсуждали пару страниц назад... С хаками можно из векторов прерываний прыгнуть по RJMP в области 0-2к и "размер флеша"-2к.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- Kill17
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 30, 2010 20:27:33
- Откуда: Санкт-Петербург
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Подскажите пожалуйста.
Пытаюсь организовать вход в BOOTLOADER по принципу приема байта в течении определенного времени. Что-то не получается ничего
Пытаюсь организовать вход в BOOTLOADER по принципу приема байта в течении определенного времени. Что-то не получается ничего
Код: Выделить всё
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 в вопросах и ответах
Код: Выделить всё
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 в вопросах и ответах
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 ?


