📄 main.h
字号:
/*
* Copyright (c) 2007,山东烟台万立电子有限公司
* All rights reserved.
*
* 文件名称:main.h
* 文件标识:系统配置文件
* 摘 要:定义了本系统的所有头文件,及函数声名
*
* 当前版本:1.0
* 作 者:冰雨
* 完成日期:2007年5月20日
*/
//*********************************************************
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <stdio.h>
#include <util/twi.h>
#include <util/crc16.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <avr/wdt.h>
#include "uart0.h"
#include "uart1.h"
#include "DS18B20.h"
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define BIT(x) (1<<(x))
#define NOP() asm("nop")
#define WDR() asm("wdr")
#define rest_timeout() timeout=0;count_time_out=0;
#define SCL PD0 //I
#define SDA PD1 //I
#define uart1_TX PD3 //O
#define uart1_RX PD2 //I
#define IGT PE2 //O
#define GSM_RX PE0 //I
#define GSM_TX PE1 //O
#define POW_ON_OFF PG0 //O
#define BATT_C PB7 //O
#define A2 PF2 //ADC
#define A3 PF3 //ADC
#define A4 PF4 //ADC
#define A5 PF5 //ADC
#define A6 PF6 //ADC
#define A7 PF7 //ADC
#define D5 PD5 //#define D6 PD6 //#define D7 PD7 //
#define OC1 PB5 //#define OC3 PE3 //#define TEMPER PB6 //
#define SET_BATT_C PORTB|=_BV(BATT_C)
#define CLR_BATT_C PORTB&=~(_BV(BATT_C))
#define CLR_IGT PORTE&=~(_BV(IGT))
#define SET_IGT PORTE|=_BV(IGT)
#define CLR_POW_ON_OFF PORTG&=~(_BV(POW_ON_OFF))//2576是低电平开启
#define SET_POW_ON_OFF PORTG|=_BV(POW_ON_OFF)
#define ADV_MIN 8000 //5.5V
#define ADV_MAX 30000 //30V
#define ADA_MAX 3000 //3A
#define Communication 10 //10分钟,通讯超时时间
#define clr_key_ddr() DDRA=0
#define set_key() PORTA=0xff
#define in_key() ~PINA
//内部2.56V参考电压,0通道/00 1通道 /01 2通道/02
#define ADC_POW 0x00
#define ADC_BATT_M 0X01 //电瓶电压
//-----------------------------
//以下发送短信用到的宏定义
#define CR UART0_Transmitstr("\r\n") //发送一个回车换行
#define NUL UART0_Transmitstr("\0") //发送一个空格
//**************位标志初始化后=0******************************//
struct data //位定义
{
unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
} volatile bit_flag,bit_var,bit_hardware,bit_Condition;
#define phone_0_ok bit_flag.bit0//有个号码发送成功
#define Receiver_c bit_flag.bit1//接收机
#define Transmitter_c bit_flag.bit2 //发射机
#define Frequency_c bit_flag.bit3 //频率精度
//#define lamp_on_off bit_flag.bit4 //灯开关标记 关灯=0
//#define lamp_on_off_sms bit_flag.bit5 //短信灯光状态标记
#define time30s bit_flag.bit6 //10s到=1
#define request_msm_to bit_flag.bit7 //请求发送短信=1
//**************位标志初始化后=0******************************//
#define time100ms bit_var.bit0 //100ms 到=1
#define time500ms bit_var.bit1 //500ms 到=1
#define time1s bit_var.bit2 //1s 到=1
#define time3s bit_var.bit3 //3s 到=1
#define time1m bit_var.bit4 //1m 到=1
#define time1h bit_var.bit5 //1h 到=1
#define exce bit_var.bit6 //异常报告禁止=1
#define signal_c bit_var.bit7 //GSM进网=1
//**************位标志初始化后=0******************************//
#define WDT_C bit_hardware.bit0 //看门狗复位标志
#define set_pown bit_hardware.bit1 //工作电源标记 电源1=0
#define adv_c bit_hardware.bit2 //st7920 失败=1
#define addr_e bit_hardware.bit3 //短信中心OK=1
#define read_sms bit_hardware.bit4 //有短信需读=1
#define ok bit_hardware.bit5 //OK=1
#define qu bit_hardware.bit6 //OK=1
#define error bit_hardware.bit7 //err0r=1
//**************位标志初始化后=0******************************//
//灯器状态变化搜集有变化=1
#define power_ls bit_Condition.bit0 //电源的稳定状态
#define timeout bit_Condition.bit1 //短信延时溢出
//#define led_on_off bit_Condition.bit4 //led亮灭标记亮=1
//#define ada_adv_en bit_Condition.bit5 //允许电流电压测试
//#define pps_t bit_Condition.bit6 //有同步脉冲=1
#define sms_t bit_Condition.bit7 //正在发送短信=1
//****************************************************************//
//main
#ifdef main_c
unsigned char CPU_STATUS;//复位检测
uchar avalvoid[16] __attribute__((section(".eeprom")))={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //这个没用到
uchar E_Communication_time __attribute__((section(".eeprom")))=6; //通讯间隔
volatile uint adv_m=0; //电压
volatile uint batt_m; //6V电瓶电压
volatile uint ada_m=0; //电流
volatile uint adv_m_sms=0; //电压_短信
volatile uint ada_m_sms=0; //电流_短信
volatile uchar temper=0; //温度
volatile uchar Communication_time=6;//通讯间隔(小时)
//全局变量声明
unsigned char DS1302_EXIST;//ds1302初始化成功=1
unsigned char INITDATE[8];
unsigned char CURDATE[7];
unsigned char sCURDATE[]="20xx年xx月xx日xx时xx分xx秒";
#else
extern uchar E_Communication_time __attribute__((section(".eeprom"))); //光差
extern volatile uint adv_m;
extern volatile uint batt_m; //电瓶电压
extern volatile uint ada_m;
extern volatile uint adv_m_sms; //电压_短信
extern volatile uint ada_m_sms; //电流_短信
extern volatile uchar temper; //温度
extern volatile uchar Communication_time;//通讯间隔(小时)
//******************
extern unsigned char DS1302_EXIST;
extern unsigned char INITDATE[8];
extern unsigned char CURDATE[7];
extern unsigned char sCURDATE[];
#endif
//**************************************************************************
//ADC
#ifdef adc_c
uint AdcConvert(uchar adc_input);
#else
extern uint AdcConvert(uchar adc_input);
#endif
//**************************************************************************
//DdlayMs
#ifdef DelayMs_c
void DelayMs(uint s);
#else
extern void DelayMs(uint s);
#endif
//***************************************************************************
//状态控制
#ifdef control_c
void Condition_control(void); //灯器状态控制
void Charge_Control(void);
#else
extern void Condition_control(void); //灯器状态控制
extern void Charge_Control(void);
#endif
//EEPROM
#ifdef eeprom_c
void eeprom_read(void);
void eeprom_latitude_longitude_rest(void);
#else
extern void eeprom_read(void);
extern void eeprom_latitude_longitude_rest(void);
#endif
//******************************************************************************
//SMS
#ifdef sms_c
uchar E_ID[7] __attribute__((section(".eeprom")))={"0801100"}; //ID 0801
uchar E_name[12] __attribute__((section(".eeprom")))={"5E947B545668"}; //应答器
uchar E_mm[16] __attribute__((section(".eeprom")))={"0030003000300030"}; //密码0000
uchar E_addr[16] __attribute__((section(".eeprom")))={"8613800535500###"}; //短信中心
uchar E_phone[6][16] __attribute__((section(".eeprom")))={
{"13792509788#####"},//0
{"################"},//1
{"################"},//2
{"################"},//3
{"################"},//4
{"13562503079#####"},//5A
};
//********************************************************************************
uchar msg_buf[382];//发送短信的用户字节
void gsmEncodePdu( uchar* pDst,uchar *phone,uchar *msg);
uchar sms_event[5]={0,0,0,0,0}; //发送短信事件记录
uchar sms_event_counts=0; //短信事件计数器
void sms_counts(uchar n); //发送短信事件记录缓冲
volatile uchar rx_sms_event[5]={0,0,0,0,0}; //接收短信事件记录
volatile uchar rx_event=0; //接收事件计数器
void rx_sms_counts(uchar n); //接收短信事件记录缓冲
void sms_event_circulation (void); //短信事件循环
void sms_to(uchar *phone); //发送短信
uint string_match(uint r,uchar *pSrc,uchar y, uchar *pDst);//字符串匹配
void read_inbuf(void); //串口接收处理
uchar AT(uchar *PSrc,uchar* pDst,uchar i );
uchar gsmString2Bytes(uchar* pSrc, uchar* pDst, uchar nSrcLength);
void tc35_count (void);
void write_addr(void);
volatile uchar sms_to_event=0; //正在发送的事件寄存器的位置
volatile uchar phone_n; //正在发送的电话号码位0-9
void phone_circulation(void);//号码循环
uchar Reply=0;//短信应答代码
#else
extern uchar *inlast; //最后接收到接收缓冲区的字节位置
extern uchar E_ID[14] __attribute__((section(".eeprom"))); //ID
extern uchar E_sbm[8] __attribute__((section(".eeprom"))); //识别码
extern uchar E_name[6] __attribute__((section(".eeprom"))); //灯塔名称
extern uchar E_mm[8] __attribute__((section(".eeprom"))); //密码
extern uchar E_addr[16] __attribute__((section(".eeprom"))); //电话x
extern uchar E_phone[10][16] __attribute__((section(".eeprom"))); //电话
extern uchar msg_buf[282];//发送短信的用户字节
extern void gsmEncodePdu( uchar* pDst,uchar *phone,uchar *msg);
extern uchar sms_event[5]; //事件记录
extern uchar sms_event_counts; //短信事件计数器
extern void sms_counts(uchar n); //短信事件记录缓冲
extern void sms_event_circulation (void);//短信事件循环
extern volatile uchar rx_sms_event[5]; //接收短信事件记录
extern volatile uchar rx_event; //接收事件计数器
extern void rx_sms_counts(uchar n); //接收短信事件记录缓冲
extern void sms_to(uchar *phone);
extern uint string_match(uint r,uchar *pSrc,uchar y, uchar *pDst);
extern void read_inbuf(void);
extern uchar AT(uchar *PSrc,uchar* pDst,uchar i );
extern uchar gsmString2Bytes(uchar* pSrc, uchar* pDst, uchar nSrcLength);
extern void tc35_count (void);
extern void write_addr(void);
extern volatile uchar sms_to_event; //正在发送的事件寄存器的位置
extern volatile uchar phone_n; //正在发送的电话号码位0-9
extern uint a_conststutob_stu(const uchar *pSrc, uchar *pDst,uint n);
extern void phone_circulation(void);//号码循环
extern uchar Reply;//短信应答代码
#endif
//短信事件控制
#ifdef msc_event_c
void read_sms_1(void);
void rx_sms_event_control(void);
volatile uchar m_sms=0;//修改了号码n
#else
extern void read_sms_1(void);
extern void rx_sms_event_control(void);
extern volatile uchar m_sms;
#endif
//***************************************************************
//TIME定时器初始化
#ifdef Timer_c
volatile uchar keycode=0;
volatile uchar keycode_temp=0;
volatile uchar time0_10ms=0;//10ms计数器
void timer (void);
void timer1_init(void);
void timer (void);
volatile uchar count_time_out=0; //
volatile uchar time_out_seconds=0;//time_out 计次
volatile uchar count500ms;
volatile uchar count1s;
volatile uchar count50ms=0;
volatile uchar time100ms_n=0;
volatile uchar time500ms_n=0;
volatile uchar time1s_n=0;
volatile uchar count3s=0;
volatile uchar count30s=0;
volatile uchar count1m=0;
volatile uchar count1h=0;//60分=1小时
void bell(void);
void timer0_init(void);
#else
extern volatile uchar keycode;
extern volatile uchar keycode_temp;
extern void timer1_init(void);
extern void timer (void);
extern volatile uchar count_time_out;
extern volatile uchar time_out_seconds;//time_out 计次
extern volatile uchar time100ms_n;
extern volatile uchar time500ms_n;
extern volatile uchar time1s_n;
extern volatile uchar count3s;
extern volatile uchar count30s;
extern volatile uchar count1m;
extern volatile uchar count1h;//1小时
extern volatile uchar time0_10ms;//10ms计数器
extern void bell(void);
extern void timer0_init(void);
#endif
//*************************************************************************
//CRC16
#ifdef crc16_c
uint16_t crc16_update (uint8_t *data, size_t n);
#else
extern uint16_t crc16_update (uint8_t *data, size_t n);
#endif
#ifdef Instruction_c
uchar Work_code='?';//工作编码
uint Six_voltage=0;//6v电压
uint Supply_current=0;//供电电流
uchar Action_cycle=0;//工作周期
uchar Stops_cycle=0;//休止周期
uchar State_health=0;//健康状况
uchar Sensitivity=0;//灵敏度
uchar acquisition_n=0;//应答器无应答计数
void Inquiry_tx(void);
void Data_acquisition(void);
void Communication_tx(void);
#else
extern uchar Work_code;//工作编码
extern uint Six_voltage;//6v电压
extern uint Supply_current;//供电电流
extern uchar Action_cycle;//工作周期
extern uchar Stops_cycle;//休止周期
extern uchar State_health;//健康状况
extern uchar Sensitivity;//灵敏度
extern uchar acquisition_n;//应答器无应答计数
extern void Inquiry_tx(void);//发送遥测指令
extern void Data_acquisition(void);//数据采集
extern void Communication_tx(void);//定时发送监测数据
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -