|
@@ -1,13 +1,13 @@
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
-// Ìàêðîîïðåäåëåíèÿ.
|
|
|
|
|
|
+// Макроопределени�.
|
|
//
|
|
//
|
|
-// (C) Åâãåíèé Òðèôîíîâ, Äåíèñ Æåëåçíÿêîâ. 2001 - 2007 ã.
|
|
|
|
-// Âåðñèÿ: 2.7.1 îò 18.12.2007
|
|
|
|
|
|
+// (C) Евгений Трифонов, Дени� Железн�ков. 2001 - 2007 г.
|
|
|
|
+// Вер�и�: 2.7.1 от 18.12.2007
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
-// Ïàðàìåòðû ãåíåðàòîðà (÷àñòîòà ãåíåðàòîðà óêàçûâàåòñÿ â Ãö.)
|
|
|
|
|
|
+// Параметры генератора (ча�тота генератора указывает�� в Гц.)
|
|
#ifndef __MCU_Clock
|
|
#ifndef __MCU_Clock
|
|
- #warning Òàêòîâàÿ ÷àñòîòà ïðîöåññîðà (__MCU_Clock) íå óêàçàíà! Èñïîëüçóåòñÿ çíà÷åíèå ïî-óìîë÷àíèþ: 9 216 000 Ãö
|
|
|
|
|
|
+ #warning Тактова� ча�тота проце��ора (__MCU_Clock) не указана! И�пользует�� значение по-умолчанию: 9 216 000 Гц
|
|
#define __MCU_Clock 9216000
|
|
#define __MCU_Clock 9216000
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -24,7 +24,7 @@
|
|
#include <ioavr.h>
|
|
#include <ioavr.h>
|
|
#include <ina90.h>
|
|
#include <ina90.h>
|
|
|
|
|
|
-// Öèêëû
|
|
|
|
|
|
+// Циклы
|
|
#define Hz(Value) ((1 / (float)(Value)) * __MCU_Clock)
|
|
#define Hz(Value) ((1 / (float)(Value)) * __MCU_Clock)
|
|
#define kHz(Value) Hz((Value) * 0x000003E8)
|
|
#define kHz(Value) Hz((Value) * 0x000003E8)
|
|
#define MHz(Value) Hz((Value) * 0x000F4240)
|
|
#define MHz(Value) Hz((Value) * 0x000F4240)
|
|
@@ -36,7 +36,7 @@
|
|
#define _cycle
|
|
#define _cycle
|
|
#define _cycles
|
|
#define _cycles
|
|
|
|
|
|
-// Çàäåðæêà
|
|
|
|
|
|
+// Задержка
|
|
#define Delay(Value) __delay_cycles(Value)
|
|
#define Delay(Value) __delay_cycles(Value)
|
|
#define Delay_ns(Value) Delay((Value)_ns)
|
|
#define Delay_ns(Value) Delay((Value)_ns)
|
|
#define Delay_us(Value) Delay((Value)_us)
|
|
#define Delay_us(Value) Delay((Value)_us)
|
|
@@ -49,25 +49,25 @@
|
|
#define Delay_Cycle(Value) Delay(Value)
|
|
#define Delay_Cycle(Value) Delay(Value)
|
|
#define Delay_Cycles(Value) Delay(Value)
|
|
#define Delay_Cycles(Value) Delay(Value)
|
|
|
|
|
|
-// Òàéìåðû
|
|
|
|
|
|
+// Таймеры
|
|
#define TC16_Compare(Div, Value) (unsigned int)((1 / (float)(Div)) * (Value))
|
|
#define TC16_Compare(Div, Value) (unsigned int)((1 / (float)(Div)) * (Value))
|
|
#define TC16_Overflow(Div, Value) (unsigned int)(0x10000 - TC16_Compare(Div, Value))
|
|
#define TC16_Overflow(Div, Value) (unsigned int)(0x10000 - TC16_Compare(Div, Value))
|
|
#define TC8_Compare(Div, Value) (unsigned char)TC16_Compare(Div, Value)
|
|
#define TC8_Compare(Div, Value) (unsigned char)TC16_Compare(Div, Value)
|
|
#define TC8_Overflow(Div, Value) (unsigned char)(0x00100 - TC8_Compare(Div, Value))
|
|
#define TC8_Overflow(Div, Value) (unsigned char)(0x00100 - TC8_Compare(Div, Value))
|
|
|
|
|
|
-// Áèòîâûå îïåðàöèè
|
|
|
|
|
|
+// Битовые операции
|
|
#define Bit(Idx) (1 << (Idx))
|
|
#define Bit(Idx) (1 << (Idx))
|
|
#define _Bit(Idx) Bit(Idx)
|
|
#define _Bit(Idx) Bit(Idx)
|
|
|
|
|
|
-// Èçìåíåíèå ñîñòîÿíèÿ îáíîãî áèòà â ïåðåìåííîé èëè ðåãèñòðå
|
|
|
|
|
|
+// Изменение �о�то�ни� обного бита в переменной или реги�тре
|
|
//
|
|
//
|
|
-// Ïðèìåðû:
|
|
|
|
-// Set_Bit(TCCR1A, WGM10); - óñòàíîâêà áèòà WGM10 â ðåãèñòðå TCCR1A
|
|
|
|
-// Clear_Bit(TCCR1B, CS10); - ñáðîñ áèòà CS10 â ðåãèñòðå TCCR1B
|
|
|
|
-// Get_Bit(TCCR1A, WGM10); - ïîëó÷åíèå çíà÷åíèÿ áèòà WGM10 â ðåãèñòðå TCCR1A
|
|
|
|
-// Invert_Bit(TCCR1B, CS10); - èíâåðòèðîâàíèå áèòà CS10 â ðåãèñòðå TCCR1B
|
|
|
|
-// Is_Bit_Set(TCCR1A, WGM10); - âîçâðàùàåò èñòèíó åñëè áèò WGM10 â ðåãèñòðå TCCR1A óñòàíîâëåí
|
|
|
|
-// Is_Bit_Clear(TCCR1B, CS10); - âîçâðàùàåò èñòèíó åñëè áèò CS10 â ðåãèñòðå TCCR1B ñáðîøåí
|
|
|
|
|
|
+// Примеры:
|
|
|
|
+// Set_Bit(TCCR1A, WGM10); - у�тановка бита WGM10 в реги�тре TCCR1A
|
|
|
|
+// Clear_Bit(TCCR1B, CS10); - �бро� бита CS10 в реги�тре TCCR1B
|
|
|
|
+// Get_Bit(TCCR1A, WGM10); - получение значени� бита WGM10 в реги�тре TCCR1A
|
|
|
|
+// Invert_Bit(TCCR1B, CS10); - инвертирование бита CS10 в реги�тре TCCR1B
|
|
|
|
+// Is_Bit_Set(TCCR1A, WGM10); - возвращает и�тину е�ли бит WGM10 в реги�тре TCCR1A у�тановлен
|
|
|
|
+// Is_Bit_Clear(TCCR1B, CS10); - возвращает и�тину е�ли бит CS10 в реги�тре TCCR1B �брошен
|
|
//
|
|
//
|
|
#define Set_Bit(Var, BitIdx) ((Var) |= _Bit(BitIdx))
|
|
#define Set_Bit(Var, BitIdx) ((Var) |= _Bit(BitIdx))
|
|
#define Clear_Bit(Var, BitIdx) ((Var) &= ~_Bit(BitIdx))
|
|
#define Clear_Bit(Var, BitIdx) ((Var) &= ~_Bit(BitIdx))
|
|
@@ -77,32 +77,32 @@
|
|
#define Is_Bit_Set(Var, BitIdx) (Get_Bit(Var, BitIdx) == _Bit(BitIdx))
|
|
#define Is_Bit_Set(Var, BitIdx) (Get_Bit(Var, BitIdx) == _Bit(BitIdx))
|
|
#define Is_Bit_Clear(Var, BitIdx) (Get_Bit(Var, BitIdx) == 0x00)
|
|
#define Is_Bit_Clear(Var, BitIdx) (Get_Bit(Var, BitIdx) == 0x00)
|
|
|
|
|
|
-// Èçìåíåíèå ñîñòîÿíèÿ ïåðåìåííîé èëè ðåãèñòðà ïî óêàçàííîé ìàñêå
|
|
|
|
|
|
+// Изменение �о�то�ни� переменной или реги�тра по указанной ма�ке
|
|
//
|
|
//
|
|
-// Ïðèìåðû:
|
|
|
|
-// Set_Bits(TCCR1A, _Bit(WGM10) | _Bit(COM1A1)); - óñòàíîâêà áèòîâ WGM10 è COM1A1 â ðåãèñòðå TCCR1A
|
|
|
|
-// Set_Bits(TCCR1A, ~_Bit(WGM10) | _Bit(COM1A1)); - ñáðîñ áèòà WGM10 è óñòàíîâêà áèòà COM1A1 â ðåãèñòðå TCCR1A
|
|
|
|
-// Clear_Bits(TCCR1A, ~_Bit(WGM10) | _Bit(COM1A1)); - óñòàíîâêà áèòà WGM10 è ñáðîñ áèòà COM1A1 â ðåãèñòðå TCCR1A
|
|
|
|
|
|
+// Примеры:
|
|
|
|
+// Set_Bits(TCCR1A, _Bit(WGM10) | _Bit(COM1A1)); - у�тановка битов WGM10 и COM1A1 в реги�тре TCCR1A
|
|
|
|
+// Set_Bits(TCCR1A, ~_Bit(WGM10) | _Bit(COM1A1)); - �бро� бита WGM10 и у�тановка бита COM1A1 в реги�тре TCCR1A
|
|
|
|
+// Clear_Bits(TCCR1A, ~_Bit(WGM10) | _Bit(COM1A1)); - у�тановка бита WGM10 и �бро� бита COM1A1 в реги�тре TCCR1A
|
|
//
|
|
//
|
|
#define Set_Bits(Var, Mask) ((Var) |= (Mask))
|
|
#define Set_Bits(Var, Mask) ((Var) |= (Mask))
|
|
#define Clear_Bits(Var, Mask) ((Var) &= ~(Mask))
|
|
#define Clear_Bits(Var, Mask) ((Var) &= ~(Mask))
|
|
#define Invert_Bits(Var, Mask) ((Var) ^= (Mask))
|
|
#define Invert_Bits(Var, Mask) ((Var) ^= (Mask))
|
|
#define Toggle_Bits(Var, Mask) Invert_Bits(Var, (Mask))
|
|
#define Toggle_Bits(Var, Mask) Invert_Bits(Var, (Mask))
|
|
|
|
|
|
-// Èçìåíåíèå ñîñòîÿíèÿ îáíîãî áèòà â ïåðåìåííîé èëè ðåãèñòðå ïîñðåäñòâîì îïðåäåë¸ííûõ ôëàãîâ (øàáëîíîâ)
|
|
|
|
|
|
+// Изменение �о�то�ни� обного бита в переменной или реги�тре по�ред�твом определённых флагов (шаблонов)
|
|
//
|
|
//
|
|
-// Ïðèìåðû:
|
|
|
|
-// volatile Byte System_Status = 0x00; - îáúÿâëåíèå ïåðåìåííîé, ãäå áóäóò ìåíÿòüñÿ ôëàãè
|
|
|
|
|
|
+// Примеры:
|
|
|
|
+// volatile Byte System_Status = 0x00; - объ�вление переменной, где будут мен�ть�� флаги
|
|
//
|
|
//
|
|
-// #define Error_Flag System_Status, 0 - îáúÿâëåíèå ôëàãà â ïåðåìåííîé System_Status â áèòå 0
|
|
|
|
-// #define Ready_Flag System_Status, 1 - îáúÿâëåíèå ôëàãà â ïåðåìåííîé System_Status â áèòå 1
|
|
|
|
-// #define Delay_Flag System_Status, 3 - îáúÿâëåíèå ôëàãà â ïåðåìåííîé System_Status â áèòå 3
|
|
|
|
-// #define RX_Flag System_Status, 6 - îáúÿâëåíèå ôëàãà â ïåðåìåííîé System_Status â áèòå 6
|
|
|
|
-// #define TX_Flag System_Status, 8 - îáúÿâëåíèå ôëàãà â ïåðåìåííîé System_Status â áèòå 8
|
|
|
|
|
|
+// #define Error_Flag System_Status, 0 - объ�вление флага в переменной System_Status в бите 0
|
|
|
|
+// #define Ready_Flag System_Status, 1 - объ�вление флага в переменной System_Status в бите 1
|
|
|
|
+// #define Delay_Flag System_Status, 3 - объ�вление флага в переменной System_Status в бите 3
|
|
|
|
+// #define RX_Flag System_Status, 6 - объ�вление флага в переменной System_Status в бите 6
|
|
|
|
+// #define TX_Flag System_Status, 8 - объ�вление флага в переменной System_Status в бите 8
|
|
//
|
|
//
|
|
-// Set_Flag(Ready_Flag); - óñòàíîâêà áèòà 1 â ïåðåìåííîé System_Status
|
|
|
|
-// Set_Flag(RX_Flag); - óñòàíîâêà áèòà 6 â ïåðåìåííîé System_Status
|
|
|
|
-// Clear_Flag(TX_Flag); - ñáðîñ áèòà 8 â ïåðåìåííîé System_Status
|
|
|
|
|
|
+// Set_Flag(Ready_Flag); - у�тановка бита 1 в переменной System_Status
|
|
|
|
+// Set_Flag(RX_Flag); - у�тановка бита 6 в переменной System_Status
|
|
|
|
+// Clear_Flag(TX_Flag); - �бро� бита 8 в переменной System_Status
|
|
//
|
|
//
|
|
#define Set_Flag(FlagDef) Set_Bit(FlagDef)
|
|
#define Set_Flag(FlagDef) Set_Bit(FlagDef)
|
|
#define Clear_Flag(FlagDef) Clear_Bit(FlagDef)
|
|
#define Clear_Flag(FlagDef) Clear_Bit(FlagDef)
|
|
@@ -122,28 +122,28 @@
|
|
((0x##Value##L >> 0x0009) & 0x0008) + ((0x##Value##L >> 0x0006) & 0x0004) +\
|
|
((0x##Value##L >> 0x0009) & 0x0008) + ((0x##Value##L >> 0x0006) & 0x0004) +\
|
|
((0x##Value##L >> 0x0003) & 0x0002) + ((0x##Value##L & 0x0001)))
|
|
((0x##Value##L >> 0x0003) & 0x0002) + ((0x##Value##L & 0x0001)))
|
|
|
|
|
|
-// Ñêîðîñòü ïîðòà UART
|
|
|
|
|
|
+// Скоро�ть порта UART
|
|
#define Baud_Rate(BaudRate) (unsigned int)((unsigned long)(__MCU_Clock) / (((BaudRate) * 0x10L) - 1))
|
|
#define Baud_Rate(BaudRate) (unsigned int)((unsigned long)(__MCU_Clock) / (((BaudRate) * 0x10L) - 1))
|
|
#define Baud_RateL(BaudRate) (unsigned char)((unsigned long)(__MCU_Clock) / (((BaudRate) * 0x10L) - 1))
|
|
#define Baud_RateL(BaudRate) (unsigned char)((unsigned long)(__MCU_Clock) / (((BaudRate) * 0x10L) - 1))
|
|
#define Baud_RateH(BaudRate) (unsigned char)((unsigned long)(__MCU_Clock) / (((BaudRate) * 0x10L) - 1) >> 8)
|
|
#define Baud_RateH(BaudRate) (unsigned char)((unsigned long)(__MCU_Clock) / (((BaudRate) * 0x10L) - 1) >> 8)
|
|
|
|
|
|
-// Ïåðåèìåíîâàíèå òèïîâ
|
|
|
|
|
|
+// Переименование типов
|
|
|
|
|
|
#ifndef bool
|
|
#ifndef bool
|
|
#include <stdbool.h>
|
|
#include <stdbool.h>
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-// Áóëåâûé òèï
|
|
|
|
|
|
+// Булевый тип
|
|
typedef bool Boolean;
|
|
typedef bool Boolean;
|
|
|
|
|
|
-// Öåëûé òèï, 8 áèò
|
|
|
|
|
|
+// Целый тип, 8 бит
|
|
typedef unsigned char Byte;
|
|
typedef unsigned char Byte;
|
|
typedef unsigned char u08;
|
|
typedef unsigned char u08;
|
|
typedef signed char ShortInt;
|
|
typedef signed char ShortInt;
|
|
typedef signed char s08;
|
|
typedef signed char s08;
|
|
typedef signed char SByte;
|
|
typedef signed char SByte;
|
|
|
|
|
|
-// Öåëûé òèï, 16 áèò
|
|
|
|
|
|
+// Целый тип, 16 бит
|
|
typedef unsigned int Word;
|
|
typedef unsigned int Word;
|
|
typedef unsigned int u16;
|
|
typedef unsigned int u16;
|
|
typedef unsigned int UInt16;
|
|
typedef unsigned int UInt16;
|
|
@@ -151,7 +151,7 @@ typedef signed int SmallInt;
|
|
typedef signed int s16;
|
|
typedef signed int s16;
|
|
typedef signed int SInt16;
|
|
typedef signed int SInt16;
|
|
|
|
|
|
-// Öåëûé òèï, 32 áèòà
|
|
|
|
|
|
+// Целый тип, 32 бита
|
|
typedef unsigned long DWord;
|
|
typedef unsigned long DWord;
|
|
typedef unsigned long Cardinal;
|
|
typedef unsigned long Cardinal;
|
|
typedef unsigned long u32;
|
|
typedef unsigned long u32;
|
|
@@ -160,7 +160,7 @@ typedef signed long Integer;
|
|
typedef signed long s32;
|
|
typedef signed long s32;
|
|
typedef signed long SInt32;
|
|
typedef signed long SInt32;
|
|
|
|
|
|
-// Öåëûé òèï, 64 áèòà
|
|
|
|
|
|
+// Целый тип, 64 бита
|
|
typedef unsigned long long DDWord;
|
|
typedef unsigned long long DDWord;
|
|
typedef unsigned long long u64;
|
|
typedef unsigned long long u64;
|
|
typedef unsigned long long UInt64;
|
|
typedef unsigned long long UInt64;
|
|
@@ -168,10 +168,10 @@ typedef signed long long Int64;
|
|
typedef signed long long s64;
|
|
typedef signed long long s64;
|
|
typedef signed long long SInt64;
|
|
typedef signed long long SInt64;
|
|
|
|
|
|
-// Âåùåñòâåííûé òèï, 32 áèòà
|
|
|
|
|
|
+// Веще�твенный тип, 32 бита
|
|
typedef float Float;
|
|
typedef float Float;
|
|
|
|
|
|
-//Âåùåñòâåííûé òèï, 32 áèòà (åñëè ðàçðåøåíî â íàñòðîéêàõ, òî 64 áèòà)
|
|
|
|
|
|
+//Веще�твенный тип, 32 бита (е�ли разрешено в на�тройках, то 64 бита)
|
|
typedef double Double;
|
|
typedef double Double;
|
|
typedef long double Extended;
|
|
typedef long double Extended;
|
|
|
|
|
|
@@ -416,60 +416,60 @@ typedef union
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
-// Îïåðàöèè ñ ïîðòàìè.
|
|
|
|
-//
|
|
|
|
-// Ñèíòàêñèñ:
|
|
|
|
-// #define <èìÿ> <Letter>, <Idx>, [<Level>], [<PullUp>]
|
|
|
|
-//
|
|
|
|
-// <Letter> - Áóêâà ïîðòà (A, B, C, è ò. ä.).
|
|
|
|
-// <Idx> - Íîìåð âûâîäà ïîðòà (0-7).
|
|
|
|
-// <Level> - Àêòèâíûé óðîâåíü. (High èëè Low, åñëè íå óêàçàí, òî High);
|
|
|
|
-// High - ëîãè÷åñêàÿ åäèíèöà;
|
|
|
|
-// Low - ëîãè÷åñêèé íîëü.
|
|
|
|
-// <PullUp> - Âíåøíèé ïîäòÿãèâàþùèé ðåçèñòîð. (On èëè Off, åñëè íå óêàçàí, òî Off);
|
|
|
|
-// On - èñïîëüçóåòñÿ âíåøíèé ïîäòÿãèâàþùèé ðåçèñòîð;
|
|
|
|
-// Off - âíåøíåãî ïîäòÿãèâàþùåãî ðåçàñòîðà íåò.
|
|
|
|
-//
|
|
|
|
-// Îïèñàíèå ìàêðîêîìàíä:
|
|
|
|
-// Pin_HiZ (Set_Pin_HiZ) - åñëè PullUp = Off, òî âûâîäà ïîðòà óñòàíàâëèâàåòñÿ â "òðåòüå" (Hi-Z) ñîñòîÿíèå;
|
|
|
|
-// Pin_PullUp_IO (Set_Pin_PullUp_IO) - óñòàíîâêà âûâîäà ïîðòà äëÿ ðàáîòû ñ âíåøíèì "ïîäòÿãèâàþùèì" ðåçèñòîðîì;
|
|
|
|
-// Pin_In (Set_Pin_In) - óñòàíîâêà âûâîäà ïîðòà êàê âõîä;
|
|
|
|
-// Pin_Out (Set_Pin_Out) - óñòàíîâêà âûâîäà ïîðòà êàê âûõîä;
|
|
|
|
-// Pin_On (Set_Pin_On) - óñòàíîâêà àêòèâíîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà;
|
|
|
|
-// Pin_High (Set_Pin_High) - óñòàíîâêà "åäèíè÷íîãî" ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà;
|
|
|
|
-// Pin_Off (Set_Pin_Off) - óñòàíîâêà íåàêòèâíîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà;
|
|
|
|
-// Pin_Low (Set_Pin_Low) - óñòàíîâêà "íóëåâîãî" ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà;
|
|
|
|
-// Pin_Signal (Get_Pin_Signal) - ïðîâåðêà ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà;
|
|
|
|
-// Pin_Change (Change_Pin_Signal) - èçìåíåíèå ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà íà ïðîòèâîïîëîæíîå;
|
|
|
|
-// Pin_Invert (Invert_Pin_Signal) - àíàëîãè÷íî Pin_Change;
|
|
|
|
-// Pin_Out_On (Set_Pin_Out_On) - óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà àêòèâíîãî ëîãè÷åñêîãî óðîâíÿ;
|
|
|
|
-// Pin_Out_Off (Set_Pin_Out_Off) - óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà íåàêòèâíîãî ëîãè÷åñêîãî óðîâíÿ;
|
|
|
|
-// Pin_Out_High (Set_Pin_Out_High) - óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà åäèíè÷íîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà;
|
|
|
|
-// Pin_Out_Low (Set_Pin_Out_Low) - óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà íóëåâîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà.
|
|
|
|
-//
|
|
|
|
-// Ïðèìå÷àíèÿ:
|
|
|
|
-// 1. Åñëè â îïðåäåëåíèè âûâîäà ïîðòà óêàçàíî, ÷òî èñïîëüçóåòñÿ âíåøíèé ïîäòÿãèâàþùèé
|
|
|
|
-// ðåçèñòîð (PullUp = On), òî ìàêðîêîìàíäû Pin_In è Pin_Out âûïîëíÿþò äåéñòâèÿ,
|
|
|
|
-// àíàëîãè÷íûå ìàêðîêîìàíäå Pin_PullUp_IO.
|
|
|
|
-// 2.  ñêîáêàõ óêàçàíû ìàêðîêîìàíäû, âûïîëíÿþùèå àíàëîãè÷íûå äåéñòâèÿ, íî ïàðàìåòðû äëÿ
|
|
|
|
-// íèõ ïåðåäàþòñÿ íå ÷åðåç îïðåäåëåíèå define, à òàêæå êàê â ôóíêöèþ.
|
|
|
|
-// 3. Â îïðåäåëåíèè define ïîñëåäíèå äâà ïàðàìåòðà ìîæíî íå óêàçûâàòü, íî ÇÀÏßÒÛÅ ÎÏÓÑÊÀÒÜ ÍÅËÜÇß.
|
|
|
|
-//
|
|
|
|
-// Ïðèìåðû:
|
|
|
|
|
|
+// Операции � портами.
|
|
|
|
+//
|
|
|
|
+// Синтак�и�:
|
|
|
|
+// #define <им�> <Letter>, <Idx>, [<Level>], [<PullUp>]
|
|
|
|
+//
|
|
|
|
+// <Letter> - Буква порта (A, B, C, и т. д.).
|
|
|
|
+// <Idx> - �омер вывода порта (0-7).
|
|
|
|
+// <Level> - �ктивный уровень. (High или Low, е�ли не указан, то High);
|
|
|
|
+// High - логиче�ка� единица;
|
|
|
|
+// Low - логиче�кий ноль.
|
|
|
|
+// <PullUp> - Внешний подт�гивающий рези�тор. (On или Off, е�ли не указан, то Off);
|
|
|
|
+// On - и�пользует�� внешний подт�гивающий рези�тор;
|
|
|
|
+// Off - внешнего подт�гивающего реза�тора нет.
|
|
|
|
+//
|
|
|
|
+// Опи�ание макрокоманд:
|
|
|
|
+// Pin_HiZ (Set_Pin_HiZ) - е�ли PullUp = Off, то вывода порта у�танавливает�� в "третье" (Hi-Z) �о�то�ние;
|
|
|
|
+// Pin_PullUp_IO (Set_Pin_PullUp_IO) - у�тановка вывода порта дл� работы � внешним "подт�гивающим" рези�тором;
|
|
|
|
+// Pin_In (Set_Pin_In) - у�тановка вывода порта как вход;
|
|
|
|
+// Pin_Out (Set_Pin_Out) - у�тановка вывода порта как выход;
|
|
|
|
+// Pin_On (Set_Pin_On) - у�тановка активного логиче�кого уровн� на выводе порта;
|
|
|
|
+// Pin_High (Set_Pin_High) - у�тановка "единичного" логиче�кого уровн� на выводе порта;
|
|
|
|
+// Pin_Off (Set_Pin_Off) - у�тановка неактивного логиче�кого уровн� на выводе порта;
|
|
|
|
+// Pin_Low (Set_Pin_Low) - у�тановка "нулевого" логиче�кого уровн� на выводе порта;
|
|
|
|
+// Pin_Signal (Get_Pin_Signal) - проверка логиче�кого уровн� на выводе порта;
|
|
|
|
+// Pin_Change (Change_Pin_Signal) - изменение логиче�кого уровн� на выводе порта на противоположное;
|
|
|
|
+// Pin_Invert (Invert_Pin_Signal) - аналогично Pin_Change;
|
|
|
|
+// Pin_Out_On (Set_Pin_Out_On) - у�тановка вывода порта как выход и у�тановка активного логиче�кого уровн�;
|
|
|
|
+// Pin_Out_Off (Set_Pin_Out_Off) - у�тановка вывода порта как выход и у�тановка неактивного логиче�кого уровн�;
|
|
|
|
+// Pin_Out_High (Set_Pin_Out_High) - у�тановка вывода порта как выход и у�тановка единичного логиче�кого уровн� на выводе порта;
|
|
|
|
+// Pin_Out_Low (Set_Pin_Out_Low) - у�тановка вывода порта как выход и у�тановка нулевого логиче�кого уровн� на выводе порта.
|
|
|
|
+//
|
|
|
|
+// Примечани�:
|
|
|
|
+// 1. Е�ли в определении вывода порта указано, что и�пользует�� внешний подт�гивающий
|
|
|
|
+// рези�тор (PullUp = On), то макрокоманды Pin_In и Pin_Out выполн�ют дей�тви�,
|
|
|
|
+// аналогичные макрокоманде Pin_PullUp_IO.
|
|
|
|
+// 2. В �кобках указаны макрокоманды, выполн�ющие аналогичные дей�тви�, но параметры дл�
|
|
|
|
+// них передают�� не через определение define, а также как в функцию.
|
|
|
|
+// 3. В определении define по�ледние два параметра можно не указывать, но З�ПЯТЫЕ ОПУСК�ТЬ �ЕЛЬЗЯ.
|
|
|
|
+//
|
|
|
|
+// Примеры:
|
|
// #define Example1 B, 5, Low,
|
|
// #define Example1 B, 5, Low,
|
|
// #define Example2 B, 5,,
|
|
// #define Example2 B, 5,,
|
|
// #define Example3 B, 5, Low, On
|
|
// #define Example3 B, 5, Low, On
|
|
// #define Example4 B, 5,, Off
|
|
// #define Example4 B, 5,, Off
|
|
//
|
|
//
|
|
-// Pin_Out(Example1); - óñòàíîâêà âûâîäà 5 ïîðòà Â íà âûõîä;
|
|
|
|
-// Pin_On(Example1); - óñòàíîâêà óêàçàííîãî àêòèâíîãî óðîâíÿ (Low) íà âûâîäå 5 ïîðòà B.
|
|
|
|
|
|
+// Pin_Out(Example1); - у�тановка вывода 5 порта В на выход;
|
|
|
|
+// Pin_On(Example1); - у�тановка указанного активного уровн� (Low) на выводе 5 порта B.
|
|
//
|
|
//
|
|
-// Ïðèìåð ê ïðèìå÷àíèþ 2:
|
|
|
|
-// Ìàêðîêîìàíäà Set_Pin_On(B, 5, Low, On) âûïîëíèò àíàëîãè÷íûå äåéñòâèÿ, ÷òî è êîìàíäà Pin_On(Example3)
|
|
|
|
|
|
+// Пример к примечанию 2:
|
|
|
|
+// Макрокоманда Set_Pin_On(B, 5, Low, On) выполнит аналогичные дей�тви�, что и команда Pin_On(Example3)
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
-// Îñíîâíûå îïåðàöèè ñ ïîðòàìè
|
|
|
|
|
|
+// О�новные операции � портами
|
|
#define Set_PORT_Bit(Ltr, Idx) (PORT##Ltr |= _Bit(Idx))
|
|
#define Set_PORT_Bit(Ltr, Idx) (PORT##Ltr |= _Bit(Idx))
|
|
#define Clr_PORT_Bit(Ltr, Idx) (PORT##Ltr &= ~_Bit(Idx))
|
|
#define Clr_PORT_Bit(Ltr, Idx) (PORT##Ltr &= ~_Bit(Idx))
|
|
#define Invert_PORT_Bit(Ltr, Idx) (PORT##Ltr ^= _Bit(Idx))
|
|
#define Invert_PORT_Bit(Ltr, Idx) (PORT##Ltr ^= _Bit(Idx))
|
|
@@ -482,29 +482,29 @@ typedef union
|
|
#define Toggle_DDR_Bit(Ltr, Idx) Invert_DDR_Bit(Ltr, Idx)
|
|
#define Toggle_DDR_Bit(Ltr, Idx) Invert_DDR_Bit(Ltr, Idx)
|
|
#define Get_PIN_State(Ltr, Idx) (PIN##Ltr & _Bit(Idx))
|
|
#define Get_PIN_State(Ltr, Idx) (PIN##Ltr & _Bit(Idx))
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà â òðåòüå ñîñòîÿíèå (Hi-Z)
|
|
|
|
|
|
+// У�тановка вывода порта в третье �о�то�ние (Hi-Z)
|
|
#define Set_Pin_HiZ(Ltr, Idx, Level, PullUp) { Clr_DDR_Bit(Ltr, Idx); Clr_PORT_Bit(Ltr, Idx); }
|
|
#define Set_Pin_HiZ(Ltr, Idx, Level, PullUp) { Clr_DDR_Bit(Ltr, Idx); Clr_PORT_Bit(Ltr, Idx); }
|
|
#define Pin_HiZ(PortDef) Set_Pin_HiZ(PortDef)
|
|
#define Pin_HiZ(PortDef) Set_Pin_HiZ(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà äëÿ ðàáîòû ñ âíåøíèì ïîäòÿãèâàþùèì ðåçèñòîðîì
|
|
|
|
|
|
+// У�тановка вывода порта дл� работы � внешним подт�гивающим рези�тором
|
|
#define SetPinPullUp(Ltr, Idx)
|
|
#define SetPinPullUp(Ltr, Idx)
|
|
#define SetPinPullUpOff(Ltr, Idx)
|
|
#define SetPinPullUpOff(Ltr, Idx)
|
|
#define SetPinPullUpOn(Ltr, Idx) Clr_PORT_Bit(Ltr, Idx)
|
|
#define SetPinPullUpOn(Ltr, Idx) Clr_PORT_Bit(Ltr, Idx)
|
|
#define Set_Pin_PullUp_IO(Ltr, Idx, Level, PullUp) { Clr_DDR_Bit(Ltr, Idx); SetPinPullUp##PullUp(Ltr, Idx); }
|
|
#define Set_Pin_PullUp_IO(Ltr, Idx, Level, PullUp) { Clr_DDR_Bit(Ltr, Idx); SetPinPullUp##PullUp(Ltr, Idx); }
|
|
#define Pin_PullUp_IO(PortDef) Set_Pin_PullUp_IO(PortDef)
|
|
#define Pin_PullUp_IO(PortDef) Set_Pin_PullUp_IO(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà êàê âõîä
|
|
|
|
|
|
+// У�тановка вывода порта как вход
|
|
#define Set_Pin_In(Ltr, Idx, Level, PullUp) Set_Pin_PullUp_IO(Ltr, Idx, Level, PullUp)
|
|
#define Set_Pin_In(Ltr, Idx, Level, PullUp) Set_Pin_PullUp_IO(Ltr, Idx, Level, PullUp)
|
|
#define Pin_In(PortDef) Set_Pin_In(PortDef)
|
|
#define Pin_In(PortDef) Set_Pin_In(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà êàê âûõîä
|
|
|
|
|
|
+// У�тановка вывода порта как выход
|
|
#define SetPinOut(Ltr, Idx) Set_DDR_Bit(Ltr, Idx)
|
|
#define SetPinOut(Ltr, Idx) Set_DDR_Bit(Ltr, Idx)
|
|
#define SetPinOutOff(Ltr, Idx) Set_DDR_Bit(Ltr, Idx)
|
|
#define SetPinOutOff(Ltr, Idx) Set_DDR_Bit(Ltr, Idx)
|
|
#define SetPinOutOn(Ltr, Idx) Clr_DDR_Bit(Ltr, Idx)
|
|
#define SetPinOutOn(Ltr, Idx) Clr_DDR_Bit(Ltr, Idx)
|
|
#define Set_Pin_Out(Ltr, Idx, Level, PullUp) { SetPinOut##PullUp(Ltr, Idx); SetPinPullUp##PullUp(Ltr, Idx); }
|
|
#define Set_Pin_Out(Ltr, Idx, Level, PullUp) { SetPinOut##PullUp(Ltr, Idx); SetPinPullUp##PullUp(Ltr, Idx); }
|
|
#define Pin_Out(PortDef) Set_Pin_Out(PortDef)
|
|
#define Pin_Out(PortDef) Set_Pin_Out(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà àêòèâíîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка активного логиче�кого уровн� на выводе порта
|
|
#define SetPin(Ltr, Idx) Set_PORT_Bit(Ltr, Idx)
|
|
#define SetPin(Ltr, Idx) Set_PORT_Bit(Ltr, Idx)
|
|
#define SetPinHighOn(Ltr, Idx) Clr_DDR_Bit(Ltr, Idx)
|
|
#define SetPinHighOn(Ltr, Idx) Clr_DDR_Bit(Ltr, Idx)
|
|
#define SetPinHighOff(Ltr, Idx) Set_PORT_Bit(Ltr, Idx)
|
|
#define SetPinHighOff(Ltr, Idx) Set_PORT_Bit(Ltr, Idx)
|
|
@@ -517,19 +517,19 @@ typedef union
|
|
#define Set_Pin_On(Ltr, Idx, Level, PullUp) SetPin##Level##PullUp(Ltr, Idx)
|
|
#define Set_Pin_On(Ltr, Idx, Level, PullUp) SetPin##Level##PullUp(Ltr, Idx)
|
|
#define Pin_On(PortDef) Set_Pin_On(PortDef)
|
|
#define Pin_On(PortDef) Set_Pin_On(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà àêòèâíîãî ëîãè÷åñêîãî óðîâíÿ
|
|
|
|
|
|
+// У�тановка вывода порта как выход и у�тановка активного логиче�кого уровн�
|
|
#define Set_Pin_Out_On(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_On(Ltr, Idx, Level, PullUp); }
|
|
#define Set_Pin_Out_On(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_On(Ltr, Idx, Level, PullUp); }
|
|
#define Pin_Out_On(PortDef) Set_Pin_Out_On(PortDef)
|
|
#define Pin_Out_On(PortDef) Set_Pin_Out_On(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà åäèíè÷íîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка единичного логиче�кого уровн� на выводе порта
|
|
#define Set_Pin_High(Ltr, Idx, Level, PullUp) Set_Pin_On(Ltr, Idx, High, PullUp)
|
|
#define Set_Pin_High(Ltr, Idx, Level, PullUp) Set_Pin_On(Ltr, Idx, High, PullUp)
|
|
#define Pin_High(PortDef) Set_Pin_High(PortDef)
|
|
#define Pin_High(PortDef) Set_Pin_High(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà åäèíè÷íîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка вывода порта как выход и у�тановка единичного логиче�кого уровн� на выводе порта
|
|
#define Set_Pin_Out_High(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_High(Ltr, Idx, Level, PullUp); }
|
|
#define Set_Pin_Out_High(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_High(Ltr, Idx, Level, PullUp); }
|
|
#define Pin_Out_High(PortDef) Set_Pin_Out_High(PortDef)
|
|
#define Pin_Out_High(PortDef) Set_Pin_Out_High(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà íåàêòèâíîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка неактивного логиче�кого уровн� на выводе порта
|
|
#define ClrPin(Ltr, Idx) Clr_PORT_Bit(Ltr, Idx)
|
|
#define ClrPin(Ltr, Idx) Clr_PORT_Bit(Ltr, Idx)
|
|
#define ClrPinLow(Ltr, Idx) Set_PORT_Bit(Ltr, Idx)
|
|
#define ClrPinLow(Ltr, Idx) Set_PORT_Bit(Ltr, Idx)
|
|
#define ClrPinHigh(Ltr, Idx) Clr_PORT_Bit(Ltr, Idx)
|
|
#define ClrPinHigh(Ltr, Idx) Clr_PORT_Bit(Ltr, Idx)
|
|
@@ -542,19 +542,19 @@ typedef union
|
|
#define Set_Pin_Off(Ltr, Idx, Level, PullUp) ClrPin##Level##PullUp(Ltr, Idx)
|
|
#define Set_Pin_Off(Ltr, Idx, Level, PullUp) ClrPin##Level##PullUp(Ltr, Idx)
|
|
#define Pin_Off(PortDef) Set_Pin_Off(PortDef)
|
|
#define Pin_Off(PortDef) Set_Pin_Off(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà íåàêòèâíîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка неактивного логиче�кого уровн� на выводе порта
|
|
#define Set_Pin_Out_Off(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_Off(Ltr, Idx, Level, PullUp); }
|
|
#define Set_Pin_Out_Off(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_Off(Ltr, Idx, Level, PullUp); }
|
|
#define Pin_Out_Off(PortDef) Set_Pin_Out_Off(PortDef)
|
|
#define Pin_Out_Off(PortDef) Set_Pin_Out_Off(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà íóëåâîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка нулевого логиче�кого уровн� на выводе порта
|
|
#define Set_Pin_Low(Ltr, Idx, Level, PullUp) Set_Pin_Off(Ltr, Idx, High, PullUp)
|
|
#define Set_Pin_Low(Ltr, Idx, Level, PullUp) Set_Pin_Off(Ltr, Idx, High, PullUp)
|
|
#define Pin_Low(PortDef) Set_Pin_Low(PortDef)
|
|
#define Pin_Low(PortDef) Set_Pin_Low(PortDef)
|
|
|
|
|
|
-// Óñòàíîâêà âûâîäà ïîðòà êàê âûõîä è óñòàíîâêà íóëåâîãî ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// У�тановка вывода порта как выход и у�тановка нулевого логиче�кого уровн� на выводе порта
|
|
#define Set_Pin_Out_Low(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_Low(Ltr, Idx, Level, PullUp); }
|
|
#define Set_Pin_Out_Low(Ltr, Idx, Level, PullUp) { Set_Pin_Out(Ltr, Idx, Level, PullUp); Set_Pin_Low(Ltr, Idx, Level, PullUp); }
|
|
#define Pin_Out_Low(PortDef) Set_Pin_Out_Low(PortDef)
|
|
#define Pin_Out_Low(PortDef) Set_Pin_Out_Low(PortDef)
|
|
|
|
|
|
-// Ïðîâåðêà ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà
|
|
|
|
|
|
+// Проверка логиче�кого уровн� на выводе порта
|
|
#define GetPinSignal(Ltr, Idx) Get_PIN_State(Ltr, Idx)
|
|
#define GetPinSignal(Ltr, Idx) Get_PIN_State(Ltr, Idx)
|
|
#define GetPinSignalLow(Ltr, Idx) (!Get_PIN_State(Ltr, Idx))
|
|
#define GetPinSignalLow(Ltr, Idx) (!Get_PIN_State(Ltr, Idx))
|
|
#define GetPinSignalHigh(Ltr, Idx) Get_PIN_State(Ltr, Idx)
|
|
#define GetPinSignalHigh(Ltr, Idx) Get_PIN_State(Ltr, Idx)
|
|
@@ -564,7 +564,7 @@ typedef union
|
|
#define Pin_State(PortDef) Get_Pin_Signal(PortDef)
|
|
#define Pin_State(PortDef) Get_Pin_Signal(PortDef)
|
|
#define Test_Pin(PortDef) Get_Pin_Signal(PortDef)
|
|
#define Test_Pin(PortDef) Get_Pin_Signal(PortDef)
|
|
|
|
|
|
-// Èçìåíåíèå ëîãè÷åñêîãî óðîâíÿ íà âûâîäå ïîðòà íà ïðîòèâîïîëîæíîå
|
|
|
|
|
|
+// Изменение логиче�кого уровн� на выводе порта на противоположное
|
|
#define Invert(Ltr, Idx) Invert_PORT_Bit(Ltr, Idx)
|
|
#define Invert(Ltr, Idx) Invert_PORT_Bit(Ltr, Idx)
|
|
#define InvertOff(Ltr, Idx) Invert_PORT_Bit(Ltr, Idx)
|
|
#define InvertOff(Ltr, Idx) Invert_PORT_Bit(Ltr, Idx)
|
|
#define InvertOn(Ltr, Idx) Invert_DDR_Bit(Ltr, Idx)
|
|
#define InvertOn(Ltr, Idx) Invert_DDR_Bit(Ltr, Idx)
|
|
@@ -584,7 +584,7 @@ typedef union
|
|
#define BYTES(Value) ((Byte *) & (Value))
|
|
#define BYTES(Value) ((Byte *) & (Value))
|
|
#define WORDS(Value) ((Word *) & (Value))
|
|
#define WORDS(Value) ((Word *) & (Value))
|
|
|
|
|
|
-// Êîíôèãóðàöèîííûå áèòû è áèòû áëîêèðîâêè
|
|
|
|
|
|
+// Конфигурационные биты и биты блокировки
|
|
#define _DataToZByte(Addr, Value) __AddrToZByteToSPMCR_LPM((void __flash *)(Addr), (Value))
|
|
#define _DataToZByte(Addr, Value) __AddrToZByteToSPMCR_LPM((void __flash *)(Addr), (Value))
|
|
#define _DataToR0Byte(Addr, Value) __DataToR0ByteToSPMCR_SPM((Addr), (Value))
|
|
#define _DataToR0Byte(Addr, Value) __DataToR0ByteToSPMCR_SPM((Addr), (Value))
|
|
#define Get_Lock_Bits() _DataToZByte(0x0001, 0x09)
|
|
#define Get_Lock_Bits() _DataToZByte(0x0001, 0x09)
|