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

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

1 4 64

picmaniac: Попробуйте папку создать, как и я, D:\PIC\proba1 и туда все файлы поместить.

Да, все заработало.

picmaniac, нескромный вопросик. А вы когда-нибудь, в принципе C изучали? Дело в том, что я, например никогда не изучал. Продираюсь через эту китайскую грамоту с большим трудом по какой-то шибко умной книжке с ориентацией на РС. В Шпаке все очень коротко и поэтому непонятно. Может посоветует кто-нибудь литературку по С подоступнее для понимания? Хотелось бы начать с необходимого минимума.

 

Zandy: когда-нибудь, в принципе C изучали
Нет. Сегодня впервые прогу на Си создал. Потому и "Hello, world!" написал. Васик изучал, ассемблер, паскаль.
Насчёт китайской грамоты - это верно подмечено. Жутко непривычно поначалу. Но на асме поначалу было примерно такое же ощущение. Моск привыкнет постепенно.
Насчёт литературы - есть такая книга Peter_H_Anderson_Pic_Source_Code_Book, но она на английском. Не хочется с самого начала лезть в дебри. Нам пока самые азы нужны. А корифеи молчат.
Поэтому просьба к знающим - внести изменения в код, чтоб зажигались поочерёдно чётные-нечётные светодиоды, подключенные к PORTB. И подробно нам, начинающим, растолковать переписанный код.

Свой код я могу подробнейше растолковать. Там всё очень просто, только синтаксис языка непривычен. Есть такая потребность?

 

Мне нравится руководство от самих создателей языка: Керниган и Ричи, "Язык Си" (по нему и осваивал). Плюс где-то в Инете попадалась книга "Программирование на языке С", Ю.Ю.Громов, С.И.Татаренко. Для понимания языка - это самое оно. С уважением, Николай.

 

Нам желательно понимание применительно к МК. Вот как, например, настроить порт? считать данные из порта? записать данные в порт? То же самое с регистрами спец. назначения - например, CMCON.
На асме всё прямо делается
movlw 0xF0
movwf TRISB

movf PORTB,W
andlw B'11110000'
movwf MYREG

и так далее.
На бейсике тоже ясно.
TRISB = 0xF0
MYREG = PORTB and %11110000

А как это будет на Си? Конкретно на CCS PICC? Я делал по примеру из книги, но чёткого понимания пока нет.

P.S. Ага, нашёл в хелпе! Теперь более-менее проясняется... Ccsc.chm, раздел "Build-in-Functions", DISCRETE I/O

Рекомендую распечатать стандартный файл заголовка для того МК, с которым собираетесь работать. Например, 16F628.h
И внимательно его изучить. Я там много интересного и полезного увидел.

Если вдруг кто надеется, что с изучением Си отпадёт надобность строить графы и обдумывать алгоритмы - он сильно заблуждается!

 

Заголовочные файлы нужны для удобства. Директива #include <> или #include " " дает команду препроцессору вставить в наш соурс-файл содержимое заголовочного файла. Аналогично INC-файлам для АСМа. Это повышает читабельность программы и экономит время.
В проекте Picmaniaca в заголовочном файле proba1.h содержатся конфигурациционные директивы #FUSES. Если их записать в файл proba1.c то нужда в заголовочном файле отпадет.

 

Я не вообще спрашивал, а о конкретных файлах. И скриншот специально приложил, где они указаны.

Вот, я уже сделал перемигивание чётных-нечётных. http://www.pic16.nm.ru/notes/proba1_2.rar
Рекомендую собратьям по освоению Си:
- распечатать стандартный файл заголовка и держать его поблизости.
- держать открытым хелп Ccsc.chm и при необходимости туда заглядывать.
- и, конечно, изучать главу 3 книги Шпака.
Результат вы видите - я уже полным ходом вникаю!

 

Простите, не понял сразу) Из тех что знаю:
math.h содержит различные математические ф-ции(возведение в степень, вычисление логарифмов, округление числа типа float в меньшую или большую сторону и т.д.)
stdlib.h - реализованы функции преобразования из одного типа данных в другой. Такие как atof(), atoi(), itoa и т.д. Также реализованы ф-ции поиска и сортировки (быстрая сортировка и двоичный поиск)
assert.h - заголовок для функции ASSERT(условие), которая проверяет истинность условия и если оно не истинно выдает ошибку.
limits.h - описан максимальный размер (в десятичном виде) всех типов данных
string.h - содержит функции для работы с текстовыми массивами
stdlibm.h - ни разу не пользовался, там определены функции для работы с памятью(нужно заголовок повнимательней почитать)
s7600.h - (выдрано из заголовка) s7600.h - Driver for the Seiko iReady s7600-A TCP/IP Stack

 

picmaniac: Нам желательно понимание применительно к МК. Вот как, например, настроить порт? считать данные из порта? записать данные в порт? То же самое с регистрами спец. назначения - например, CMCON.

Ну и в си ты можешь на прямую к регистру обратиться...

 

а можно ли использовать тут в си ассемблерные вставки?
Вопрос снят,разобрался..

 

Gregory: Это какой, и где?
ASM Editor
http://www.avtlab.ru/asmedit.htm - фриваре.