[an error occurred while processing this directive]
|
А модули пишутся независимо друг от друга с учетом выше сказанного. Мой пример заголовочного файла, я дума, Вам поможет.
/*
Counter header fileFile: 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: info@telesys.ru