Rs232 и Atmega16 на Си

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Аватара пользователя
DJZEM
Потрогал лапой паяльник
Сообщения: 342
Зарегистрирован: Чт ноя 21, 2013 14:05:26
Откуда: Україна
Контактная информация:

Rs232 и Atmega16 на Си

Сообщение DJZEM »

Мужики!!
Я в этом деле не силен, и по этому прошу помощи.
Я не пойму как передать слово и сравнить его.
Умею передавать, получать и сравнивать только одну циферку или буквочку.
А как передавать и получать целые слова? Как их сравнивать??


Вот код на Си
Спойлер

Код: Выделить всё

#include <avr/io.h>
#include <util/delay.h>

//*** Инициализация UART ***//
void uart_init(void)
{
	//скорость обмена данными
	UBRRH = 0;  //старший байт
	UBRRL = 103; //младший байт
	//8 бит данных, 1 стоп бит, без контроля четности
	UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
	//разрешить прием и передачу данных
	UCSRB = ( 1 << TXEN ) | ( 1 <<RXEN );
}

//*** Прием данных по UART ***//
unsigned char uart_receive(void)
{
	while ( ! ( UCSRA & ( 1 << RXC )));
	return UDR;
}

//*** Передача данных по UART ***//
void uart_transmit(unsigned char data)
{
	while ( ! ( UCSRA & ( 1 << UDRE )));
	UDR = data;
}

//*** Главная программа ***//
int main(void)
{
	DDRD = 0x00;    //установим все порты DDRD как входы
	PORTD = 0x00;   //установим логический 0 на все порты DDRD

	DDRC = (1 << 5) | (1 << 4); //установим порты PC5 и PC4 регистра DDRC на выход
	PORTC &= ~(1 << 5) | ~(1 << 4); //установим сигнал низкого уровня (логическай 0) на выводы PC5 и PC4 регистра DDRC

	char data;
	
	uart_init();
	
	while(1)
	{
		data=uart_receive();
		
		if(data=='A')
		{
			PORTC |= (1 << 5);    //устанавливаем логическую 1 на порт PC5 регистра DDRC
		}
		if(data=='B')
		{
			PORTC &= ~(1 << 5); //устанавливаем логический 0 на порту PC5 регистра DDRC
		}

		if(data=='1')
		{
			PORTC |= (1 << 4);    //устанавливаем логическую 1 на порт PC4 регистра DDRC
		}
		if(data=='0')
		{
			PORTC &= ~(1 << 4); //устанавливаем логический 0 на порту PC4 регистра DDRC
		}
		
		uart_transmit(data);

	};
}
Спасибо
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Rs232 и Atmega16 на Си

Сообщение Myp3ik »

Допустим есть слово

Код: Выделить всё

const char *const keyWord = {"Hello!"};
которое нужно найти в буфере приема

Код: Выделить всё

char buffer[] = {"Hello!"};

Код: Выделить всё

if (!strncmp(buffer, keyWord, strlen(keyWord)))
{
	// Совпадение	
}
или без библиотеки поэлементно в цикле сравнить два массива символов.
Иван Сусанин - первый полупроводник :solder:
Реклама
Аватара пользователя
DJZEM
Потрогал лапой паяльник
Сообщения: 342
Зарегистрирован: Чт ноя 21, 2013 14:05:26
Откуда: Україна
Контактная информация:

Re: Rs232 и Atmega16 на Си

Сообщение DJZEM »

А если в принятом буфере, кроме нужного слова, еще какой то мусор?? Типа там, начало, перенос и т д, как отсеять??
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Rs232 и Atmega16 на Си

Сообщение Myp3ik »

Иван Сусанин - первый полупроводник :solder:
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Интеграция с ПК»