|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:40 am
|
Страница 1 от 1
|
[ 6 мнения ] |
|
Малко помощ за изкусоряване на програма за INTEL uP
| Автор |
Съобщение |
|
charli
Ранг: Минаващ
Регистриран на: Сря Ное 09, 2005 11:38 pm Мнения: 22
|
 Малко помощ за изкусоряване на програма за 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 е ненужна, но и не пречи.
|
| Вто Окт 07, 2008 3:18 pm |
|
 |
|
charli
Ранг: Минаващ
Регистриран на: Сря Ное 09, 2005 11:38 pm Мнения: 22
|
Никой ли не знае? В този форум ми се струва, че къде по-сложни проблеми се обсъждат. Не мисля, че питането ми е трудност за 90% от участниците от този форум ...
|
| Сря Окт 08, 2008 11:52 am |
|
 |
|
БатеВаньо
Ранг: Новодошъл
Регистриран на: Чет Яну 04, 2007 12:43 am Мнения: 178
|
Charli, проблемът е, че инструкцията DA A не преобразува двоично число в BCD код. Тя се използва за корекция на резултата след сумиране на две BCD числа. В описанието на инструкциите има доста подробно обяснение какво точно прави в зависимост от битовете за пренос и полупренос, както и половинките на резултата.
Това, което ти трябва, е алгоритъм за "binary to BCD conversion". Потърси по Интернет - има ги много, както и примерни програмки за всякакви процесори. Има и сайт с доста информация за тази фамилия микроконтролери - http://www.8052.com
А за fast & dirty решение за числа до 99 можеш да използваш деление на 10 (с вградената инструкция на 8051). Частното от делението е старшата цифра, а остатъкът - младшата.
|
| Сря Окт 08, 2008 12:47 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
прикрепям ти един файл който съм си писал преди доста време и някои неща вече не ги помня защо и как.
Мога само да те уверя че е 100% работещ.
Съжалявам че нямам схемата с която е работил, едно време си измислях нещо и запоявах жиците директно без да гледам хартия, това устройство обаче работи и в такъв вид вече 8 години, ако си от софия даже мога да ти подаря платчицата да си играеш с нея, тя си свърши успешно работата в това време.
Всъщност правих си цифрово управление с оптрон с триак MOC3041 (akoне греша) и триак (BT12 пиша по спомен и може и тук нещо да пропускам) за регулиране мощността на поялника с две бутончета за нагоре и надолу, и двузнаков LED индикатор, като за извеждане на мощността (0-99) на индикатора ползвам точно инструкцията за делене, както ти е дал съвет колега. Индикатора се опреснява в прекъсване от таймер, и дано това не те стряска, пак добавям имам работеа платка с него и съм убеден че и файла е реботещ. Даже за бутончетата има добавена екстра ако се задържат натиснати около половин секунда, стойността почва да се променя по-бързо, както е от клавиатурата на компютъра, при задържане сендва натиснатия символ непрекъснато. Остава само да си го проиграеш през симулатор,дебъгер. Едно време ползвах някакъв досовски SIM51, не беше върха на сладоледа, но с него се научих. Успех 
|
| Чет Окт 09, 2008 11:00 am |
|
 |
|
charli
Ранг: Минаващ
Регистриран на: Сря Ное 09, 2005 11:38 pm Мнения: 22
|
твоят модел покрима 98% от това, което аз се опитвам да сътворя - управление на постояннотоков двигател чрез шим модулация и индикация на степента на запълване на шим-а чрез два седем сегментни индикатора. Ако наистина не ти трябва сплатката, бих я взел. При мен все още всичко е на хартия, нямам процесор, програматор, индикатори, нито готова програма. Ното знам какъв да бъде транзистора, който ще отпушвам, а би било добре да е и с оптрон, както е при тебе. Абе първи стъпки, както му се вика ... Трябва да пусна тема и за това какъв програматор да си купя за серията AT89Cxxxx,AT89LPxxxx, AT89Sxxxx. Ако си запознат с нещата, приемам всякакви предложения. Само да допълня, че ще исползвам PDIP 40 цокъл.
|
| Чет Окт 09, 2008 11:46 am |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
и програматорът ми беше самоделка на ЛПТ порта, преди месеци пробвах да го ползвам за един чип, но не работеше, прекалено сложен е да те занимавам с него. Имаш отправна точка, спестявам ти няколко седмици загубено време, а в интернет, през годините се е натрупал предостатъчно материал за да намериш това което ти трябва. Положи усилия 
|
| Чет Окт 09, 2008 1:24 pm |
|
|
|
Страница 1 от 1
|
[ 6 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|