Микроконтроллеры | Замерить сигналл Hi-Tech PICC Lite |
|
---|---|---|
Это по книге михаила предко наверно. |
|
|
Ааа. Я её не читал. ИМХО, та строка только память почём зря занимает, если оптимизатор её не выкинул. |
|
|
OPTION = OPTION = 0b11010000; /* использовать предделитель По ошибке два раза OPTION скопировал,но компилируется без ошибок(и так и так работает нормально) |
|
|
Это "ин-лайн Си" в IAR-е зовется. |
|
|
Почему то ШИМ подергивается-подскажите пожалуйста,где ошибка? |
|
|
Посмотрел код по диагонали, ошибка у вас в том, что переменная А у вас имеет размер 8 бит (char), а переменная RTC - 16 бит (integer), ну и когда вы делаете присвоение А=RTC, вы теряете старший байт. И вычисление Dlitel=(A*13-80), если А>13, тоже неправильное, поскольку выходит за пределы байта. Ну и по мелочам. В приведённом ниже фрагменте первая и возможно пятая строки не нужны вообще, 4-я тотчас переписывает 3-ю, зачем тогда нужна 3-я?
|
|
|
Neman2000: Думаю проблема в строке исходника выделенной красным цветом? if(RB5>0)//Если на 11ноге не ноль(есть сигнал!) По логике пройдёт, а для однозначности понимания можно просто записать: Neman2000: Почему то ШИМ подергивается-подскажите пожалуйста,где ошибка? *** // Вход управляющего сигнала-6я ногаИли 11-я? if(RTC>500)//Если более 1000 переполнений TMR0А в этой строке, почему-то в комментарии цифра со сравниваемым значением в коде расходится? if (Ciklov < = Dlitel)/* Если значение счетчикаИ здесь тоже в комментарии расхождение. А надо " < " или "< ="? |
|
|
Digital: if(RTC>500)//Если более 1000 переполнений TMR0 Digital: if (Ciklov < = Dlitel)/* Если значение счетчика Всеже непойму почему так дергается. |
|
|
Neman2000: Да в принципе можно и приравнять к единице |
|
|
Neman2000: перекатка нестандартная Neman2000: Всеже непойму почему так дергается. Вот же вам советовали: GM: когда вы делаете присвоение А=RTC, вы теряете старший байт. А в прикреплённом исходнике так и осталось: unsigned char A ; Ну сами посмотрите в протеусе, значения RTC выходят за тип char (см. скрин). И если A=RTC; ,то от типа int останется один char. Если по логике программы это не требуется, так может в этом и проблема? В протеусе, если шагать по программе с самого начала, на строке Dlitel=(A*13-80); мы имеем А равное нулю. Математически, после выполнения этой строки, переменная Dlitel будет иметь значение "-80". Но такое значение соответствует типу signed. Т.е. переменную А получается вообще надо назначать типом signed int. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |