PIC проблема .....

G

Guest

Guest
Имам проблем с една част от кода съм за една програма.Раздел I е приложен е за чип в едно Пейнтбол пистолет и е свързана с включване и изключване на пистолета-който се контролира от един бутон включите portb, 6.Аз използвам PIC16F628A и аз съм с MPLAB w / picstart плюс за него програма.Той е defenitely проблем с intterupts, защото когато се обърна прекъсват на разстояние, кодът работи добре.Но по някаква причина, когато те са на програмата не изглежда да работи на всички-дори и в отстраняване на грешки в MPSIM, всичко изглежда да работи перфектно.Ако това е всяко едно указание за това какво се случва, когато програмата стартира, червената светлина, която е на portb, 5 остава много тъп, и нивото на напрежение на ПИН е само около 1,5 волта-което ме кара да мисля, че някъде е изключване и включване на много по-бързо.

Ето какво е трябвало да се случи.Батерията е свързан.Програмата посочва на етикета "Старт" веднага.В intcon регистър е настроена да се даде възможност РБ пристанище прекъсва промяна.Trisa и trisb са за настройка и др.След това програмата отива в режим на заспиване, чака бутона на захранването за да бъде тласкан.Когато го прави програмата трябва да сочи към адрес 0x04.След малко в "мощност" регистър следи дали оръжието е включване или изключване.Ако си изключване тя отива отново в сън.Ако това е включване на програмата се връща в "начало", но този път прескача през сън обучение и продължава към основната програма.Всяка помощ ще бъде оценена.

http://home.comcast.net/ ~ millersseven / testprog.asm

 
Един от проблемите е, че програмите ви никога не се връща от прекъсване чрез RETFIE инструкция.

Тъй като 16F628 (A) има само едно ниво 8 стека стека ще прелее в най-скоро ...

И не трябва да използвате инструкцията SLEEP вътре в основната програма и прекъсва, аз ще я използва само в основната програма.

Вашата основна програма също трябва безкраен цикъл в противен случай програмата ще започне отново и отново и отново

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Много Щастлив" border="0" />И ако си спомням правилно, трябва да сложите инструкции NOP непосредствено след всяка инструкция сън.

Също публикувате FUSE настройки може би нещо не е наред ли??

Надявам се това да помогне и най-добри пожелания

 
RETFIE не ми помага в този случай.Но аз възстанови на GIE малко, когато прекъсва рутинни свърши.Имам NOP след всяка от сън инструкции-въпреки, че има откъснати от част дадох.Основната програма е един безкраен цикъл, но аз само да избере да приложи част от програмата, която ми даваше проблеми.Когато се свържете батерията, всичко трябва да бъде изключена и трябва да бъде по време на сън, но това не е така.Ако аз съм включите GIE все пак, всичко работи добре.Той не прави никакъв смисъл.

 
Рамбо написа:

RETFIE не ми помага в този случай.
 
също не са записани в регистъра прекъсне рутинни

 
Ето предпазител настройки.
Вътрешна честота, I / O в очакване RA6 и RA7
Пазителят на разстояние
Мощност таймер
код защита на разстояние
кафяв посочени откриване на разстояние
Капитанът ясно даде възможност на разстояние от
ниско напрежение програма.от
данни ЕЕ прочетете защита.от

Не мога да намеря някакъв начин да използват инструкциите за връщане.Когато се случва да прекъсне искате програмата да не започне всичко отначало продължи откъдето е спряло.Аз също възстанови GIE след прекъсване се случва, което е това, което RETFIE прави.
Може би това ще даде по-добро вникване в на проблема.Сложих малко правила за изпитване след "начало" етикет и след всичко, което е създадена.Тя е за един миг зелена светлина.Сега, когато стартирате програмата, на едно и също нещо се случва по дяволите-червената светлина се превръща в скучна-макар и да трябва да върви право към мигащата зелена светлина.Сега, ако продължавам GIE инвалиди, а след това зелена светлина започва да мига както трябва.

Аз съм Ако приемем, че говорим за "сила" регистър, който да използвам, за да следите за включване / изключване.Не е необходимо да бъдат спасени по време на сън.Когато програмата продължава да спи, силата Регистрирайте се изчиства, което е точно това, програмата разчита.

 
Рамбо написа:

Ето предпазител настройки.

кафяв посочени откриване на разстояние

Капитанът ясно даде възможност на разстояние отНе мога да намеря някакъв начин да използват инструкциите за връщане.
Когато прекъсне случва Искам програмата на всички отново не започне продължи откъдето е спряло.
 
Може да публикувате пълната програма?

 
http://home.comcast.net/ ~ millersseven / program.asm Това е пълната програма

Аз поддръжка Браун Няма откриване, но стартирането на програмата, без да било начин.Намерих когато програмата е застояването на, но аз не съм сигурен как да стига до там.Етикетът "изключено" е мястото, където програмата е получаване на по някакъв начин.Намерих това от промяна на червена светлина (portb, 4) в синьо (portb, 5), и разбира се, когато съм свързан батерията, синята светлина се обърна за скучна.Но го прави абсолютно никакъв смисъл как програмата е да стигнат до там, да не говорим как се примка около за съхраняване на червена светлина скучна.
Разбирам, че това не е обикновено прекъсва как се използват, но не мога да мисля за някакъв друг начин, за да работи.Но теоретично тя трябва да работи и той работи отлично в дебъгер MPLAB.Аз съм объркан.

 
Мисля, че проблема е свързан с debouncing на превключвателя.Изчисти RBIF в началото на прекъсване, но трябва да го ясно в края, след като сте debounced ключа.В противен случай, ако го ясно в началото, веднага след като си вземат пръст разстояние от преминаването на RBIF ще бъде създадена отново и ще призове за прекъсване отново.Така че си мисли, че програмата е изключена, след това, чака, за да вземе пръст превключвател (създаване RBIF), призовава за прекъсване отново, защото RBIF е определен, а след това програмата мисли, че е изключен.

Ако имате ясна RBIF в края, сте го клиринг след като сте чакали пръста си да излизам ключа и за всеки скача.Тогава не трябва да се обадите на прекъсване два пъти.

 

Welcome to EDABoard.com

Sponsor

Back
Top