Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 49. Спряжение PIC16F877 с ПК через COM порт (Часть 1)

Иванов Дмитрий, Апрель 2007
Статья обновлена 26 Мая 2014

Файлы к статье скачать

В этой и следующей статье мы рассмотрим как можно подключить микроконтроллер к компьютеру через COM порт и с помощью программы для ПК обмениваться информацией с МК


Принцип функционирования будет следующим: с помощью программы на ПК отсылаем число в диапозоне 0-255. PIC16F877 принимает это число через COM к которому он подключен и отображает его на светодиодах через свой порт B. Для того чтобы показать как можно передать данные из МК в ПК сделаем следующее. Если в МК поступает какое-то определенное число, например 100, то МК отсылает обратно содержимое его порта D. Т.е. можно будет снаружи МК установить на выводах порта D 0 или 1 и это состояние мы получим в ПК. Я думаю вполне интересная задача. Давайте к ней приступим. В первой части займемся программой для МК и всем железом".

Рассмотрим код для МК (готовый проект можно найти в файлах к этой статье). В начале работы программы идет целая куча настроек регистров, и не мудрено - последовательный порт - это не простая штука. Первым делом мы загружаем в регистр SPBRG число 31. Что значит? Это значит, что мы настраиваем USART МК для работы с кварцем на 20 МГц и при скорости обмена в 9600 бит/сек. Подробнее советую посмотреть не раз упонимавшийся в этом разделе файл описания МК PIC16F877. TXEN=1 - разрешаем передачу данных через последовательный порт. CREN=1 - разрешаем прием данных через последовательный порт. SPEN=1 - включаем модуль USART МК. SYNC=0 - переводим USART в асинхронный режим (информационный обмен идет по двум линиям без использования дополнительных синхронизирующих линий). Далее идет упоминание о неком RCIF. Это спец. бит, который МК устанавливает сам в еденицу, если на вход его последовательного порта пришел символ. Мы его в начале программы сбрасываем программно, чтоб не возникло недоразумений при начале работы. Далее настраиваем порт B на выход, а порт D - на вход и записываем в них в начеле работы программы 0. Потом стартуем бесконечный цикл. Внутри его делаем следующее: если RCIF равен 1 (т.е. на входе USART есть доступная информация). Записываем в порт B байт данных, который после приема его МК помещаемся в регистре RCREG. Далее проверяем, а не зарание ли оговоренное число к нам пришло. Если это так (100) то мы помещаем в регистр TXREG содержимое порта D. TXREG это регистр USART, по поступлении в него данных происходит передача этого байта из МК "наружу". Потом сбрасываем бит RCIF, чтобы быть готовым к приему следующего символа.

#include <pic.h> 
__CONFIG(0x03F72);

void main(void)
{
	SPBRG=31;
	TXEN=1;
	CREN=1;
	SPEN=1;
	SYNC=0;
	RCIF=0;

	TRISB=0;
	PORTB=0;
	TRISD=1;
	PORTD=0;

	while(1==1)
	{
		if(RCIF)
		{			
			PORTB=RCREG;
			if(PORTB==100)
			{
				TXREG=PORTD;
			}
			RCIF=0;
		}		
	}	
}

Теперь займемся "железом". Чтоб подключить МК к COM порту ПК потребуется дополнительная "обвеска" в виде преобразоваетля сигналов протокола RS232 в уровни TTL и обратно. Этот преобразователь выполнен на основе микросхемы MAX232. COM порт ПК соединен с МК нульмодемным кабелем, т.е. у него линии Tx / Rx перекрещенны.

А вот и практическая реализация этой схемы. Обратите внимание на длинный оранжевый провод с правой стороны схемы. Это я второй бит порта D устанавливаю в 1 снаружи (просто +5 В подаю на него). Теперь если прочесть содержимое порта в МК то получим число 00000100 в двоичной системе (если провод убрать то будет 0). Именно такое значение МК отправит в ПК через порт если к нему на вход поступит число 100 из программы на ПК.

В следующей статье мы займемся программой для ПК.



© Иванов Дмитрий
Апрель 2007
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2017