⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.h

📁 AVR atmega64串口驱动
💻 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 + -