| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| проблем на начинаещ с PIC18 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2655 |
Страница 1 от 1 |
| Автор: | Elmech [ Пет Юли 14, 2006 6:20 pm ] |
| Заглавие: | проблем на начинаещ с PIC18 |
table ADDWF PCL,f ; таблица за прекодиране на BCD в седемсегментен код RETLW 0x7F ; 0 в седемсегментен код RETLW 0x0C ; 1 в седемсегментен код RETLW 0xB6 ; 2 в седемсегментен код RETLW 0x9F ; 3 в седемсегментен код RETLW 0xCC ; 4 в седемсегментен код RETLW 0xDA ; 5 в седемсегментен код RETLW 0xFA ; 6 в седемсегментен код RETLW 0x0F ; 7 в седемсегментен код RETLW 0xFF ; 8 в седемсегментен код RETLW 0xDF ; 9 в седемсегментен код RETLW 0x00 ; - в седемсегментен код като тествам програмата в MPASM (Wreg примерно равен на 2 или 3), брояча на командите PCL се увеличава с 2, а реда на който е дебъгера остава същия - (таble), сякаш това не е команда за събиране. какво съм пропуснал да прочета за PIC18F458 ? |
|
| Автор: | ¶ [ Пет Юли 14, 2006 8:41 pm ] |
| Заглавие: | |
http://www.mcu-bg.com/mcu_site/viewtopi ... ght=pclath Помисли върху думите на Bezmozachen. |
|
| Автор: | Elmech [ Пет Юли 14, 2006 9:10 pm ] |
| Заглавие: | |
изпробвах и запис на старшия бит на таблицата директно на PCLATH, резултатът е пак отрицателен. Направо не може да се промени стойността на PCL-пробвах да събирам в Wreg и после само да го запиша,пак не става/ Преди съм използвал тази конструкция няколко пъти на ПИк16 Ф877А и не съм имал проблеми. Дали не е от MPASM - защото PCL го виждам как се увеличава с по 2, ( на прозореца с регисрите), а реда на изпълнение на командата от дебъгера направо не се мести, стои на същия ред. Пробвах и компилация от различни адреси, както и на хулевата страница, без преход към старшия разряд...... |
|
| Автор: | ¶ [ Пет Юли 14, 2006 9:39 pm ] |
| Заглавие: | |
Коя версия използваш ? Сигурен ли си, че си задал на симулатора, че твоят процесор е F458 ? |
|
| Автор: | Predator_MF [ Пет Юли 14, 2006 9:51 pm ] |
| Заглавие: | |
@Elmech, първата основна разлика между 16-ка и 18-ка е размера на FLASH, в 18-ките е 16-bit Просто пишеш 2-пъти по голямо число в W при 18-ките - примерно искаш да скочиш на 3-ти ред, пишеш числото 6, искаш на 8-ми ред, пишеш 16 |
|
| Автор: | Elmech [ Пет Юли 14, 2006 10:26 pm ] |
| Заглавие: | |
Predator_MF, като стигне до този ред с : ADDWF PCL,f , просто умира, или стои там на същия ред( в дебъгера), или в някой вариант скачаше направо на 00 MPLAB v7.40, за F458 e сигурно, дори пробвах кода и с 16 f 877- същото е положението, но го пробвах набързо, утре повече... |
|
| Автор: | Predator_MF [ Съб Юли 15, 2006 12:42 am ] | |||||||||
| Заглавие: | ||||||||||
При мен работи твоя код, само че за 18F452, я погледни какво става с PCH на тоя ред ADDWF PCL,f ...да не би да гази някъде в лопуша там, бях мернал, че при някой 18-ки трябва да тъпчеш и в PCH ето какво пише за 18-ките, в графа PCL, PCLATH and PCLATHU
Btw, има доста по-добър начин за съхранение на данни в таблица, ползвай TBLPTR и ТABLAT за директно писане/четене на FLASH-а, така можеш да съхраниш 2 байта в една инструкция, за разлика от computed goto метода с таблиците, където съхраняваш само един, тъй като другия е зает от инструкцията RETLW. |
||||||||||
| Автор: | Gogo [ Съб Юли 15, 2006 12:36 pm ] | |||||||||
| Заглавие: | ||||||||||
Ето едно примерче:
Прочетеното от таблицата е в ТABLAT. Сега трябва да ти се е изяснило как и защо се ползва TBLPTR. Друг вариант е да си направиш масива в RAM-а и да го четаш с някой FSR регистур с PLUSW инструкция. |
||||||||||
| Автор: | the_real_maniac [ Нед Юли 16, 2006 3:10 pm ] |
| Заглавие: | |
Извинявай, но ми отбягва идеята да изчистя WREG и да го събера с литерал 0 + х = х , защо направо не зареждаш литерала в WREG /съмнявам се някакъв бъг да се избягва, но със сигурност на мен ми бяга идеята |
|
| Автор: | Gogo [ Нед Юли 16, 2006 7:40 pm ] | |||||||||
| Заглавие: | ||||||||||
Така е, за да стане като ADDWF PCL,f (или поне да прилича;)) Например:18+9=? Като събереш 8 и 9, слагаш ли 1 на ум Ако масива започва например от адрес 0x4FC, тогава трябва да се напише така, защото... сети се сам Ако не преминава в другата "страница", тогава може директно да си заредиш адреса на масива, без тази "гимнастика" със събирането. Дал съм така примера, защото е най-универсално (според мене). |
||||||||||
| Автор: | Bezmozachen [ Пон Юли 17, 2006 12:02 pm ] | |||||||||
| Заглавие: | ||||||||||
Още едно примерче за "computed goto".
Третата инструкция обновява PCLATH и при нужда след това се коригира. Така този код работи навсякъде в памета. |
||||||||||
| Автор: | Elmech [ Пон Юли 17, 2006 4:47 pm ] |
| Заглавие: | ? |
Благодаря за примерите, досега не съм работил с командите за таблица и ще ги разуча. Но това което ви написах досега винаги ми е работило (като се има напредвид и преноса за старшия байт на PC). Но чудното е че същата програма ,същия асемблерен код на другия ден работи без грешка, пробвах го няколко пъти, без промяна на никакви настройки в работното поле. Така както не работеше предния ден (дори след рестарт на MPASM) .Отдавам го на това, че пробвах да симулирам кода и схемата в Proteus 6.9,но не можах да го излъжа да тръгне. Въпреки че го затворих и продължих на асемблер, сигурно някой драйвер е останал в RAM на компа, и не се презарежда отново, а си го ползва същия. Но със сигурност като не вървеше затворих всички програми и ги рестартирах отново,(не и Windows) Ако някой има работещо копие на Proteus6.... с PIC- симулации, моля да ми помогне да го пусна. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|