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

Views: 2073


При написании первой программы всегда начинает вопрос с чего начать. Пропустим весь процесс установки среды программирования так ка считаем, что это пройденный этап. Программировать будем учиться на языке С 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 1100 downloads

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


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

  • DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверDIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
    Views: 1012 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Views: 1951 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Views: 1943 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • Гаджеты для домашней автоматики – Емкостной сенсорГаджеты для домашней автоматики – Емкостной сенсор
    Views: 1609 Управление светодиодным освещением – Сенсор емкостной. Данный гаджет предназначен для управления освещением где необходимо включением освещение сенсорным прикосновением. Датчик позволяет управлять светодиодной нагрузкой в виде модулей или светодиодных лент …
  • Altium Designer my setup system and project structureAltium Designer my setup system and project structure
    Views: 747 Используйте только последнее обновление!!! Updates https://catcatcat.d-lan.dp.ua/altium-designer-my-libraries-project-templates-system-settings-by-catcatcat-v23-09/        Тут хочу поделиться как я настраиваю Altium Designer и как я использую файлы DXPPreferences.DXPPrf для быстрой конфигурации и получения …
  • Часы-кухонный таймерЧасы-кухонный таймер
    Views: 4064 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …
  • MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)
    Views: 493 RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована. Основные особенности модуля RTCC: • Работает в режиме глубокого сна. • Возможность выбора источника …
  • УКВ – радиоприем, часть 1УКВ – радиоприем, часть 1
    Views: 9606 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
  • USB K-L-line адаптерUSB K-L-line адаптер
    Views: 5989 USB K-L-line адаптер предназначен для связи персонального компьютера с диагностической шиной автомобиля – интерфейс ISO-9141. Этот проект предназначен для сборки недорого устройства с использованием специально для этой цели …
  • JDY-62A Audio bluetooth moduleJDY-62A Audio bluetooth module
    Views: 1693 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …


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