Микроконтролери и електроника
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, не беше върха на сладоледа, но с него се научих. Успех :)

Прикачени файлове:
REG1.ASM [8.72 KiB]
234 пъти

Автор:  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/