Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Приложение

Введение | Изучение структуры организации, виды ее деятельности | Анализ предметной области и постановка задачи |


Читайте также:
  1. Глава 24. Приложение к газете
  2. Как святые слышат наши молитвы. Приложение о молитве
  3. Маленькое приложение.
  4. Методы экспериментального определения пирофорности веществ и склонность веществ и материалов к самовозгоранию - в соответствии с приложением 5 и ГОСТ 12.1.044-89.
  5. Не просто приложение
  6. По итогам оценки заявок участников Конкурса каждый член жюри заполняет таблицу оценки конкурсных заявок (приложение 3).
  7. Приложение

 

Client

 

#define F_CPU 12000000L

#include <avr/io.h>

#include <util/delay.h>

#include <stdlib.h>

#include <avr/interrupt.h>

#include <string.h>

#include <stdio.h>

 

#define LED_PORT PORTB

#define LED_DIR DDRB

#define LED_PIN 0

//подключение заголовочных файлов 1Wire библиотеки

#include "OWIPolled.h"

#include "OWIHighLevelFunctions.h"

#include "OWIBitFunctions.h"

#include "common_files\OWIcrc.h"

//номер вывода, к которому подключен датчик (порт определяется в OWIPolled.h, здесь номер вывода)

#define BUS OWI_PIN_5

 

 

//команды датчика DS18B20

#define DS18B20_WRITE_SCRATCHPAD 0x4e // write scratchpad (0x4E) - записывать в ОЗУ датчика DS18B20 три байта – Th, Tl и конфигурационный регистр

#define DS18B20_ALARM_SEARCH 0xec // alarm search (0xEC) - отвечать на нее будут подчиненные устройства с установленным флагом аварии

#define DS18B20_SKIP_ROM 0xcc // skip rom (0xCC) - для обращения ко всем 1-Wire устройствам, подключенным к шине

#define DS18B20_CONVERT_T 0x44 // convert t (0x44) - запускает процесс температурного преобразования датчика

#define DS18B20_READ_SCRATCHPAD 0xbe // read scratchpad (0xBE) - позволяет микроконтроллеру считывать содержимое ОЗУ датчика

unsigned char scratchpad[9]; // 9 байт ОЗУ датчика, буфер для хранения ОЗУ датчика

//отправка символа по usart`у

void USART_SendChar(unsigned char sym)

{

while(!(UCSRA & (1<<UDRE)));

UDR = sym;

}

//Отправляет строку символов

void USART_SendStr(char * s)

{

while(*(s)!='\0') USART_SendChar(*(s++));

}

// Функция приема данных по USART без прерывания

int USART_receive(void)

{

while(!(UCSRA & (1 << RXC))); // Ожидаем, когда данные будут получены

return UDR; // Читаем данные из буфера и возвращаем их при выходе из подпрограммы

}

// прием строки

#define SIZE_BUF 48

//буфер

volatile unsigned char cycleBuf[SIZE_BUF];

volatile unsigned char tail = 0; //"указатель" хвоста буфера

//"очищает" буфер полностью

void FlushBuf(void)

{

tail = 0;

cycleBuf[0]=0;

}

volatile unsigned char usartRxBuf = 0;

ISR (USART_RXC_vect) // Обработчик прерывания по завершению приема (соизволило заработать, кажется фаза в луну зашла - нужно продолжать)

{

usartRxBuf = UDR;

cycleBuf[tail] = usartRxBuf;

tail++;

}

unsigned char i=0;

int main (void)

{

 

unsigned char i=0;

unsigned char n=0;

unsigned char temperature;

unsigned char digit;

unsigned char decimal;

OWI_Init(BUS);

 

//статусный светодиод

 

LED_DIR |= (1<<LED_PIN);

LED_PORT &= ~(1<<LED_PIN);

 

//====================================================================

// инициализация USART

// 5 регистров – UBRRH, UBRRL, UCSRA, UCSRB, UCSRC

 

UBRRH = 0; // 0, потму что там ничего не затрагиваем

UBRRL = 12; // скорость обмена

//разр. прерыв при приеме, разр приема, разр передачи.

UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);

//обращаемся к регистру UCSRS, размер слова – 8 бит. Асинхронный режим

UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

 

// UCSRA содержит флаги устанавливаемые самим модулем USART

//=====================================================================

 

 

sei (); // глобально разрешили прерывания

 

LED_PORT |= (1<<LED_PIN);

_delay_ms(500);

FlushBuf();

LED_PORT &= ~(1<<LED_PIN);

_delay_ms(500);

USART_SendStr("AT+CWQAP");

USART_SendChar(13);

_delay_ms(500);

USART_SendStr("AT+CWMODE=1");

USART_SendChar(13);

_delay_ms(300);

USART_SendStr("AT+RST");

USART_SendChar(13);*/

USART_SendStr("AT+CWQAP\r\n");

_delay_ms(500);

USART_SendStr("AT+CIPMODE=0\r\n");

_delay_ms(500);

 

LED_PORT &= ~(1<<LED_PIN); _delay_ms(500);}

USART_SendStr("AT+CIPMUX=1\r\n");

_delay_ms(500);

USART_SendStr("AT+CWJAP=\"TEST\",\"11223344\"\r\n");

_delay_ms(6000);

USART_SendStr("AT+CIPSTART=0,\"TCP\",\"192.168.4.1\",8888\r\n");

_delay_ms(2000);

while (1)

{

 

//подаем сигнал сброса

//команду для адресации всех устройств на шине

//подаем команду - запук преобразования

OWI_DetectPresence(BUS);

OWI_SkipRom(BUS);

OWI_SendByte(DS18B20_CONVERT_T,BUS);

//ждем, когда датчик завершит преобразование

while (!OWI_ReadBit(BUS));

//подаем сигнал сброса

//команду для адресации всех устройств на шине

//команду - чтение внутренней памяти

//затем считываем внутреннюю память датчика в массив

OWI_DetectPresence(BUS);

OWI_SkipRom(BUS);

OWI_SendByte(DS18B20_READ_SCRATCHPAD, BUS);

scratchpad[0] = OWI_ReceiveByte(BUS);

scratchpad[1] = OWI_ReceiveByte(BUS);

/*выводим значение целое знач. температуры*/

digit = (scratchpad[0]>>4)|((scratchpad[1]&7)<<4);

//дробная

//decimal= scratchpad[0] & 0x8;

decimal=(scratchpad[0]&15);

decimal = (decimal<<1) + (decimal<<3);

decimal = (decimal>>4);

 

// отправить по WiFi текущую температуру

if (digit>99){

USART_SendStr("AT+CIPSEND=0,3\r\n");

_delay_ms(200);

char buf[3];

utoa(digit, buf, 10);

USART_SendStr(buf);

}else{

USART_SendStr("AT+CIPSEND=0,7\r\n");

_delay_ms(200);

char buf[4];

sprintf(buf, "%+d.%01u C", digit, decimal);

}

FlushBuf();

_delay_ms(800);

USART_SendStr("AT+CIPSEND=0,2\r\n");

_delay_ms(10);

char buf[2];

utoa(n, buf, 10);

USART_SendStr(buf);

for (i=0; i<50; i++) {

if (cycleBuf[11]=='a') { LED_PORT |= (1<<LED_PIN); FlushBuf();}

if (cycleBuf[11]=='b') { LED_PORT &=~(1<<LED_PIN); FlushBuf();}

FlushBuf();

_delay_ms(50);

}} // конец while (1) } // конец main

 


Дата добавления: 2015-09-05; просмотров: 60 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Разработка и описание программного продукта| Слова Ю. Энтина, музыка Е. Крылатова к/ф Гостья из будущего

mybiblioteka.su - 2015-2024 год. (0.021 сек.)