| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Малко помощ за изкусоряване на програма за INTEL uP http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=6157 |
Страница 1 от 1 |
| Автор: | charli [ Вто Окт 07, 2008 3:18 pm ] |
| Заглавие: | Малко помощ за изкусоряване на програма за INTEL uP |
Като начало нека да кажа, че отскоро "пробивам" в микропроцесорите, за което ви моля да не се шашкате, ако въпросите ви се струват прекалено тъпи. Това ми е един от първите по-стойностни "проекти", но стигнах до задънена улица. За да не давам излишна информация, ще обсъдя само фрмагмент от цялата програма, където всъщност е и проблена. Програмата, и в частност фрагмента е писана за uP 80c31, т.е. можем да използваме и симулатора edsim51. Фрамгмента от програмата е следния: ;-------------------------------------------------------------------------------------- mov R0,#010h mov a,R0 da a mov R0,a mov a,R0 anl a,#0Fh lcall kod mov p1,a mov a,R0 da a swap a anl a, #0Fh lcall kod mov p1,a ret kod: inc a movc A,@A+PC ret db 11000000b ,11111001b, 10100100b,10110000b,10011001b,10010010b,10000010b, 11111000b,10000000b,10010000b,10001000,10000011,11000110,10100001,10000110,10001110 ;-------------------------------------------------------------------------------------- С две думи какво се изисква. В регистър R0 зареждаме сестнайсетичните числа от 0 до 63h (99 десетично). На седемсегментен индикато, свързан към порт P1 искаме да изведем десетичните стойности на шестнайсетичното число, въведено в R0. Програмата изписва първо единиците на числото, а после десетиците, т.е. ако сме въвели в R0 числото 0fh, то на 7 сег. индикатор ще се изпише първо числото 5 и след това 1. и тук идва кривата улица: за числа над 10h (включително) програмата не работи коректно, т.е. двоично - десетичната корекция не работи правилно. Ами който може да помага - нека да помага. За улеснение ето линк за симулатора EdSim и приложението Java: http://4storing.com/t0yu9/78f3c247c1727 ... f3a6e.html Пействате програмата в сумулатора, симулирате и наблюдавате какво става Сега забелязах, че инструкцията da a преди swap a е ненужна, но и не пречи. |
|
| Автор: | charli [ Сря Окт 08, 2008 11:52 am ] |
| Заглавие: | |
Никой ли не знае? В този форум ми се струва, че къде по-сложни проблеми се обсъждат. Не мисля, че питането ми е трудност за 90% от участниците от този форум ... |
|
| Автор: | БатеВаньо [ Сря Окт 08, 2008 12:47 pm ] |
| Заглавие: | |
Charli, проблемът е, че инструкцията DA A не преобразува двоично число в BCD код. Тя се използва за корекция на резултата след сумиране на две BCD числа. В описанието на инструкциите има доста подробно обяснение какво точно прави в зависимост от битовете за пренос и полупренос, както и половинките на резултата. Това, което ти трябва, е алгоритъм за "binary to BCD conversion". Потърси по Интернет - има ги много, както и примерни програмки за всякакви процесори. Има и сайт с доста информация за тази фамилия микроконтролери - http://www.8052.com А за fast & dirty решение за числа до 99 можеш да използваш деление на 10 (с вградената инструкция на 8051). Частното от делението е старшата цифра, а остатъкът - младшата. |
|
| Автор: | Ники [ Чет Окт 09, 2008 11:00 am ] | ||
| Заглавие: | |||
прикрепям ти един файл който съм си писал преди доста време и някои неща вече не ги помня защо и как. Мога само да те уверя че е 100% работещ. Съжалявам че нямам схемата с която е работил, едно време си измислях нещо и запоявах жиците директно без да гледам хартия, това устройство обаче работи и в такъв вид вече 8 години, ако си от софия даже мога да ти подаря платчицата да си играеш с нея, тя си свърши успешно работата в това време. Всъщност правих си цифрово управление с оптрон с триак MOC3041 (akoне греша) и триак (BT12 пиша по спомен и може и тук нещо да пропускам) за регулиране мощността на поялника с две бутончета за нагоре и надолу, и двузнаков LED индикатор, като за извеждане на мощността (0-99) на индикатора ползвам точно инструкцията за делене, както ти е дал съвет колега. Индикатора се опреснява в прекъсване от таймер, и дано това не те стряска, пак добавям имам работеа платка с него и съм убеден че и файла е реботещ. Даже за бутончетата има добавена екстра ако се задържат натиснати около половин секунда, стойността почва да се променя по-бързо, както е от клавиатурата на компютъра, при задържане сендва натиснатия символ непрекъснато. Остава само да си го проиграеш през симулатор,дебъгер. Едно време ползвах някакъв досовски SIM51, не беше върха на сладоледа, но с него се научих. Успех
|
|||
| Автор: | charli [ Чет Окт 09, 2008 11:46 am ] |
| Заглавие: | |
твоят модел покрима 98% от това, което аз се опитвам да сътворя - управление на постояннотоков двигател чрез шим модулация и индикация на степента на запълване на шим-а чрез два седем сегментни индикатора. Ако наистина не ти трябва сплатката, бих я взел. При мен все още всичко е на хартия, нямам процесор, програматор, индикатори, нито готова програма. Ното знам какъв да бъде транзистора, който ще отпушвам, а би било добре да е и с оптрон, както е при тебе. Абе първи стъпки, както му се вика ... Трябва да пусна тема и за това какъв програматор да си купя за серията AT89Cxxxx,AT89LPxxxx, AT89Sxxxx. Ако си запознат с нещата, приемам всякакви предложения. Само да допълня, че ще исползвам PDIP 40 цокъл. |
|
| Автор: | Ники [ Чет Окт 09, 2008 1:24 pm ] |
| Заглавие: | |
и програматорът ми беше самоделка на ЛПТ порта, преди месеци пробвах да го ползвам за един чип, но не работеше, прекалено сложен е да те занимавам с него. Имаш отправна точка, спестявам ти няколко седмици загубено време, а в интернет, през годините се е натрупал предостатъчно материал за да намериш това което ти трябва. Положи усилия |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|