[an error occurred while processing this directive]
Заголовочные файлы нужны только для ссылок к глобальным константам, переменным и функциям.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено _Bill 23 января 2006 г. 11:18
В ответ на: Скажите пжалуста, чтоб в ИАР-е в проэкте развести разные фрагменты по разным "с"-шным файлам, или только через " "заголовочные"? отправлено <font color=gray>Саша</font> 23 января 2006 г. 11:02

А модули пишутся независимо друг от друга с учетом выше сказанного. Мой пример заголовочного файла, я дума, Вам поможет.


/*
Counter header file

File: counter.h

28-Oct-04 BK Initial edit
26-Dec-05 BK Last update
*/
#include
#include

/* MCU related constant definitions */

#define FOSC 16000000L // MCU clock frequency

/* LCD symbol definitions */

#define MINUS_SYM 0x0A // '-'
#define PI_SYM 0xA8 // 'Ï'
#define C_SYM 0x0C // 'C'
#define H_SYM 0x0D // 'H'
#define P_SYM 0x0E // 'P'

/* I/O port definitions */

#define RELAY_PORT PORTB // Relay control port
#define RELAY_DDR DDRB //
#define RELAY_BIT (1<<5) // -- relay 1

#define INPUT_PORT PIND // Input control port
#define INPUT_PULLUP PORTD //
#define INPUT_DDR DDRD //
#define FAIL_BIT (1<<2) // -- "Power fail" signal
#define SETUP_BTN (1<<5) // -- "Setup" button
#define PROG_BTN (1<<6) // -- "Program" button
#define ENTER_BTN (1<<7) // -- "Enter" button
#define BUTN_MSK (ENTER_BTN | SETUP_BTN | PROG_BTN)
#define SDEC_BIT (1<<4) // -- "-" button
#define SINC_BIT (1<<3) // -- "+" button

/* Interrupt flag definitions */

#define TIMER0_BIT (1<<0) // Timer0 interrupt flag
#define TICK_BIT (1<<1) // 1 tick (50 mS) flag
#define BUTTON_BIT (1<<2) // To check buttons flag
#define _0_1_S_BIT (1<<3) // 0.1 S time interval flag
#define TIMOUT_BIT (1<<4) // Time-out flag
#define _320MS_BIT (1<<5) // 320 mS interval flag
#define DISPLAY_BIT (1<<6) // Time to output to LCD

/* Mode bit definitions */

#define ENTER_RST (1<<0) // Restart on "Enter" button
#define NEXT_RST (1<<1) // Restart on "Next" incoming pulse
#define DELAY_RST (1<<2) // Restart after delay
#define RST_MASK (ENTER_RST | NEXT_RST | DELAY_RST)
#define RSTRT_BIT (1<<3) // Restart condition flag
#define REVRS_BIT (1<<4) // Reversive mode
#define CNTDN_BIT (1<<5) // Count down flag
#define SINGL_BIT (1<<6) // Single count flag
#define DELAY_BIT (1<<7) // Restart after delay flag
#define RESET_EN (1<<8) // Reset enable
#define PROG_EN (1<<9) // Program enable
#define COUNT_EN (1<<10) // Count limit setup enable
#define PASWRD_BIT (1<<11) // Password entering flag
#define LIMIT_BIT (1<<12) // Limit is reached flag
#define DOWN_BIT (1<<13) // Input '-' pulse flag

/* Common constant definitions */

#define ERROR 0xFF // Bad function return
#define FAIL 0x00 // Alternative bad function return
#define OK 0x01 // Good function return
#define DONE 0x02 // The work is done completely

/* EEPROM relative definitions */

#define SETUP_SAV (1<<6) // Setup is saved
#define LIMIT_SAV (1<<2) // Limit value is saved
#define STATE_SAV (1<<4) // Current state saved (if Power fail)

/* Data type definitions */

typedef enum {
stStop = 1, // Initial state
stProg, // Program mode
stCount, // Count mode
stDelay, // Delay before restart
stRestart, // Restart state
stPasswrd // Input password state
}
TState;

typedef struct {
TState state;
unsigned mode;
long value;
long limit;
}
TSavedInfo;

/* Global variable references */

//
// Global register variables
//
__no_init __regvar volatile char IntFlags @ 15; // Various interrupt flags
__no_init __regvar char CountPulses @ 14; // Input signal pulses
__no_init __regvar volatile char TickCounter @ 13; // Tick counter (1 tick = 0.5mS)
__no_init __regvar TState State @ 12; // Digit mask
//__no_init __regvar volatile char DigitCounter @ 11; // Digit counter
//__no_init __regvar volatile char DigitMask @ 10; // Digit mask
__no_init __regvar unsigned Mode @ 8; // Counter mode flags
__no_init __regvar char Debounce @ 7; // Debounce value
__no_init __regvar char InMask @ 11; // Input signal mask
//
// EEPROM data
//
__no_init __eeprom char eSave @ 9; // Data saved in EEPROM flag
__no_init __eeprom char eDebounce @ 10; // Debounce copy
__no_init __eeprom char eInMask @ 11; // InMask copy
__no_init __eeprom unsigned eMode @ 12; // Mode copy
__no_init __eeprom unsigned eLimit @ 18; // LimitValue copy
__no_init __eeprom unsigned eScale @ 20; // ScaleValue copy
__no_init __eeprom unsigned eRstDelay @ 22; // RstDelay copy
__no_init __eeprom TSavedInfo eInfo @ 100; // Saved info

//
// SRAM data
//
extern long CurntValue; // Current count value
extern long LimitValue; // Limit count value
extern long Limit; // Current limit value
extern char Digits[4]; // Timer counter BCD digits
extern char TimerFlags; // Various timer flags
extern unsigned RstDelay; // Restart delay counter
extern char TimoutCnt; // Time-out counter
extern char DotDigit; // Display dot digit

//
// Program memory data
//
extern __flash char DigitTable[]; // 7 segment digit table

/* Function prototypes */

//
// buttons module function definitions
//
void InitButtons(void);
char GetButtons(void);
char ReadBtns(void);

//
// timers module function definitions
//
void InitTimers(void);
void StartDebounce(void);
void StopDebounce(void);
void DoDelay(void);
void SleepMCU(char interval); // Sleep CPU on the specified period (uS)

//
// setup module function definitions
//
void Setup(void); // Setup the counter modes
void SetLimit(void); // Set counter limit value
char InPassword(void);
void CountMode(void);

//
// counter module function definitions
//
char BinToBCD(char _byte);
void BCDnumber(unsigned val);
void DoCount(void);

//
// misc module function definitions
//
void PutStr(char *pt);
void PutText(char __flash *pt);
char *ltoa(long num);
long GetNum(long num);


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru