Умный дом

Основной файл

Unsigned char input; регистра.

Unsigned char M0DJSIM1; unsigned char M0D_SIM2; unsigned char REL_SIM;

Tinclude <picl6f62xa. h> #include <stdio. h> #include "reley_c. h"

// Для считывания приемного

// Первый символ адреса модуля. // Второй символ адреса модуля. // Символ реле, unsigned char command_reciev [6]; // Массив для полученной команды.

Int MOD_ADDR; // Заданный адрес модуля, как число,

Int sim_end_num =0; // Полный символьный номер

Модуля.

Int MOD_NUM; // Полученный адрес модуля, как число,

Int REL_NUM; // Номер реле.

Unsigned char RELSTAT =0; // Статус реле (позиционно): 1 - вкл, 0 - выкл. int і;

// Получение байта.

Unsigned char getch() {

While(!RCIF) // Устанавливается, когда регистр не пуст.

Continue; return RCREG;

}

// Вывод одного байта.

Void putch(unsigned char byte) {

While(!TXIF) // Устанавливается, когда регистр пуст.

Continue; TXREG = byte;

}

// Преобразуем символьный адрес в число.

Int sim_num_adr() {

Sim_end_num = 0;

M0D_SIM1 = command__reciev [1]; // Первый символ номера. MOD_SIM2 = command_reciev [2]; // Второй символ номера. M0D_SIM1 = MODJ3IM1 - 0x30; //В виде числа. MOD_SIM2 = MODJ3IM2 - 0x30; sim_end_num = MOD_SIMl*OxOA + MOD_SIM2 ; return sim_end_num;

}

// Получение и выполнение команды.

Int cmd() {

REL_SIM = command_reciev [4] ; REL_NUM = REL_SIM - 0x30; switch (command_reciev [5])

{

Case "N": rel_on(REL_NUM) ; break;

Case "F": rel_off (REL_NUM) ; break;

Case "S": rel_stat(REL_NUM); break;

}

// Выполнение команды включения заданного реле.

Int rel_on(int num) {

Bitset (RELSTAT, REL_NUM); PORTA = RELSTAT;

EEADR =0x0; // Запишем состояние реле в EEPROM.

EEDATA = - RELSTAT;

WREN = 1;

GIE = 0;

EECON2 = 0x55;

EEC0N2 = ОхАА; WR =1; while (WR); GIE = 1; WREN = 0;

}

//Выполнение команды выключения заданного реле.

Int rel_off(int num) {

Bitclr (RELSTAT, REL_NUM); PORTA = RELSTAT;

EEADR =0x0; // Запишем состояние реле в EEPROM.

EEDATA = - RELSTAT;

WREN = 1;

GIE = 0;

EECON2 = 0x55;

EECON2 = OxAA;

WR =1;

While (WR);

GIE = 1;

WREN = 0;

}

// Выполнение команды передачи состояния заданного реле.

Int rel_stat(int num) {

Command_reciev[0] = "R" ; command_reciev[l] = MOD_SIMl+0x30; command_rec і ev[2] = MOD_SIM2+0x30; command_reciev[3] = и#и; command_reciev[4] = REL_SIM;

If ((RELSTAT»REL_NUM) &0x01) command_reciev[5] = "N"; if (! ((REL$TAT»REL_NUM) &0x01)) command_reciev[5] = "F" CREN =0; // Запрещаем прием.

RB0 = 1; //Переключим драйвер RS485 на передачу.

TXEN = 1; // Разрешаем передачу.

For (i=0; i<6; ++i) putch(command_reciev[i]);

For (i=0;i<1000;i++); // Задержка для вывода

For (i=0; i<6; ++i) commandereciev [i] = " ";

RB0 = 0; // Выключаем драйвер RS485 на передачу.

TXEN = 0; // Запрещаем передачу.

CREN =1; // Разрешаем прием.

}

Int init_comms() // Инициализация модуля.

{

PORTA

=

0x0; //

Настройка портов А и В.

CMCON

=

0x7;

TRISA

=

0x0;

TRISB

=

OxFE;

RCSTA

=

OblOOlOOOO;

// Настройка приемника.

TXSTA

=

ObOOOOOllO;

// Настройка передатчика.

SPBRG

=

0x68;

// Настройка режима приема-передачи

RBO =

0

; // Выключаем драйвер RS485 на передачу.

// Прочитаем состояние реле из EEPR0M.

EEADR = 0x0; RD = 1;

RELSTAT = - EEDATA;

PORTA = RELSTAT; }

Void main (void) {

Init_comms (); // Инициализация модуля,

For (i=0; i<6; ++i) command__reciev [і] = " "; command_reciev [0] = "R";

//Прочитаем и преобразуем номер модуля. MOD_ADDR = PORTB; // Номер модуля в старших битах. MOD_ADDR=MOD_ADDR»4; // Сдвинем на четыре бита. // Начинаем работать.

Start: CREN =1;

Input = getch();

Switch (input) {

Case "R": // Если обращение к релейному модулю.

For (i=l; i<6; ++i) // Запишем команду в массив. {

Input = getch();

Command_reciev [і] = input; }

MOD__NUM = sim_num_adr(); // Чтение из сети.

If (M0D_NUM!= MOD_ADDR) break; // Если не наш адрес, else

If (command_reciev [3] = "$") cmd(); // Если команда.

Default: goto start;

}

Goto start;

}

Умный дом

Вторая версия основной программы на языке С++

/****************^ * TOC o "1-3" h z Copyright (С) 2006 by Vladimir Gololobov * * vgololobov@yandex. ru * * * * This program is free software; you can redistribute it …

Циклы

Циклы выполняют выражения или блоки выражений до тех пор, пока выражение условия не становится истинным. Наша программа требует двух циклов (один вложен в дру­гой). Пока пользователь желает угадывать последовательно­сти: { …

Две полезные схемы

Первая схема относится к настенному выключателю, работа­ющему по протоколу XI0. Что полезного можно почерпнуть из этой схемы? Например, организацию сканирования сети и управления триаком. Схему я привожу, как она сохранилась …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия
+38 050 512 11 94 — гл. инженер-менеджер (продажи всего оборудования)

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Оперативная связь

Укажите свой телефон или адрес эл. почты — наш менеджер перезвонит Вам в удобное для Вас время.