МОЖЕТ КОМУ ЕЩЕ ИНТЕРЕСНО БУДЕТ
Среда разработки у нас есть, всем привычный МПЛАБ. С компилятором тоже определились, CCS PICC. Лично я считаю что лучше было бы начать с компилятора от хайтек и книги Предко "Устройства управления роботами". Но раз уж выбрали ЦЦС, значит будем практиковаться в нем. Далее качаем с сайта CCS вязалку компилера с МПЛАБОМ вяжем их. На среде разработки предложенной ЦЦС лучше НЕ заморачиваться, и такой вешью как PIC WIZARD по началу не пользоваться. Нужно научиться создавать проекты с чистого листа.
Итак, создаем в МПЛАБ новый проект, выбираем компилятор CCS C Compiler и нужный нам девайс. Создаем чистый исходник без всяких примеров и пишем следующее:
#include ‹16f628.h›
void main()
{
}
Компилируем. Думаю ошибок не будет=)
main() в Си является главной функцией, без нее программа существовать не может. Главная функция управляет всеми остальными. Что дальше? дальше нам нужно хотябы инициализировать конфигурационный регистр, т.е. сконфигурировать МК так как нам надо. Для этого в ЦЦС Си используется директива #FUSES. Чтобы инициализировать конфигурационный регистр, нужно ВНЕ тела функции Мэин() написать директиву #FUSES и список параметров через запятую. Например:
#FUSES INTRC,NOLVP,NOWDT,PUT,MCLR, NOCPD,NOPROTECT
Теперь наш МК сконфигурирован. INTRC - значит что мы выбрали внутренний тактовый генератор;NOLVP - низковольтовое программирование отключено;NOWDT - вотчдог отключен и т.д. Все возможные параметры директивы #FUSES можно посмотреть в среде разработки ЦЦС. Запустите среду разработки,клацните меню view-›Valid Fuses, затем выбираем модель МК и смотрим. Все доступные параметры перечислены в столбик с комментариями.
Что дальше? давайте помигаем светодиодами. Что для этого нужно? записать единицы в порт, выполнить задержку и затем записать нули в порт. Для записи значения в порт используют выражение OUTPUT_A,(value) где А - имя порта.Чтобы использовать функцию задержки нужно написать директиву #use delay (clock=speed), где speed частота тактирования в герцах. Т.е. чтобы функции delay_ms() delay_us() работали корректно на частоте 4 МГц, нужно написать #use delay (clock=4000000). Что должлно получиться в итоге:
#include ‹16f628.h›
#FUSES INTRC,NOLVP,NOWDT,PUT,MCLR, NOCPD,NOPROTECT
#use delay (clock=4000000)
void main()
{
set_tris_b(0x00); //PORTB на вывод
while (1)// бесконечный цикл
{
output_b(0x00); //светодиоды не горят
delay_ms(1000);// задержка на секунду
output_b(0xff);//горят
delay_ms(1000);
}
}
ПИСАЛ Maksim_86