Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
TAMEPJlAH
1 / 1 / 0
Регистрация: 02.05.2010
Сообщений: 74
#1

RS-232 (COM - порт) и С++ - C++

01.06.2012, 10:07. Просмотров 1504. Ответов 1
Метки нет (Все метки)

Подскажите, пожалуйста, как через прерывания написать программу для управления через COM-порт. Например, по линии Tx с компьютера передаем данные (как они закодированы? например передаем единицу - отключение устройства, 0 - включение).
Есть программа, в нее нужно дописать связь с ПК по протоколу RS-232.
Скину на всякий случай программу. Вот задание: блок управления источником бесперебойного питания, который реализует следующую функциональность: отслеживание параметров сети питания и зарядка батареи, и изменение текущего режима питания (бытовая сеть, батарея), световая и звуковая индикация текущего режима работы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char time,t;
 
ISR (SIG_OUTPUT_COMPARE1A){
    if (time==1) {
        t++;
        if (t%2==0) {PORTD  &=~_BV(PD1) //светодиод выкл
                &~_BV(PD2);}            //зуммер выкл
            else {PORTD |=_BV(PD1)      //светодиод вкл
                        |_BV(PD2);} //зуммер вкл
    }
};
int main (void) 
{
    DDRD = 0xFF;
    PORTD |=_BV(2);
    TCCR1B |=_BV(WGM12);
    TCCR1B |=_BV(CS10) |_BV(CS11) &~_BV(CS12);
    OCR1A=15624;
    TIMSK1 |=_BV(OCIE1A);
    sei();
 
ADCSRA |=_BV(ADEN) //Включение АЦП
    |_BV(ADPS1)|_BV(ADPS0); // предделитель преобразователя на 8
ADMUX &=~_BV(REFS1) &~_BV(REFS0) // внешний ИОН
&~_BV(MUX0)&~_BV(MUX1)&~_BV(MUX2)&~_BV(MUX3); // вход PC0
 
 
while(1)
    { 
    unsigned int u1,u2;
    ADCSRA |=_BV(ADSC); //Начинаем преобразование
    while ((ADCSRA&(1 << ADIF))== 0); //Ждем окончания преобразования
     u1 = ADC;  // Считываем  ADC
         
if ((u1 > 778) && (u1 < 983))   //3.8V<u<4.8V
    {PORTD |=_BV(PD1)       //светодиод вкл
           &~_BV(PD0);      //реле выкл
           ADMUX &=~_BV(MUX0);
           time=0;}
    else {                          //u<3.8V   u>4.8V
        PORTD |=_BV(PD0)|_BV(PD3);  //вкл реле №1 и №2
        ADMUX |=_BV(MUX0);
        time=1;}
 
    ADCSRA |=_BV(ADSC); //Начинаем преобразование
    while ((ADCSRA&(1 << ADIF))== 0); //Ждем окончания преобразования
     u2 = ADC;  // Считываем  ADC
 
if (u2 > 983)               //u>4.8V от батареи
    {PORTD &=~_BV(PD3);}    //выкл реле №2
    else {PORTD |=_BV(PD3);}    //вкл реле №2
    _delay_ms(30);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 10:07     RS-232 (COM - порт) и С++
Посмотрите здесь:
C++ WinAPI Com Port RS 232
C++ Builder Переход с RS-232 на TCP/IP
C++ COM Блок управления и rs 232
C++ Библиотека С++ для RS-232
Последовательный интерфейс RS 232 Visual C++
C++ COM Передача команд SCPI по RS-232
C++ Обмен данными с ЭБУ через RS-232
C++ Builder Программа для роботы с устройством через RS-232
C++ Game порт. или не Game порт
C++ Бьёт ошибку! 11 D:\Ïðàêòèêà ïo C++\Çàäà÷à 15\main.cpp `nullptr' undeclared (first use this function)
Com-порт C++ Builder
C++ Builder 23 порт

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
26426 / 14728 / 836
Регистрация: 15.09.2009
Сообщений: 63,988
Записей в блоге: 68
01.06.2012, 21:02     RS-232 (COM - порт) и С++ #2
протокола RS-232 не существует.
существует среда передачи - интерфейс RS232,
а какой протокол вы будете задействовать - это ваше дело.
можете свой написать....
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru