Теория и практика AVR ассемблера.

Обсуждаем контроллеры компании Atmel.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

Kavka писал(а):Когда я учился в университете у нас в группе был парень, который почти всё писал на ассемблере, тогда ещё под ДОС. И проект в тыщу строк для него был обычным делом.
... 1000 строк не так уж и много, а во времена DOSa особой популярностью пользовался TASM, до которого далеко многим ассемблерам. С приходом "окошек" возможность писать на ассемблере не пропала - masm32, fasm и др., да и фанаты не исчезли :) http://win32assembly.programminghorizon ... rials.html
Реклама
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Написал программу, которая складывает состояния двух кнопок, и выдает на выход результат, который выводится на индикацию с помощью двух светодиодов.

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

.include <tn13Adef.inc>
 .dseg
 .cseg
	ldi R16, low(ramend);инициализация стека
	out SPL, R16
	ldi R16, 0b100111;настройка портов
	out DDRB, R16
	ldi R16, 0b011000;включение pull-up резисторов
	out PORTB, R16
	clr R16
	clr R17
	;********************
nachalo:	in R18, PINB ;проверка состояния кнопок(активное состояние - 0)
	lsr R18
	lsr R18
	lsr R18
	cpi R18, 0b000000
	breq test
	cpi R18, 0b000001
	breq test
	cpi R18, 0b000010
	breq test
	cpi R18, 0b000011
	breq test
	rjmp nachalo
test:
	 dec R17 ;защита от дребезга и повторная провека
	brne test
	dec R16
	brne test
	in R18, PINB
	lsr R18
	lsr R18
	lsr R18
	cpi R18, 0b000000
	breq var1
	cpi R18, 0b000001
	breq var2
	cpi R18, 0b000010
	breq var3
	cpi R18, 0b000011
	breq var4
	rjmp nachalo
var1:
	ldi R19, 0b011100;варианты действий
	out PORTB, R19
	rjmp nachalo
var2:
	ldi R19, 0b011001
	out PORTB, R19
	rjmp nachalo
var3:
	ldi R19, 0b011001
	out PORTB, R19
	rjmp nachalo
var4:
	ldi R19, 0b011000
	out PORTB, R19
	rjmp nachalo
Оцените, посоветуйте рецепты по уменьшению кода, если возможно, может более эффективную и/или короткую защиту от дребезга.
ЗЫ. Поставил много бранчей, т.к. не хотелось возиться с таблицей переходов.
ЗЫ2. Писал специально для тини13а.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

АндрейАвербах писал(а):

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

nachalo:	in R18, PINB ;проверка состояния кнопок(активное состояние - 0)
	lsr R18
	lsr R18
	lsr R18
	cpi R18, 0b000000
	breq test
	cpi R18, 0b000001
	breq test
	cpi R18, 0b000010
	breq test
	cpi R18, 0b000011
	breq test
	rjmp nachalo
Как-то сложно получается...

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

nachalo:	in R18, PINB ;проверка состояния кнопок(активное состояние - 0)
        andi R18,0b11100000 ;отбрасываем 3 младших разряда и проверяем, что 3 старших тоже=0
	breq test ;
	rjmp nachalo
test:
    dec R17 ;защита от дребезга и повторная провека
   brne test
   dec R16
   brne test
CLR R19 ;сброс регистра
SBIS PINB,PB3 ;проверяем первую кнопку, если нажата (=0)
INC R19 ;прибавляем "1"
SBIS PNIB,PB4 ;проверяем вторую кнопку
INC R19
CBI PORTB,PB0 ;выключаем светодиод (всегда)
SBRC R19,0 ;если сумма нечетная
SBI PORTB,PB0 ;зажигаем светодиод
   rjmp nachalo
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

0b11100000 ;отбрасываем 3 младших разряда и проверяем, что 3 старших тоже=0
Младшие разряды же пишутся правее.
Реклама
Эиком - электронные компоненты и радиодетали
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Замечу, что указатель стека в современных, особенно у малоногих, AVR установлен аппаратно.
Изображение
Реклама
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Но кто мешает подстраховаться?
А трюк с разрядами понял.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

АндрейАвербах писал(а):Но кто мешает подстраховаться?
Это верно...
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

"Бережёного Бог бережёт, сказала монашка, натягивая третий презерватив на свечку" :)
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

Сообщение АндрейАвербах »

Ну, ужал программу, как мог. Теперь она при неактивном состояниях обеих кнопок, выводит на индикацию результат предыдущего действия.

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

ldi R16, low(ramend);инициализация стека
	out SPL, R16
	ldi R16, 0b100111;настройка портов
	out DDRB, R16
	ldi R16, 0b011000;включение pull-up резисторов
	out PORTB, R16
	clr R16
	clr R17
	;********************
nachalo:	in R18, PINB ;проверка состояния кнопок(активное состояние - 0)
	mov R19, R18
    andi R18, 0b011000
    breq test
    andi R19, 0b011000
	ori R19, 0b000000
	brne test
	
	rjmp nachalo
test:
	 dec R17 ;защита от дребезга и повторная проверка
	brne test
	dec R16
	brne test
	in R18, PINB ;проверка состояния кнопок(активное состояние - 0)
	mov R19, R18
   andi R18, 0b011000
   breq var1
    andi R19, 0b011000
	ori R19, 0b000000
	brne var2
	
	rjmp nachalo
var1:                       ;варианты действий
	ldi R20, 0b011101
	out PORTB, R20
	rjmp nachalo
var2:
	ldi R20, 0b011001
	out PORTB, R20
	rjmp nachalo
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

в ближайшее время переходить на Си противопоказано
Ну, я про ближайшее время ничего не говорил. Я к тому, что в перспективе надо знать и то, и то. А сейчас пусть делает то, что делает. :)
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Так автор как раз и уточнил, что в ближащее время не собирается. А Вы на это ответили, что это он зря. Отсюда и возражения с моей стороны.
Ставим плюсы: )
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

А, это. Проглядел логику, каюсь. Глядел ветку быстро.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15742
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

для вышеуказаной задачи ( кнопки-светики от АндрейАвербах ):
стандартная процедура захвата данных по входным линиям плюс табличный декодер состояний :roll:
Ответить

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