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

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 5
Зарегистрирован: Вт апр 08, 2014 18:53:06

Сообщение plollol »

Как организовать сумму двух 2-разрядных чисел и индикацию на семисегментном индикаторе.
Вход PA0-PA3 это числа от 0-3, а PA4-PА7 тоже числа с 0-3. Нажаты могут быть только 2 кнопки, т.е. результат от 0...6.
Если проверять каждую кнопку, нажата или нет, то получится я думаю большой бесполезный код... Так как в этом деле я начинающий , то прошу подскажите ваши методы.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

plollol писал(а):Если проверять каждую кнопку, нажата или нет, то получится я думаю большой бесполезный код...
А как ещё узнать состояние каждой кнопки, не проверяя каждую из них ? Это что-то из области экстрасенсорики :)
И что значит "большой и бесполезный" код ? Покажите его, может и подскажем альтернативу.
Контактная информация:
Реклама
Друг Кота
Сообщения: 5339
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

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

И ещё есть вопросы : Кнопки нажимаются по очереди ?
И как фиксируется ввод ?
И что приводит конструкцию в изходное состояние для вычисления следующей суммы ?
Каждый раз общий сброс или всё таки есть ещё кнопк(а/и) кроме цифр ?
Можно продолжить ряд вопросов, как понимаете, потому как задача сформулирована .. эээ ну скажем так - несколько нечётко..
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Родился
Сообщения: 5
Зарегистрирован: Вт апр 08, 2014 18:53:06

Сообщение plollol »

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

И ещё есть вопросы : Кнопки нажимаются по очереди ?
И как фиксируется ввод ?
И что приводит конструкцию в изходное состояние для вычисления следующей суммы ?
Каждый раз общий сброс или всё таки есть ещё кнопк(а/и) кроме цифр ?
Только м.к.
Да, по очереди. Но необходимо как то исключить нажатие например трех кнопок..
В исходное состояние >> общий сброс
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 5339
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

Ну тогда только стандартным алгоритмом - периодический опрос ( и антидребезг не забывать ) и приоритетный выбор только одной кнопки если несколько нажаты.
( Да, и на всякий случай напомню - семисегментный включайте с токоограничительными резисторами - вдруг Вы не знали сие .. )
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

petrenko писал(а):а для научной "экстрасенсорики", между прочим, "издревле" применялась схемка из {155ив1+155тм2} ( в учебниках сие есть - классика однако.. ). :wink:
Между прочим, так, для справочки, микросхеме тоже не по барабану состояние на входах - дальнейшее состояние на выходах и зависит от состояний входов. Так что от экстрасенсорики они далековаты...
Или Вы можете ответить мне на вопрос :
А как ещё узнать состояние каждой кнопки, не проверяя каждую из них ?
?
Может я далековат от темы... :dont_know:
plollol писал(а):Да, по очереди. Но необходимо как то исключить нажатие например трех кнопок..В исходное состояние >> общий сброс
Вот сейчас товарисч петренко Вам и подкинет схемку на волшебных МС-экстрасенсах :wink: Коли Ваш код является военной тайной :))
Контактная информация:
Реклама
Друг Кота
Сообщения: 5339
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

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

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

T.S. - удачи ! И ежели дозволят разгласить тайну - выкладывайте, вопрошайте, авось что и сможем подсказать..
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

petrenko писал(а):Мы же с Вами точно экстрасенсы, не иначе ! :beer:
Да я давно уже понял, что нужно ТС'у. Просто хочется чтобы люди учились правильно и в необходимом объёме выражать мысли, да и сами хоть пробовали напрягать извилины. По этому приходится так отвечать.
Думаю, Вы меня поняли...
Контактная информация:
Друг Кота
Сообщения: 5339
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

Да - это правильно.
Ибо хорошо сформулированный вопрос - это уже часть решения. 8)

Ждём-с от T.S. такого решительного и верного шага ! :tea:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Родился
Сообщения: 5
Зарегистрирован: Вт апр 08, 2014 18:53:06

Сообщение 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
orinoko

Сообщение orinoko »

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

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