| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| малко пояснения за PIC 16F84A ?? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=6985 |
Страница 1 от 1 |
| Автор: | vedball [ Чет Юли 16, 2009 12:58 pm ] |
| Заглавие: | малко пояснения за PIC 16F84A ?? |
днеска реших да инсталирам пак MPLAB за да видя какво съм забравил и какво си спомням от Асемблера и написах една простичка програма която 1-во зарежда константа в 5 псоледователни клетки от паметта и след това нулира клетките. Простичко.... Но след като стигне до нулирането на 5-тата кл. би трябвало програмата да свърши (така съм му кзал), но не е така. Стойностите на Работния р-р започват да броят до 0 и като стигне 0 айде пак от 255 моля за малко пояснения ето го и кода: list p=16F84A #include <p16F84A.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ORG H'00' GOTO start ch1 EQU B'11000000' давам имена на адресите ch2 EQU B'11000001' ch3 EQU B'11000010' ch4 EQU B'11000011' ch5 EQU B'11000100' start MOVLW D'24' зареждам работния р-р с 24 MOVWF ch1 зареждам адресите с 24 MOVLW D'24' MOVWF ch2 MOVLW D'24' MOVWF ch3 MOVLW D'24' MOVWF ch4 MOVLW D'24' MOVWF ch5 MOVLW ch1 зареждам адреса на 1-вото число MOVWF FSR в FSR CLRF INDF нулирам 1-вото число et1 INCF FSR,1 зареждам адреса на следващото число CLRF INDF нулирам го BTFSS FSR,2 проверявам 3-тия по ред бит на FSR, ако е 1 означава че е обработен и 5-тия адрес и би трябвало прог. да иде на E N D, ако е 0 ще се формира още един адрес GOTO et1 GOTO et2 et2 NOP end Да не би да е така, защото NOP нетрябва да стои преди END ? май имаше нещо такова но не съм сигурен ....а проблема настъпва точно когато стигне до NOP |
|
| Автор: | Zeus [ Чет Юли 16, 2009 2:34 pm ] |
| Заглавие: | |
Дано не бъркам, че от доста време не съм правил програми на асемблер, но дефакто процесора ти не трябва да стига до end, защото после не се знае къде отива. Трябва да осигуриш примерно безкраен цикъл в края на програмата и да се върти там след като приключи с това дето си му задал. |
|
| Автор: | vedball [ Чет Юли 16, 2009 2:52 pm ] |
| Заглавие: | |
аха...то яво като езае къде да отива започва да брой докато е се спре захраваето... О.К. мерси pal |
|
| Автор: | Gogo [ Чет Юли 16, 2009 4:09 pm ] |
| Заглавие: | |
Това: et2 NOP го сложи преди GOTO et2 |
|
| Автор: | vedball [ Пет Юли 17, 2009 10:28 am ] |
| Заглавие: | |
| Автор: | RM [ Пет Юли 17, 2009 11:05 am ] |
| Заглавие: | |
На много места имам спомени че слагаха slip пред end |
|
| Автор: | optron [ Вто Авг 11, 2009 11:19 am ] | ||||||||||||||||||||||||||||||||||||
| Заглавие: | |||||||||||||||||||||||||||||||||||||
Някои неща, които им направиха впечатление: Не, че ще повлияят на работата на програмата ти, но при оптимизиране ще помогнат. Когато зареждаш регистрите с една и съща стойност, няма нужда да зареждаш работния регистър всеки път. Тоест, това:
Може да стане и така:
Другото, което видях е, че двата рета преди END са напълно излишни:
Става:
Сега ПДФ-а не е пред мен и не мога да кажа със сигурност, но провери адресите, които си задал дали не се припокриват случайно с някой специален регистър и оттам да ти се получава неясното поведение. За удобство, ползувай шестнадесетични, вместо двоични числа. За подсигуряване, вместо да проверяваш един бит от адресния регистър, може да го сравняваш с ch5 Когато се изравни или стане по-голямо, прекратяваш програмата. Ако се чудиш, сравняването става чрез изваждане. |
|||||||||||||||||||||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|