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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поделитесь результатами компилирования следующего кода http://www.cyberforum.ru/cpp/thread592657.html
всем привет! нужно определить, какими компиляторами поддерживаются встроенные функции __is_pod() и __is_enum(). согласно нагугленому мною, они должны поддерживаться GCC начиная с 4.4.3. (это я...
C++ Интегрировать программу с Excel(OpenOffice Calc) Всем доброго времени суток. Необходимо интегрировать программу в какой либо табличный процессор(Excel,OpenOffice Calc). То есть что бы мною написанная программа брала данные из таблицы,выполняла... http://www.cyberforum.ru/cpp/thread591567.html
C++ Синтаксис объявления freind, и компиляторы
Одному так подавай, другому - так подавай. А как же стандарт? Неужели нет единого регламентированного синтаксиса объявления класса-френда, который одинаково понимают все компиляторы с++? ...
C++ Клонирование объекта шаблонного класса
Задача ниже представленного механизма - запоминать функции/методы со всеми аргументами, и производить их отложенный запуск по требованию В ниже представленном коде нужно организовать возможность...
C++ Программа управления проектором Nec моделей VT60, VT70, VT80, VT90, VT700, LT170 по порту Rs232 http://www.cyberforum.ru/cpp/thread582387.html
Помогите написать программку на С++ или ассемблере, которая посылала бы простейшие команды на проектор, уже неделю пытаюсь разобраться, никак толком не выйдет(((. есть мануалка с командами
C++ Переполнение буфера: что тут происходит? Добрый вечер; у меня есть уязвимая программа, которая в буфер длиной 30 копирует строку, переданную как аргумент этой программе. Делал по этой статье. Задача - осуществить вызов командной строки. В... подробнее

Показать сообщение отдельно
TAMEPJlAH
1 / 1 / 0
Регистрация: 02.05.2010
Сообщений: 74

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

01.06.2012, 10:07. Просмотров 1577. Ответов 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);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru