Отговори на тема  [ 7 мнения ] 
малко пояснения за PIC 16F84A ?? 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Юли 16, 2009 12:04 pm
Мнения: 4
Мнение малко пояснения за 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


Чет Юли 16, 2009 12:58 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Дано не бъркам, че от доста време не съм правил програми на асемблер, но дефакто процесора ти не трябва да стига до end, защото после не се знае къде отива. Трябва да осигуриш примерно безкраен цикъл в края на програмата и да се върти там след като приключи с това дето си му задал.


Чет Юли 16, 2009 2:34 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Юли 16, 2009 12:04 pm
Мнения: 4
Мнение 
аха...то яво като езае къде да отива започва да брой докато е се спре захраваето...

О.К. мерси pal 8)


Чет Юли 16, 2009 2:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Това: et2 NOP го сложи преди GOTO et2


Чет Юли 16, 2009 4:09 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Юли 16, 2009 12:04 pm
Мнения: 4
Мнение 
:) да...тогажа схте се оформи тоя безктаен цикъл, за който говорихме :)


Пет Юли 17, 2009 10:28 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение 
На много места имам спомени че слагаха slip пред end

_________________
Вниманиене съмвишист....ИЙ.


Пет Юли 17, 2009 11:05 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Някои неща, които им направиха впечатление:
Не, че ще повлияят на работата на програмата ти, но при оптимизиране ще помогнат.
Когато зареждаш регистрите с една и съща стойност, няма нужда да зареждаш работния регистър всеки път.
Тоест, това:
Код:
MOVLW D'24'
MOVWF ch1
MOVLW D'24'
MOVWF ch2
MOVLW D'24'
MOVWF ch3
MOVLW D'24'
MOVWF ch4
MOVLW D'24'
MOVWF ch5

Може да стане и така:
Код:
MOVLW D'24'
MOVWF ch1
MOVWF ch2
MOVWF ch3
MOVWF ch4
MOVWF ch5

Другото, което видях е, че двата рета преди END са напълно излишни:
Код:
BTFSS FSR,2
GOTO et1
GOTO et2
et2 NOP
end

Става:
Код:
BTFSS FSR,2
GOTO et1
end

Сега ПДФ-а не е пред мен и не мога да кажа със сигурност, но провери адресите, които си задал дали не се припокриват случайно с някой специален регистър и оттам да ти се получава неясното поведение. За удобство, ползувай шестнадесетични, вместо двоични числа.
За подсигуряване, вместо да проверяваш един бит от адресния регистър, може да го сравняваш с ch5 Когато се изравни или стане по-голямо, прекратяваш програмата. Ако се чудиш, сравняването става чрез изваждане. ;)

_________________
Digitally yours: Optron


Вто Авг 11, 2009 11:19 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни