3.2 Проектирование процедур управления периферийными устройствами

Разрабатываемое устройство выполняет следующие операции:

a.  Запрос текущей температуры

b.  Обработка полученной информации.

#define ENABLE_BIT_DEFINITIONS

#include <tiny2313.h>

#include "ctype.h"

#include "stdlib.h"

#define PrescalerTmr0 4 // timer0 counts clk/256

// OscFrq 7342800 osc frequency in Hz

// OscPeriod 1/OscFrq * 1000000000 = 136.1878 osc Period in ns

//Tmr0ClkPeriod = OscPeriod*256 = 34864.07 Timer0 Clk Period in ns

//Tmr0_Interval = 1000000 timer0 overflow interval in ns (1ms=1000000ns)

//Tmr0_Ticks = Tmr0_Interval/Tmr0ClkPeriod = 28,68 timer0 steps for 1 ms delay

#define Tmr0_Reload 256 - 29 // timer0 Reload value for 1 ms

#define TOIE0 0

//==CircularBuffer

#define CircBufLen 32

unsigned char CircBuf[CircBufLen];

unsigned char CircBufHead = 0;

unsigned char CircBufTail = 0;

//==GlobalVariables

unsigned int Var2 = 0;

//==Declare external functions

void DisplayInit(void); // Инициализация индикатора

void SendDataToDisplay(unsigned char Data, unsigned char Mode);

//==Declare internal functionsunsigned char CircBufGet(void);

void CircBufPut (unsigned char data);

//==VirtualTimerVariables

unsigned char Tmr0Flag = 0;

unsigned char TmrCnt[2];

unsigned char TmrPreLoad[2];

unsigned char TmrFlag[2]={0,0};

//0 - timer disabled

//0x01 - timer is started and counting, not reloadable

//0x81 - counting, reloadable

//0x02 - ready, stopped

//0x83 - ready, reloaded, counting

 

3.3 Проектирование процедуры инициализации аппаратуры микроконтроллера

Процедура инициализации производит настройку: портов ввода/вывода, периферийных аппаратных устройств, а так же внешних устройств которые требуют инициализации.

//== Port Initialisation ===============

void Init(void)

{

DDRD = 0xf0; //PD3-PD0 as input

PORTD = 0xff; //Turn ON PullUP for PortB pins

DDRB = 0xff; //Port B pins as output

PORTB = 0x00;

}

//== Virtual Timer Initialisation ==========

void InitTimers(void)

{

#asm("cli");

TCCR0B=PrescalerTmr0;

TIMSK |= (1 << TOIE0); //Enable Timer0 Interrupt

TCNT0=Tmr0_Reload;

TmrPreLoad[0]=250;

TmrCnt[0]=250;

TmrFlag[1]=0x81;

TmrPreLoad[1]=10;

#asm("sei");

}

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

char TimeDelay_us(char x) //near 1us time delay

{

char i,j,k,n;

j=1;

for (i=0;i<x;i++)

{

k=j+1;

n=k-j;

}

return n;

}

//== Circular Buffer Write =====================

void CircBufPut (unsigned char data)

{

unsigned char tmphead;

tmphead = CircBufHead + 1;

if (tmphead>=CircBufLen)

{

tmphead=0;

}

CircBuf[tmphead] = data;

CircBufHead = tmphead;

}

//== Circular Buffer Read ==========

unsigned char CircBufGet(void)

{

unsigned char tmptail;

if (CircBufHead != CircBufTail)

{

tmptail=CircBufTail+1;

if (tmptail>=CircBufLen)

{

tmptail=0;

}

CircBufTail = tmptail;

return CircBuf[tmptail];

}

else

{

return 0;

}

}

3.4 Инициализация цифрового термометра DS1620

char DS1620Init(void)

{

char Presence;

DDRD |= 0x20;

PORTD &= ~0x20;

TimeDelay_us(200);

TimeDelay_us(200);

TimeDelay_us(200);

DDRB &= ~0x10;

PORTB |= 0x10;

TimeDelay_us(20);

Presence = PIND & 0x10;

TimeDelay_us(200);

DDRD |= 0x20;

PORTD |= 0x20;

TimeDelay_us(200);

return Presence;

}

void DS1620WriteBit(char Value)

{

#asm("cli");

DDRD |= 0x20; //output 5

PORTD &= ~0x20;

TimeDelay_us(5);

if(Value!=0) //if data bit = H => output 5

{

PORTD |= 0x20;

}

TimeDelay_us(70);

PORTD |= 0x20; //output 5

TimeDelay_us(5);

#asm("sei");

}

void DS1620WriteByte(char data)

{

char loop, CurrentBit;

for (loop = 0; loop < 8; loop++) // Loop to write each bit in the byte, LS-bit first

{

CurrentBit = data & 0x01;

DS1620WriteBit(CurrentBit);

data >>= 1; // shift the data byte for the next bit

}

}

char DS1620ReadBit(void)

{

char Value;

#asm("cli");

DDRD |= 0x20; //output 5

PORTD &= ~0x20;

TimeDelay_us(5);

DDRD &= ~0x20; //input

PORTD |= 0x20;

TimeDelay_us(10);

Value = PIND & 0x20; //read bit

TimeDelay_us(55);

DDRD |= 0x20; //output 5

PORTD |= 0x20;

TimeDelay_us(5);

#asm("sei");

return Value;

}

//==

char DS1620ReadByte(void)

{

char loop, result=0, CurrentBit;

for (loop = 0; loop < 8; loop++)

{

result >>= 1; // shift the result right to get it ready for the next bit

CurrentBit = DS1620ReadBit();

if (CurrentBit != 0) // if result is one, then set MS bit

{

result |= 0x80;

}

}

return result;

}


Информация о работе «Разработка измерителя температуры жидкости»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 22190
Количество таблиц: 2
Количество изображений: 15

Похожие работы

Скачать
108151
12
8

... выхода Windows 2000 NTFS постепенно становится все более и более популярной. Основные отличия от FAT32 - неограниченный размер файлов (до 12 TBytes) и возможность управлять правами доступа к файлам и каталогам. 2. УСОВЕРШЕНСТВОВАНИЕ СИСТЕМЫ РЕГУЛИРОВКИ ТЕМПЕРАТУРЫ ЖЕСТКОГО ДИСКА Все знают, если у человека повышается температура выше 36.6 градусов, значит он заболел. То же можно сказать и о ...

Скачать
50697
10
15

... среды; ·    расчет разности температур; ·    автоотключение; ·    индикатор разряда батареи; ·    подсветка дисплея; ·    питание 9 В («Крона»). 2 ОБОСНОВАНИЕ СПОСОБА ПОСТРОЕНИЯ ФУНКЦИОНАЛЬНОЙ СХЕМЫ УСТРОЙСТВА   Функциональная схема устройства для измерения температуры в удаленных точках приведена на рис. 2.1. Устройство для измерения температуры в удаленных точках предназначенное для ...

Скачать
20825
2
30

... значительно облегчают процесс изучения контроллеров РІС и написание для них программ. В данном курсовом проекте реализована микропроцессорная система на базе микроконтроллера для терморегулятора аквариума. Проект основывается на микроконтроллере PIC16F84А. 1. Описание объекта и функциональная спецификация Устройство отличается от известных измерителей температуры на DS1820 возможностью ...

Скачать
123264
9
0

... 5 -7м ), что связано с увели­чением площади устоев. 2.3. Определение мощности и выбор электродвигателя для электро- механического привода двустворчатых ворот судоходного шлюза. Электроприводы основных механизмов судоходных гидротехнических сооружений являются ответственными элементами электрооборудования шлюзов. Несоответствие выбранного привода технологическому режиму, неполный счет факторов, ...

0 комментариев


Наверх