Работа с два байта като една единица

Задача: PIC16, ASM.

Има два байта информация (10-битов ADC).

Трябва да сравните тези 10 бита с някои конкретни числа и да направите съответния клон в програмата.

Преди работех с ADC по следния начин: избрах ляво подравняване и работех само с ADRESH, като по този начин загубих 2-те най-малко значими бита. Прецизността беше ненужна.

Сега са необходими всичките 10 бита. Във връзка с това въпросът е: как да разгледаме 2 байта информация като едно цяло? Идват ми на ум някои несръчни методи, за чието изпълнение е необходимо много компютърно време. Може би има някои красиви и ефективни решения?

Е, вижте. Например: трябва да се разклоните: ако стойността на ADC е повече от 450, тогава направете A, ако е по-малко - направете B.

d'450 '= b' 00000001 11000010 '

Което от гледна точка на двоичната бройна система и 8-битова asma означава, че числото X, получено в резултат на преобразуването, е по-малко от това число 450?

Най-значимият байт трябва да бъде по-малък или равен на 1.
Най-малко значимият байт трябва да бъде строго по-малък от 11000010.

Задача: PIC16, ASM.

Има два байта информация (10-битов ADC).

Трябва да сравните тези 10 бита с някои конкретни числа и да направите съответния клон в програмата.

Преди работех с ADC по следния начин: избрах ляво подравняване и работех само с ADRESH, като по този начин загубих 2-те най-малко значими бита. Прецизността беше ненужна.

Сега са необходими всичките 10 бита. Във връзка с това въпросът е: как да разгледаме 2 байта информация като едно цяло? Идват ми на ум някои несръчни методи, за чието изпълнение е необходимо много компютърно време. Може би има някои красиви и ефективни решения?

Какъв е проблемът най-общо? Може би това е сравнение на две 16-битови числа и не е необходимо?

Задачата е изключително проста: изходът на импулсния преобразувател е свързан към ADC чрез разделителя, който приема ШИМ от микроконтролера. Необходимо е да се стабилизира напрежението на изхода на преобразувателя на определено ниво. Обратна връзка, накратко. Тук (http://www.microchip.su/showthread.php?t=11518+) описах задачата. Би било възможно да се използва компараторът и модулът VREF, но обработката на данните от компаратора ми се стори малко по-сложна, отколкото от ADC. В същото време получих възможността да се запозная с 16-битови данни, отдавна исках да го разбера.

Благодаря на всички за вашия съвет, приятели. Четох статиите, разбрах много, не разбрах дори повече (особено във 2-ри:)), но научих основите. В резултат на това го направих по метода, предложен от korsaj и tester, в Proteus кодът е работещ и перфектно стабилизира напрежението на изхода на импулса. И сравнението наистина отнема много малко време. Остава да разберем защо реалната верига е странна:) а именно, тя "стабилизира" напрежението на изхода не когато делителят е 2 V (както е посочено във фърмуера), а когато е 1,8 V. Закачих захранването захранващ блок отделно към ADC, подава напрежение към тях - все още остава прагът от 1,8 V. Чудеса в ситото:)

Ако това е само P-контролер, тогава можете да използвате сравнител. Това ще бъде по-бързо от обработката на PIC16 ADC +.

Алгоритъмът с компаратор ми се струва по-опростен.
С таймер задавате желаната честота в прекъсването (PWM честота).
При прекъсване на таймера изрязвате ключа. И изчаквате, докато напрежението на сензора расте. Когато прагът бъде достигнат, компараторът ще работи.
Прекъсвайки компаратора, вие отрязвате ключа.

Сравнителят изисква референтно напрежение, което може да се генерира с помощта на неговия модул за напрежение или като се използва хардуерна ШИМ като ЦАП. Във втория случай имаме голяма резолюция.

Така. Направих нещо подобно преди, за да стабилизирам мощността на намотките на стъпковия двигател.

Възникна още един въпрос, също за двубайтово число.

Всъщност има двубайтово число в диапазона 0 - d'10 000 ', трябва да разпръсна това число в битове. Тоест, открийте първата десетична цифра от числото, втората, третата, четвъртата и петата поотделно. Това се прави, за да се покажат тези числа на индикатор от седем сегмента. Какво трябва да направя? Нищо не ми идва на ум.:(

Не съвсем ясно. Трябва да получа от броя на десетките, стотиците и т.н. просто извадени съответно 10, 100 и т.н. колко пъти изваждате (преди заема) толкова десетки.
Брилянтно. Благодаря:)

И ако задачата е малко по-различна? Например има число 12345 - дванадесет хиляди триста четиридесет и пет. Трябва да разложа това число на пет: "1", "2", "3", "4" и "5". Как да го направя?:)

1. Изчистете 10 000, преди да вземете назаем десетки хиляди спестени. остатък (12345-10000 = 2345 е остатъкът)
2. Изчистете 1000, преди да вземете назаем хиляди спестявания. остатък (2345-1000-1000 = 345 е остатъкът след две изваждания)
3. Изчистете 100, преди да вземете назаем стотици спасявания. остатък (345-100-100-100 = 45 е остатъкът (3 изчислени))
4. Изчистете 10, преди заемът да изглежда десет спасен. остатък (45-10-10-10-10 = 5 е остатъкът (4 изч.))
5. Салдото след изваждане на 10, докато се появи заемната единица.

Преработих само 2-байтови, няма да намеря пример за кода. Като цяло потърсете примери за преобразуване на двоично в двоично-десетично (BCD) представяне.
Погледнете тук. (http://www.microchip.su/showthread.php?t=2343)

Аз също го намерих. Тук е още по-красиво (http://www.microchip.su/showthread.php?t=2162&highlight=bcd).

Възникна още един въпрос, също за двубайтово число.

Всъщност има двубайтово число в диапазона от 0 - d'10 000 ', трябва да разпръсна това число между цифрите. Тоест, открийте първата десетична цифра от числото, втората, третата, четвъртата и петата поотделно. Това се прави, за да се покажат тези числа на индикатор от седем сегмента. Какво трябва да направя? Нищо не ми идва на ум.:(
Също така тук е http://www.massmind.org/techref/postbot.asp?by=time&id=piclist\1996\11\07\205530a&author=John+Payson+&tgt=post (http://www.massmind.org/techref/postbot.asp? by = time & id = piclist% 5C1996% 5C11% 5C07% 5C205530a & author = John + Payson + & tgt = post)
Максималното време за преобразуване е малко по-малко от 1000 машинни цикъла, ако паметта не ме лъже.

Също така тук е http://www.massmind.org/techref/postbot.asp?by=time&id=piclist\1996\11\07\205530a&author=John+Payson+&tgt=post (http://www.massmind.org/techref/postbot.asp? by = time & id = piclist% 5C1996% 5C11% 5C07% 5C205530a & author = John + Payson + & tgt = post)
Максималното време за преобразуване е малко по-малко от 1000 машинни цикъла, ако паметта не ме лъже.
на старата конференция имаше много за това и връзки също

И за 732 цикъла можете да получите 8 цифри на 16-и ASM.
Потърсете старата конференция "3HEX-> 8DEC", въпреки че поради количеството код.