Первая программа на PIC24

Visits: 2024


При написании первой программы всегда начинает вопрос с чего начать. Пропустим весь процесс установки среды программирования так ка считаем, что это пройденный этап. Программировать будем учиться на языке С XC16. Я считаю для начинающих, это самый простой вариант для обучения, так как ассемблер для 16 разрядных более сложен для понимания, чем для 8 разрядных PIC-контроллеров.

Первое, что необходимо, это какие необходимы начальные строки, чтобы компилятор понял, что мы от него хотим. Первая строка:

#include <xc.h>             // подключение процессора

А хотим мы от него, что бы он выбрал из настроек среды MPLAB с каким контроллером мы работаем.

Дальше, для уменьшения наших мук, будем использовать библиотеку libpic30. Поэтому включим следующие две строчки, в первой – разъясняем компилятору какая у нас тактовая частота. Вторая, что будем использовать библиотеку.

#define FCY 32000000UL	// определение тактовой частоты для макросов __delay_ms() и __delay_us()
#include <libpic30.h>	// библиотека функций

Определение тактовой частоты полезно настройки для макросов __delay_ms() и __delay_us().

Теперь надо настроить регистр конфигурации контроллера. Каждая строка имеет комментарий описывающий назначение. В двух словах – используем внутренний генератор с умножителем, запустим сторожевой, таймер. Для чего? Чтобы научиться с первых шагов с ним работать!

//---------------------------------------------------------------------------
// конфигурирование контроллера

#pragma config POSCMOD = NONE	// Главный генератор отключен
#pragma config I2C1SEL = PRI	// Использовать SCL1/SDA1 контакты по умолчанию
#pragma config IOL1WAY = OFF	// Впоследствии состояние IOLOCK может быть изменено с помощью разблокировки
#pragma config OSCIOFNC = ON	// OSC2/CLKO/RC15 функциями, как порт ввода / вывода (RC15)
#pragma config FCKSM = CSDCMD	// Переключатель генератора отключен, Fail-Safe монитор генератора отключен
#pragma config FNOSC = FRCPLL	// Тактирование от внутреннего скоростного генератора через умножитель PLL - (FRCPLL) 
#pragma config SOSCSEL = LPSOSC	// Вторичный генератор внутренний низкоскоростной 31 кГц LPRC  генератор (LPSOSC)
#pragma config WUTSEL = FST		// Быстрый пробуждения таймер
#pragma config IESO = OFF		// IESO режим (две скорости запуска) отключены
#pragma config WDTPS = PS1024	// Сторожевой таймер Postscaler
#pragma config FWPSA = PR128	// Сторожевой таймер Prescaler соотношении 1: 128
#pragma config WINDIS = ON		// Оконный режим сторожевого таймера - отключен
#pragma config FWDTEN = ON		// Сторожевой таймер выключен
#pragma config ICS = PGx1		// Эмулятор EMUC1/EMUD1 выводы совместно с PGC1/PGD1
#pragma config COE = OFF		// Сброс в рабочий режим
#pragma config BKBUG = OFF		// Устройство сбрасывает в рабочий режим
#pragma config GWRP = OFF		// Запись в память программы отключены
#pragma config GCP = ON			// Код защита включена для всего пространства памяти программы
#pragma config JTAGEN = OFF		// JTAG порт отключен

Сама первая программа это показать для самого себя, что контроллер начал работать, а для этого мы будем использовать индикацию на наших светодиодах подключенных портам (см. схему).

Программа, практически всегда, должна начинаться с настройки основного генератора, после этого необходимо перейти к настройке портов ввода вывода, а после можно перейти к этого основному циклу, в котором будет “вечно” работать наше устройство.

Настройка тактового генератора:

// настройка тактового генератора
		  OSCCON=0b00000111000000001;
//				 |||||||||||||||+-- OSWEN: выбор генератора определяется в регистре конфигураций
//				 ||||||||||||||+--- SOSCEN: вторичный внутренний генератора 32 кГц отключен
//				 |||||||||||||+---- неиспользуемый
//				 ||||||||||||+----- CF: флаг детектора сбоя тактового генератора
//				 |||||||||||+------ неиспользуемый
//				 ||||||||||+------- LOCK: флаг состояния работы PLL модуля
//				 |||||||||+-------- IOLOCK: блокировка активна
//				 ||||||||+--------- CLKLOCK: часы и PLL выбор не заблокирован 
//				 |||||+++---------- NOSC2:NOSC0: новый генартор 001 - Тактирование от внутреннего скоростного генератора через умножитель PLL - (FRCPLL) 
//				 ||||+------------- неиспользуемый
//				 |+++-------------- COSC2:COSC0: текущий генаратор 001 - Тактирование от внутреннего скоростного генератора через умножитель PLL - (FRCPLL) 
//				 +----------------- неиспользуемый
// настройка регистра делителя тактовой частоты				 
		  CLKDIV=0b0000000000000000;
//				 ||||||||++++++++-- неиспользуемые
//				 |||||+++---------- RCDIV2:RCDIV0:постделитель - 000 = 8 MHz (divide by 1)
//				 ||||+------------- DOZEN: делитель отключен, тактирование 1:1 (первый делитель тактовой частоты)
//				 |+++-------------- DOZE2:DOZE0: - 1:1
//				 +----------------- прерывания не влияют DOZEN
// регистр калибровки внутреннего тактового генератора
		OSCTUN=0;

По регистру OSCCON хотелось бы добавить, пока мы не трогаем флаг блокировки IOLOCK, он будет вести себя как обычный регистр, но если его установить, то в зависимости от условий в регистре состояния, мы или не сможем его в последствии программе изменить или нам придется выполнять последовательность разблокирование для того чтобы, в нем что-то изменить.

Настройка портов:

		AD1PCFG = 0xffff;	// все выводы цифровые		

		TRISA = 	0;		// разряды порта A на выход
		TRISB = 	0;		// разряды порта B на выход

И сам главный цикл программы, в нем мы используем банальную задержку для управления анимации светодиодов.

while(1)
	{

        ClrWdt();		// сброс сторожевого таймера

        _LATA0 = 0;        	// выключить светодиод
        _LATB0 = 1;        	// включить светодиод

        __delay_ms(500); 	// ждать 0,5 секунды

        _LATA0 = 1;        	// включить светодиод
        _LATB0 = 0;        	// выключить светодиод

        __delay_ms(500); 	// ждать 0,5 секунды

	}

 Первая программа – мигание светодиода, для встроенных систем, это как “Привет Мир”. Светодиод мигает – мир радуется!


Демонстрационное видео

 


Проект для загрузки

Значок

Первая программа на PIC24 41.56 KB 1087 downloads

Первая программа на PIC24 ...


Это может быть интересно

  • Проект с использованием MCC часть 06Проект с использованием MCC часть 06
    Visits: 1223 Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Visits: 795 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • Униполярный шаговый двигательУниполярный шаговый двигатель
    Visits: 2134     В приводах различных устройств часто применяются шаговые двигатели, Шаговый двигатели различают двух типов униполярные – когда обмотки коммутируются током текущим только в одну сторону, например при …
  • Просто о структурах и объединениях в СиПросто о структурах и объединениях в Си
    Visits: 2133 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
  • REFERENCE CLOCK OUTPUT MODULEREFERENCE CLOCK OUTPUT MODULE
    Visits: 479 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Visits: 786 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • Датчик контроля протечки воды ch-c0020Датчик контроля протечки воды ch-c0020
    Visits: 1927 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
  • Просто о внешних переменныхПросто о внешних переменных
    Visits: 754  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Visits: 7610 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем …
  • Униполярный шаговый двигатель – часть 2Униполярный шаговый двигатель – часть 2
    Visits: 766 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …


Поделись этим!