Страница 224 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт май 02, 2014 21:42:26
*скрыто*
подскажите пожалуйста алгоритм такой штуки?
Есть n-ое значение в регистре, а в двух других верхний и нижний предел.
Нужно проверить, находится ли значение байта между нижним и верхним пределом. Если находится, то ничего не делать а если нет, то узнать по какому из них не проходит.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт май 02, 2014 21:49:25
Alexeyslav
есть ньюанс.... неравенства включают или исключают крайние значения?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт май 02, 2014 21:53:53
*скрыто*
включают
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт май 02, 2014 22:20:39
Alexeyslav
Значит с начала проверяешь нижний порог - если меньше выходишь с проверки с признаком "мало"
Потом верхний - если больше выходишь с признаком "много".
CP X, LO_LIMIT
BRLO <выход с "нижний предел">
CP HI_LIMIT, X
BRLO <выход с "верхний предел">
<выход с "норма">
Как-то так.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт май 02, 2014 22:51:27
*скрыто*
Благодарю! завтра попробую. Сегодня что то не так.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт май 02, 2014 23:02:32
Alexeyslav
Луна не в той фазе?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс май 04, 2014 01:59:56
*скрыто*
да нет просто что-то в голове было не то.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн май 19, 2014 23:12:53
FreshMan
вопрос относительно оформления векоров обработчика преываний
я встречал две формы оформления
первая
https://dpaste.de/GrXR/raw
вторая
https://dpaste.de/rKeZ/raw
по поводу первой формы мне все понятно
вторая говорят более универсальная
в чем заключается ее универсальность ?
когда следует применять первую, когда вторую, а когда только вторую ?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 00:12:26
Alexeyslav
А, ты и тут засветился... я уж было думал меня глючит.
действовать надо по обстоятельствам. Главное, чтобы инструкции перехода на обработчик находились на своих местах, а компилятору до лампочки как ты ему это сообщишь. Остаётся только эстетика для человека-программиста, вот исходя из этого и выбирай.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 02:58:22
nirq
Если в какой-то микросхеме вектора прерываний идут в именно этом порядке с шагом в ровно одно слово - никто не гарантирует, что в похожей микросхеме и порядок, и шаг останутся точно такими же.
Всегда явно задавай адреса, никаких "авось"!
Приглядись внимательнее к фирменным файлам .inc, посравнивай, проникнись хитрожопостью задумки: условная метка (произвольный набор символов) везде выглядит одинаково, а её "расшифровка" (числовое значение) определяется для конкретной и только конкретной микросхемы.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 10:08:26
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: Я тоже через это прошел, сначала очень долго применял первую форму, потом попробовал вторую, но остановился на приведенной мной выше.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 11:49:57
FreshMan
вне зависимости от модели (tiny, mega, xmega) вектор прерывания занимает 2 байта ?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 11:51:05
Gudd-Head
FreshMan писал(а):вектор прерывания занимает 2 байта ?
Нет, конечно

Конкретно надо смотреть ДШ.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 12:08:40
Engineer_Keen
у жирных мег (от 16к флеша) переходы на обработчики делаются по JMP, соответственно сами вектора 4 байтные. Если обработчик состоит из одной команды, например SBI, то можно схитрить и в сам вектор запихать SBI и RETI.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 12:15:37
FreshMan
Engineer_Keen писал(а):у жирных мег (от 16к флеша) переходы на обработчики делаются по JMP, соответственно сами вектора 4 байтные.
припустим я юхаем атмегу16 и обработчик лежит в пределах 4кслов
могу я в этом случае применить rjamp ?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 12:16:55
Gudd-Head
FreshMan писал(а):могу я в этом случае применить rjmp ?
Конечно.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 12:31:15
Engineer_Keen
Только не 4кслова, а +2кслова. Т.к. RJMP относительный переход и из начала флеша в 16кбайт на -2кслов перепрыгнуть без грязных хаков не даст компилятор, мы это обсуждали пару страниц назад... С хаками можно из векторов прерываний прыгнуть по RJMP в области 0-2к и "размер флеша"-2к.
Re: AVR studio 4 в вопросах и ответах
Добавлено: Вт май 20, 2014 13:46:02
Kill17
Подскажите пожалуйста.
Пытаюсь организовать вход в 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
Re: AVR studio 4 в вопросах и ответах
Добавлено: Вт май 20, 2014 14:31:46
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 в вопросах и ответах
Re: AVR studio 4 в вопросах и ответах
Добавлено: Вт май 20, 2014 14:43:51
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 ?