Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/33: Рейтинг темы: голосов - 33, средняя оценка - 4.85
orm-17
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 35
1

Ограничивалка

26.03.2014, 11:18. Просмотров 5953. Ответов 24
Метки нет (Все метки)

Подскажите, как Сравнить на макс. и мин. значение в двоичном счетчике в самом инкременте декременте счетчика?

Forward:
cbr flags, (1__IvimtForward);сбросить флаг,обработали событие
;перед odyw надо сделать проверку числа на максимальное значение (0xffff), и если равно макс. значению то пропустить инкремент (odyw)

odyw CountHigh:CountLow,1 ;инкремент 16-ти битного счетчика

Покажите пример на ASM. пожалуйста. Очень надо.
0
orm-17
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 35
07.04.2014, 23:44 21
про регистровую пару я знаю и книгу Вольфганг Трамперт всю перечитал. Вопрос: как лучше написать в реверсивном счетчике быструю ограничевалку.

Надо, чтоб при счете при совпадении загорался светодиод.
Трудность в том что прогу надо писать в обработчике прерываний. Выполнить быстро и выйти.
Фрагменты рабочих программ выкладывал ваше, но они очень медленные.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
07.04.2014, 23:47 22
Иногда стоит пересмотреть задачу или взглянуть на нее по другому. Что вы делаете, что вы хотите получить?
0
orm-17
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 35
07.04.2014, 23:52 23
вот такой вариант, кто может быстрее?

[552 байт]
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
08.04.2014, 00:21 24
Цитата Сообщение от orm-17
вот такой вариант, кто может быстрее?
Тьфу, едрить! Нашел чем удивить. Заглавными буквами принято обозначать константы. Волшебные числа, епт!

Код
.equ MAX_VOTUE = 1000
.equ MIN_VOTUE = 5

;**********************************************************************
Back:
ldi VOT_LOW, Low (MIN_VOTUE)
ldi VOT_HI, High (MIN_VOTUE)
clr r16
rjmp Comp_Val

Forward:
ldi VOT_LOW, Low (MAX_VOTUE)
ldi VOT_HI, High (MAX_VOTUE)
ldi r16, 0b00000001 // для примера

Comp_Val:
cbr   flags, (1<<IvimtForward)
//sbis KNOPA_PIN, KNOPA
//bla-bla
//sbic KNOPA_PIN, KNOPA
//bla-bla
cp CountLow, VOT_LOW
cpc CountHigh, VOT_HI

sbrc r16, 0
rjmp label_1

brlo Skip_Increment
sbiw CountHigh:CountLow,1
rjmp Bla_bla

label_1:
brsh Skip_Increment
odyw CountHigh:CountLow,1

Bla_bla:

//   rcall   PrintASCII // Это вынести в основной цикл
Exit:
// восстановление контекста и SREG
reti
;**********************************************************************
0
orm-17
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 35
09.04.2014, 13:15 25
"Для тех кто в бронепоезде" епт!
Повторяю: После сохранения через меню у меня в EEPROM сохраняется любое число от 65535 до 00000.
Надо, чтоб при совпадении число которое в EEprom и число которое образуется при счете импульсов , загорался светик.
Сложность в том , что в такой форме.

Выход чисел в регистрах
tASCII4;0x36
tASCII3;0x35
tASCII2;0x35
cnt16a;0x33
fASCII2;0x35

Вопрос: Как реализовать совпадение чисел?
И чтоб циклов по меньше.

Я делал так.Вот моя ограничевалка.

;*******************ограничевалка*****************************************

ldi temp1,0x36 ;6

cp temp1,tASCII4

breq equal

rjmp end_int

equal:

ldi temp1,0x35 ;5

cp temp1,tASCII3

breq equal_1

rjmp end_int

equal_1:

ldi temp1,0x35 ;5

cp temp1,tASCII2

breq equal_2

rjmp end_int

equal_2:

ldi temp1,0x33 ;3

cp temp1,cnt16a

breq equal_3

rjmp end_int

equal_3:

ldi temp1,0x35 ;5

cp temp1,tASCII2

breq equal_4

end_int:

ret
0
09.04.2014, 13:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru