Страница 1 из 1

Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 17:42:34
plollol
Как организовать сумму двух 2-разрядных чисел и индикацию на семисегментном индикаторе.
Вход PA0-PA3 это числа от 0-3, а PA4-PА7 тоже числа с 0-3. Нажаты могут быть только 2 кнопки, т.е. результат от 0...6.
Если проверять каждую кнопку, нажата или нет, то получится я думаю большой бесполезный код... Так как в этом деле я начинающий , то прошу подскажите ваши методы.

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 19:07:02
Аlex
plollol писал(а):Если проверять каждую кнопку, нажата или нет, то получится я думаю большой бесполезный код...
А как ещё узнать состояние каждой кнопки, не проверяя каждую из них ? Это что-то из области экстрасенсорики :)
И что значит "большой и бесполезный" код ? Покажите его, может и подскажем альтернативу.

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 19:20:42
petrenko
..что-то из области экстрасенсорики..
- а для научной "экстрасенсорики", между прочим, "издревле" применялась схемка из {155ив1+155тм2} ( в учебниках сие есть - классика однако.. ). :wink:
Но T.S. вроде надо без доп. ИМС - обойтись только м.к. - так понимаю ?

И ещё есть вопросы : Кнопки нажимаются по очереди ?
И как фиксируется ввод ?
И что приводит конструкцию в изходное состояние для вычисления следующей суммы ?
Каждый раз общий сброс или всё таки есть ещё кнопк(а/и) кроме цифр ?
Можно продолжить ряд вопросов, как понимаете, потому как задача сформулирована .. эээ ну скажем так - несколько нечётко..

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 19:36:31
plollol
petrenko писал(а):
Но T.S. вроде надо без доп. ИМС - обойтись только м.к. - так понимаю ?

И ещё есть вопросы : Кнопки нажимаются по очереди ?
И как фиксируется ввод ?
И что приводит конструкцию в изходное состояние для вычисления следующей суммы ?
Каждый раз общий сброс или всё таки есть ещё кнопк(а/и) кроме цифр ?
Только м.к.
Да, по очереди. Но необходимо как то исключить нажатие например трех кнопок..
В исходное состояние >> общий сброс

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 19:54:48
petrenko
Ну тогда только стандартным алгоритмом - периодический опрос ( и антидребезг не забывать ) и приоритетный выбор только одной кнопки если несколько нажаты.
( Да, и на всякий случай напомню - семисегментный включайте с токоограничительными резисторами - вдруг Вы не знали сие .. )

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 20:06:13
Аlex
petrenko писал(а):а для научной "экстрасенсорики", между прочим, "издревле" применялась схемка из {155ив1+155тм2} ( в учебниках сие есть - классика однако.. ). :wink:
Между прочим, так, для справочки, микросхеме тоже не по барабану состояние на входах - дальнейшее состояние на выходах и зависит от состояний входов. Так что от экстрасенсорики они далековаты...
Или Вы можете ответить мне на вопрос :
А как ещё узнать состояние каждой кнопки, не проверяя каждую из них ?
?
Может я далековат от темы... :dont_know:
plollol писал(а):Да, по очереди. Но необходимо как то исключить нажатие например трех кнопок..В исходное состояние >> общий сброс
Вот сейчас товарисч петренко Вам и подкинет схемку на волшебных МС-экстрасенсах :wink: Коли Ваш код является военной тайной :))

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 20:38:00
petrenko
Да да.
Обязательно подкину. Вверх. На пару метров.. :)
Мы же с Вами точно экстрасенсы, не иначе ! :beer:
( Ваш юмор я оценил, так оно и есть.. Жаль только, что Вы не оценили мои кавычки, а я не написал там кодовое слово "лопата". )
Сейчас экстрасенсорно разгадаем военную тайну и поможем T.S. :music:

Кстати, ежели серьёзно, то сие "волшебство" вполне реально сделать без м.к. вообще, на ИМС 80-ых годов.
{155ив1+2*155тм2+155им3+***ид*(дешифратор BCD в семисегментный из любой серии) }
Правда пять корпусов и много "кушают". Нынешний прогресс, как видим, sело всё укомпактил. :tea:

T.S. - удачи ! И ежели дозволят разгласить тайну - выкладывайте, вопрошайте, авось что и сможем подсказать..

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 21:00:23
Аlex
petrenko писал(а):Мы же с Вами точно экстрасенсы, не иначе ! :beer:
Да я давно уже понял, что нужно ТС'у. Просто хочется чтобы люди учились правильно и в необходимом объёме выражать мысли, да и сами хоть пробовали напрягать извилины. По этому приходится так отвечать.
Думаю, Вы меня поняли...

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Сб май 24, 2014 21:07:54
petrenko
Да - это правильно.
Ибо хорошо сформулированный вопрос - это уже часть решения. 8)

Ждём-с от T.S. такого решительного и верного шага ! :tea:

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Пн май 26, 2014 19:59:54
plollol
что то типо того, оказывается все просто, чем я думал:

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

;***************************
;Автор :                   *
;Имя файла:                *
;Для AVR:                  *
;Версия:                   *
;***************************
;Выполняемые функции:
; 
;=========

.include "m8535def.inc"     ;Подключение стандартных бибоиотек
;=========
;Объявления:

.def	temp=r16			;Присвоение новых имен	;				;
;=========  
;Начало программы
.cseg						;
.org 0						;
reset:						;	
	ldi temp,low(RAMEND)	;
	ldi	r17,high(RAMEND)	;
	out	spl,temp			;
	out sph,r17
;Конфигурация входов/выходов
	ldi	temp,0b00000000		;PA0-7 вход ( кнопки )
	out	DDRA,temp
	clr	temp			;
	ldi	temp,0b11111111		;PB0-7 выход (индикатор) 
	out	DDRB,temp			;
	out	PortA,temp			; Подтяжки на порт А
	clr	temp							;
	out	PortB,temp			;Подтяжка не нужна	
;---Основной цикл--------------
loop:
		clr r18
		ldi r20,0xFF		; подаем напряжение лог.1 на HG
		out portC, r20


		in r18, PINA		; записываем в регистр r18 из PINA

		cpi r18, 0b00000000	; сравниваем значение r18 с нулем 
		breq _0				; если совпадают, то переходим на метку _0, иначе переходим 
		cpi r18, 0b00000001	; следующую строку (т.е. проверяем дальше)
		breq _1
		cpi r18, 0b00001000
		breq _1
		cpi r18, 0b00001001
		breq _2
		cpi r18, 0b00000010
		breq _2
		cpi r18, 0b00010000
		breq _2
		cpi r18, 0b00000011
		breq _3
		cpi r18, 0b00000100
		breq _3
		cpi r18, 0b00011000
		breq _3
		cpi r18, 0b00100000
		breq _3
		cpi r18, 0b00010001
		breq _3
		cpi r18, 0b00001010
		breq _3
		cpi r18, 0b00000101
		breq _4
		cpi r18, 0b00100001
		breq _4
		cpi r18, 0b00010010
		breq _4
		cpi r18, 0b00101000
		breq _4
		cpi r18, 0b00001100
		breq _4
		cpi r18, 0b00110000
		breq _5
		cpi r18, 0b00100010
		breq _5
		cpi r18, 0b00000110
		breq _5
		cpi r18, 0b00010100
		breq _5
		cpi r18, 0b00010100
		breq _6
		rjmp loop


_0:	
	ldi r19,0xFC
	out DDRB, r19
	rjmp loop
_1:
	ldi r19,0x60
	out DDRB, r19
	rjmp loop	
_2:
	ldi r19,0xDA
	out DDRB, r19
	rjmp loop
_3:
	ldi r19,0xF2
	out DDRB, r19
	rjmp loop
_4:
	ldi r19,0x66
	out DDRB, r19
	rjmp loop
_5:
	ldi r19,0xB6
	out DDRB, r19
	rjmp loop
_6:
	ldi r19,0xBE
	out DDRB, r19
	rjmp loop

Re: Сложение двух 2-разрядных чисел и индикация суммы

Добавлено: Вт май 27, 2014 13:57:14
orinoko
Судя по всему, от цифры "0" вы отказались, что весьма логично, наверное :)
И перед строкой "breq _6" у вас ошибка - вместо cpi r18, 0b00010100 написать cpi r18, 0b00100100, если я правильно понял