| Автор |
Съобщение |
|
SteEely
Ранг: Минаващ
Регистриран на: Съб Окт 01, 2011 11:00 pm Мнения: 24
|
 Прекъсване на цикъл
Здравейте опитвам се при натискането на бутон да светват 4 светодиода като при всяко натискане да светва следващия и като стигне 4-тия при следващо натискане да светне пак първия (да се опише кръг). Ползвам HI-Tech C компилатора. Светодиоди RB1,RB2,RB3, RB4 Как е най- оптимално да се реализира.
Последна промяна SteEely на Чет Окт 27, 2011 12:39 am, променена общо 1 път
|
| Нед Окт 23, 2011 7:28 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: Проблем с бутон
Най-лесният вариант е да имаш променлива която шифтваш с 1 когато достигне стойност 16 вместо да я шифтваш я правиш 2. Тази променлива директно я подаваш напорта.
|
| Нед Окт 23, 2011 9:36 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Проблем с бутон
Със "switch" и "case" ми се струва, че ще е по-елегантен кода. Хубаво е състоянието на пина да го прехвърляш в променлива и да обработваш нея. Липсва софтуерно премахване на трептенията на контакта - debounce. Вместо побитово описване на четирите бита на изходите, може да го реализираш като "PORTB = 1, PORTB = 2, PORTB = 4, PORTB = 8" или както е описан съответния порт в хедър файла на компилатора. Някъде в кода трябва да си сетнал в "TRIS" кои пинове ще са вход и кои изход.
|
| Нед Окт 23, 2011 9:46 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Проблем с бутон
Ето ти просто решение. Считай кода за ПСЕВДО КОД.. т.е не очаквай че ще тръгне с копи - пейст. Пиковете не са ми от силната страна  .
|
| Нед Окт 23, 2011 9:55 pm |
|
 |
|
SteEely
Ранг: Минаващ
Регистриран на: Съб Окт 01, 2011 11:00 pm Мнения: 24
|
 Re: Проблем с бутон
@ToHu не ми стана ясно какво имаш предвид @itso.t ето как ми изглежда кода за момента @michev RB0 ми е бутончето, но не успявам да схвана идеята ти
|
| Нед Окт 23, 2011 10:27 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Проблем с бутон
След като ти погледнах целия код, мисля че няма никакъв смисъл да обяснявам моя  Да поговорим за твоя - Не ти виждам основния цикъл.. В момента програмата ти тръгва от началото на мейн функцията и приключва след точно 1 изпълнение. В мейн функцията трябва да имаш безкраен цикъл - например с "while (1) { .... твоя код тук ... }". Фор-а който си написал не мога дори да го осмисля за какво е. Не му виждам къдравите скоби дори. Изобщо не ти трябва. Суич конструкцията ти е тотално грешна.. Ако трябва да преработим твоя код с твойта идея, то той би изглеждал поне малко по работещ в следния вид: Сега един приятелски съвет - почети за езика С.
|
| Нед Окт 23, 2011 10:49 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
 Re: Проблем с бутон
Що не си направиш една табличка ?
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Пон Окт 24, 2011 3:09 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Проблем с бутон
Как го скастрихте човека... Явно чете, но сега започва. Темата май е за академията...
|
| Пон Окт 24, 2011 5:44 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Проблем с бутон
Това не е скастряне а приятелски съвет. С какъв по "мек" тон може да се напише?! А и все някой трябва да му каже че не става хептен без четене. За това си напълно прав.
|
| Пон Окт 24, 2011 5:55 pm |
|
 |
|
SteEely
Ранг: Минаващ
Регистриран на: Съб Окт 01, 2011 11:00 pm Мнения: 24
|
 Re: Проблем с бутон
Няма проблеми съгласен съм за четенето. Човек цял живот се учи, но кода който бях дал не беше такъв който съм пробвал, а такъв който драснах просто като пример( а колкото и да си учил преди С като не се ползва си отива). Ако модернаторите преценят нека да преместят темата в Академия. Ето го все пак кода реализиран според моето мислене  Кода си работи, но след като добавих out=1;DelayS(120);out=0;DelayS(5); и се опитвам при натискането на бутона да прекъсна цикъла защото иначе е в безкраен цикъл, най-доброто което постигнах е да изляза от безкрайния цикъл, но трябва да изчакам DelayS-а и чак тогава сменя.
|
| Вто Окт 25, 2011 1:29 am |
|
 |
|
SteEely
Ранг: Минаващ
Регистриран на: Съб Окт 01, 2011 11:00 pm Мнения: 24
|
 Прекъсване на цикъл
Моля ви дайте някаква идея как да го направя  Пробвах какво ли не но не се получава. Как да реализирам прекъсване при натиснат бутон. В момента при натискане на бутона не става нищо, а когато се задържи бутона цикъла се извърти чак тогава се връща.
|
| Сря Окт 26, 2011 11:41 pm |
|
 |
|
bobyk
Ранг: Ориентиран
Регистриран на: Пон Яну 09, 2006 11:32 am Мнения: 276 Местоположение: Kozloduy
|
 Re: Прекъсване на цикъл
Не знам дали критиката ще е градивна но, 1.Ти самия като си четеш кода осмисляш ли какво прави(ш) 2.По добре почни от начало, нарисувай си блок-схемичка, алгоритъм, такива неща и после го реализирай на какъвто ти кеф език. В момента ти не осмисляш какво правиш просто правих каквото и да е с надеждата да се получи някак си, ама погледнато отстрани се вижда че, пишеш без да имаш идея. На никой няма да му е проблем да ти напише кода, но смятам, че ще е по-полезно за теб сам да стигнеш до решението, оправи си начина на мислене, не е в езика проблема.
П.П. По-горе ти дадоха достатъчно идеи.
|
| Чет Окт 27, 2011 9:17 am |
|
 |
|
SteEely
Ранг: Минаващ
Регистриран на: Съб Окт 01, 2011 11:00 pm Мнения: 24
|
 Re: Прекъсване на цикъл
Аз не знам дали го осмисля ама ти май определено - НЕ. Кое те кара да мислиш, че кода е лишен от логика и е драснат просто ей така. От написаното от тебе пък аз стигам до извода че ти изобщо не си си направил труда да прочетеш какво съм написал, защото темата не е първоначалният първоначалният въпрос просто не исках да пускам нова тема. Проблема с четирите диода си го реших , но когато добавя времевите пакети out=1;DelayS(200);out=0;DelayS(50); тогава става проблем и просто исках някой да ми даде идея как да стане (а не да ме нападате и критикувате ) ама явно в този форум не стават нещата. И държа да отбележа, че НЕ търся copy-paste код. Просто искам идея (много ли е).
|
| Чет Окт 27, 2011 11:17 am |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Прекъсване на цикъл
Обясни малко по-подробно какво искаш да направиш.
|
| Чет Окт 27, 2011 12:07 pm |
|
 |
|
bobyk
Ранг: Ориентиран
Регистриран на: Пон Яну 09, 2006 11:32 am Мнения: 276 Местоположение: Kozloduy
|
 Re: Прекъсване на цикъл
Добре да не спорим, да разбирам че искаш докато тече DelayS(100) например да не ти блокира бутона така ли? И не се засягай толкова ама кода ти е малко спагети-код, а и логиката също.
|
| Чет Окт 27, 2011 3:09 pm |
|
|