Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 51 64

2 Left RadioСмотрю как работает прога "моя"... Не работает... По крайней мере, как я задумывал. Я так понял, что вы пишете чисто в PIC C Compiler. И никакой отладки, ну пошаговой, а только протеус. Если так, то не гут. По крайней мере я так не могу. Наблюдаю за работой проги в MPLAB IDE v7.52. Пытался вписать весь этот код в обработчик прерывания по таймеру 0...

Left Radio: Vladikas: следил чтоб по какому бы пути программа не пошла время обработки счётчиков было бы одинаковым, вплоть до одного машинного такта.
Не совсем пойму про обработку счетчиков, можно поподробней?

Ну тут это не очень нужно, так-как ШИМ аппаратный. В том же MPLAB есть "часы" - "watch", кототые позволяют следить за временем выполнения функций с точностью до такта.

Вопрос по сям.
Имеем обработчик по прерыванию таймер_0. В него нельзя функции вписать чтоль? Допустим, та же самая наша прога обработки кнопок с ускорением. В ней есть мэйне сама функция Button(), которая расписана отдельно. Беру тело функции и вставляю в обработчик. В этой функции есть ссылки на две функции cRelaks() и keystrokeCounter(). На них обработчик начинает ругаться. Приходится писать неразрывную функцию без ссылок. Так ли это?

 

Да, пошагово пока не отлаживаю, не выходит скрестить МПЛАБ и СИ.
А что именно не так работает?
В обработчик по прерыванию я бы функцию не вписывал, а сделал что то типа:
#INT_TIMER0
Void Isr_timer(void)
{
flagOverflow=1;
}

Void main()
{ ..........
While(true)
{
If(flagOverflow==1){ flagOverflow=0; Button(); }

}

Либо обработка каждое сотое прерывание таймера (заменить предыдущий курсив):
If(flagOverflow==1 ){ flagOverflow=0; count++; }
If(count==100){ Button(); }

 

Left Radio: не выходит скрестить МПЛАБ и СИ
А в чём проблема? У меня работает, правда как делал не помню, но если надо пороюсь в дистрибах...
Спасибо за ответы Смотрю на готовый код, всё так красиво и понятно, а как сегодня сел писать, так как курица не знаю чем. И даже Шпак не помогает.
-----------
Нескромно как очень начинающий начинающеего прошу о более быстрой связи, аська ну или типа того...

 

Vladikas: И даже Шпак не помогает.

А можно ссылку? Аська: 488383704
Я начал с этого: Андрей Богатырев. Руководство полного идиота
по программированию (на языке Си)
.
Сейчас читаю это: Керниган, Ричи. Язык C.

 

Ссылки на Шпака на первой странице этой ветки.

 

Исправленный вариант

175101.bls

 

Обнаружилось странное поведение компилятора CCS

Код Си

if(ProhodCounter++ ==x)//счётчик проходов +1 и не равен ли Х?
{...;}

Код Асм

MOVF 0x34, W счётчик в аккум
INCF 0x34, F +1 счётчика
SUBWF 0x33, W Х минус счётчик (аккум)
BTFSS 0x3, 0x2 проверка флага нулевого результата
GOTO 0x7f если есть, то поехали

Это как понимать? Сначала счётчик +1, а потом сравниваем Х с фантомом? Это нормально?

 

А как должно быть?

 

Сначала ++, а потом == с тем, что получилось после ++.
Ну это я так думал, типа логически.

 

уже незнаю куда закинуть. Люди добрые подскажите цеколевку такого дисплея (MC1602LSYLU) он же PC-1602L2 на нем написано, где там D0-D7…, RS, и т.д. Снятый из дохлого модема. Там 24 ноги (разъем там). Хотел его использовать в радиолюбительских целях.