Форум РадиоКот https://radiokot.ru/forum/ |
|
Rs232 и Atmega16 на Си https://radiokot.ru/forum/viewtopic.php?f=24&t=152193 |
Страница 1 из 1 |
Автор: | DJZEM [ Ср янв 31, 2018 17:29:59 ] |
Заголовок сообщения: | Rs232 и Atmega16 на Си |
Мужики!! Я в этом деле не силен, и по этому прошу помощи. Я не пойму как передать слово и сравнить его. Умею передавать, получать и сравнивать только одну циферку или буквочку. А как передавать и получать целые слова? Как их сравнивать?? Вот код на Си СпойлерКод: #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 [ Чт фев 01, 2018 16:13:35 ] |
Заголовок сообщения: | Re: Rs232 и Atmega16 на Си |
Допустим есть слово Код: const char *const keyWord = {"Hello!"}; которое нужно найти в буфере приема Код: char buffer[] = {"Hello!"}; Код: if (!strncmp(buffer, keyWord, strlen(keyWord))) { // Совпадение } или без библиотеки поэлементно в цикле сравнить два массива символов. |
Автор: | DJZEM [ Пт фев 02, 2018 01:12:07 ] |
Заголовок сообщения: | Re: Rs232 и Atmega16 на Си |
А если в принятом буфере, кроме нужного слова, еще какой то мусор?? Типа там, начало, перенос и т д, как отсеять?? |
Автор: | Myp3ik [ Пт фев 02, 2018 04:06:58 ] |
Заголовок сообщения: | Re: Rs232 и Atmega16 на Си |
http://all-ht.ru/inf/prog/c/func/strstr.html |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |