|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 7:18 pm
| Автор |
Съобщение |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 LED isn`t Blinking!
Здравейте! Може ли да получа малко съдействие относно един прост код /за можещите/ и явно доста труден за начинаещите! Прикачам кода. Благодаря!
|
| Нед Авг 17, 2014 12:30 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
Погледнах го съвсем отгоре, както точно не ти работи. Начина по който е направнео приемането е доста баламски, не знам от какво му пращаш данни но е възможно да изтърваш единицата ако се предава и още нещо.
|
| Нед Авг 17, 2014 1:48 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Данни изпращам от RealTerm.Наистина е баламски направено приемането,но аз сега се уча и затова питам!
|
| Нед Авг 17, 2014 2:48 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
това за да работи трябва да изпращаш само символи без терминиране в ASCI формат, т.е. без /CR /LF
|
| Нед Авг 17, 2014 3:15 pm |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: LED isn`t Blinking!
Май има и друг проблем - "InterruptHandlerLow()" ще изчисти RCIF, а DataRdyUSART() проверява точно него и никога няма дa излезе от while(!DataRdyUSART());.
|
| Нед Авг 17, 2014 3:52 pm |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: LED isn`t Blinking!
Още нещо - RCREG е двойно буфериран.
п.п Ако не съм сбъркал сметките Delay10KTCYx(25) ще ти даде 0,02 секунди.
Последна промяна Stoimen на Нед Авг 17, 2014 4:40 pm, променена общо 1 път
|
| Нед Авг 17, 2014 3:56 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
Абе както казах аз го гледах по отгоре, но като цяло ми се видя дървено организирано както прекъсването така и приемането, това ти ли си го писал или е взет пример от някъде ... ако е пример не е много полезен за начинаещи.
|
| Нед Авг 17, 2014 4:03 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Ако използувам Ехо и връщам получените данни обратно в TXREG ,кодът работи идеално с терминала.Когато обаче се опитам да изпратя получените данни към PORTB и това да се индикира чрез мигане на LED,не става! Явно тука не мога да направя нещата както трябва. Относно Delay10KTCYx(25) сте прав,коригирах я.
|
| Нед Авг 17, 2014 5:35 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
Значе сега ти гледам майн-а само, преимайки че другото работи : Първото което ми прави впечатление е че имаш if(ReadUSART()=='1') // If the received data is equal to the 'A' В коментара си написал ако е А но това работи ако си изпрати 1, и говорим за ASCI 1, или това е 0x31 , та не знам дали подаваш А или 1. След това имаш while(!DataRdyUSART()); къде го чистиш тоя флаг който проверяваш, очевидно тази функция връща дали ти е превършило четенто, но никъде в майна не го обработваш, т.е. това като се вдигне кое ще го свали ? и след това имаш PORTB == data; // The receive data is send to PORTB
това не е оператор за присвояване а сравнение, следва да бъде PORTB = data; // The receive data is send to PORTB
Да не говорим че отварящите и затварящите скоби след while не са много на място, какво отварят и затварят? Същото и за If имаш го, но отварящи и затварящи не са на място, би следвало да е нещо такова : if(ReadUSART()=='1'){ // If the received data is equal to the 'A' LED1_on(); // LED blinking Delay10KTCYx(25); // Dealay 250K cycles LED1_off();}
|
| Нед Авг 17, 2014 6:04 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: LED isn`t Blinking!
И лед-а свети постоянно  след LED1_off(); има няколко наносекунди докато дойде LED1_on(); Та така де - за да мига трябва да има още един delay след офф ... едит - то имало break - сори не го видях...
|
| Нед Авг 17, 2014 6:20 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
 |  |  |  | ToHu написа: Значе сега ти гледам майн-а само, преимайки че другото работи : Първото което ми прави впечатление е че имаш if(ReadUSART()=='1') // If the received data is equal to the 'A' В коментара си написал ако е А но това работи ако си изпрати 1, и говорим за ASCI 1, или това е 0x31 , та не знам дали подаваш А или 1. След това имаш while(!DataRdyUSART()); къде го чистиш тоя флаг който проверяваш, очевидно тази функция връща дали ти е превършило четенто, но никъде в майна не го обработваш, т.е. това като се вдигне кое ще го свали ? и след това имаш PORTB == data; // The receive data is send to PORTB
това не е оператор за присвояване а сравнение, следва да бъде PORTB = data; // The receive data is send to PORTB
Да не говорим че отварящите и затварящите скоби след while не са много на място, какво отварят и затварят? Същото и за If имаш го, но отварящи и затварящи не са на място, би следвало да е нещо такова : if(ReadUSART()=='1'){ // If the received data is equal to the 'A' LED1_on(); // LED blinking Delay10KTCYx(25); // Dealay 250K cycles LED1_off();} |  |  |  |  |
Уточнявам забележките: 1.Подавам А 2.PORTB = = data; //това е моя техническа грешка,коригирана е. 3.Относно скобите сте абсолютно прав за което благодаря. 4.За RCIF отново сте прав,но не знам как да го изчистя! Ще съм благодарен за малко помощ!
|
| Нед Авг 17, 2014 6:54 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
Ами ... я кажи това на какво го пишеш, тия функции не ги виждам декларирани та явно са от компилатора, ама не ще да е CCS, поне аз не помня да изглеждат така. Та от там ще зависи. Принципно най-добре бибило да си направиш твой флаг за приет байт, а да не говорим че е и добре да имаш ФИФО в което да мушкаш каквото дойде пък после да го обработваш, това за експериментите ти не е от занчение но в релания свят може да се окаже доста полезно. След това, ти подаваш А но проверката ти е за 1, т.е. няма как да стане, А = 0х41 а 1 = 0х31 ... а да не забравяме че А и а не са един код едното е 0х41 а другото 0х61 .... и последно което писах и по горе, така както е написано не следва да имаш терминатори от сорта /r /n
|
| Нед Авг 17, 2014 7:02 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: LED isn`t Blinking!
RCIF се чисти автоматично при прочитане на RCREG. Ако във фифо буфера има други байтове, се изчиства при прочитане на последния. Това ще рече че ако се получат два байта един след друг преди да си изчел първия, ще има две прекъсвания едно след друго, тъй като RCIF ще остане сетнат след първото четене и при излизане ще влезе веднага пак в прекъсване.
|
| Нед Авг 17, 2014 7:42 pm |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: LED isn`t Blinking!
Пробвай с тази main. Това не изчиства проблема с двойно буферирания RCREG, но би трябвало да работи ако не въвеждаш символите много бързо.
|
| Нед Авг 17, 2014 7:56 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: LED isn`t Blinking!
Е то дори и на 115kb има достатъчно време да се обработи един символ, преди да е пристигнал следващия.
|
| Нед Авг 17, 2014 8:16 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|