Страница 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} ( в учебниках сие есть - классика однако.. ).
Но 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} ( в учебниках сие есть - классика однако.. ).

Между прочим, так, для справочки, микросхеме тоже не по барабану состояние на входах - дальнейшее состояние на выходах и зависит от состояний входов. Так что от экстрасенсорики они далековаты...
Или Вы можете ответить мне на вопрос :
А как ещё узнать состояние каждой кнопки, не проверяя каждую из них ?
?
Может я далековат от темы...
plollol писал(а):Да, по очереди. Но необходимо как то исключить нажатие например трех кнопок..В исходное состояние >> общий сброс
Вот сейчас товарисч петренко Вам и подкинет схемку на волшебных МС-экстрасенсах

Коли Ваш код является военной тайной

Re: Сложение двух 2-разрядных чисел и индикация суммы
Добавлено: Сб май 24, 2014 20:38:00
petrenko
Да да.
Обязательно подкину. Вверх. На пару метров..
Мы же с Вами точно экстрасенсы, не иначе !
( Ваш юмор я оценил, так оно и есть.. Жаль только, что Вы не оценили мои кавычки, а я не написал там кодовое слово "лопата". )
Сейчас экстрасенсорно разгадаем военную тайну и поможем T.S.
Кстати, ежели серьёзно, то сие "волшебство" вполне реально сделать без м.к. вообще, на ИМС 80-ых годов.
{155ив1+2*155тм2+155им3+***ид*(
дешифратор BCD в семисегментный из любой серии) }
Правда пять корпусов и много "кушают". Нынешний прогресс, как видим, sело всё укомпактил.
T.S. - удачи ! И ежели дозволят разгласить тайну - выкладывайте, вопрошайте, авось что и сможем подсказать..
Re: Сложение двух 2-разрядных чисел и индикация суммы
Добавлено: Сб май 24, 2014 21:00:23
Аlex
petrenko писал(а):Мы же с Вами точно экстрасенсы, не иначе !

Да я давно уже понял, что нужно ТС'у. Просто хочется чтобы люди учились правильно и в необходимом объёме выражать мысли, да и сами хоть пробовали напрягать извилины. По этому приходится так отвечать.
Думаю, Вы меня поняли...
Re: Сложение двух 2-разрядных чисел и индикация суммы
Добавлено: Сб май 24, 2014 21:07:54
petrenko
Да - это правильно.
Ибо хорошо сформулированный вопрос - это уже часть решения.
Ждём-с от T.S. такого решительного и верного шага !

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, если я правильно понял