📄 main.c
字号:
#define main_c
#include "main.h"
uchar kk[4]={0xff,0x03,0x40,0x21};
//***********************
void hex_bcd_32(unsigned long temp)
{
uchar buf[]="00000000";
uchar a;
for(a=8;a>0;a--) //取出每位中的数据
{
buf[a-1]=temp%10+48;
temp/=10;
}
UART0_Transmitstr(buf);
CR;
}
void hex_bcd_16(uint temp)
{
uchar buf[]="00000";
uchar a;
for(a=5;a>0;a--) //取出每位中的数据
{
buf[a-1]=temp%10+48;
temp/=10;
}
UART0_Transmitstr(buf);
CR;
}
//*******************工程进度列表***************************
//从应答器导入工程文件,2008/02/03
//2008/02/03硬件配置完成
//**********************************************************
//端口初始化
void port_init(void)
{
PORTA = 0XFF;//上拉
DDRA = 0;
PORTB=0; //DS1302带内部下拉电阻
DDRB =0;//输出;
PORTC =0;//免装拨码开关,具有GPS功能*/;//上拉
DDRC =0;//免装拨码开关,具有GPS功能
//PORTC |= _BV(SUN)|_BV(ACC)|_BV(RTC)|_BV(TEST)|_BV(GPS);////上拉 正常
//DDRC =0;//正常 (常用于HD-200B)
PORTD |=_BV(uart1_RX);
DDRD |=_BV(uart1_TX);
PORTE |=_BV(GSM_RX);
DDRE |= _BV(GSM_TX)|_BV(IGT);
PORTF =0;
DDRF = 0;
PORTG |=_BV(POW_ON_OFF);
DDRG =0;
}
//变量初始化
void Variable_init(void)
{
time100ms=0; //100ms 到=1
time500ms=0; //500ms 到=1
time1s=0; //1s 到=1
time3s=0; //3s 到=1
time30s=0; //30s 到=1
exce=0; //异常报告禁止=1
signal_c=0; //GSM进网=1
adv_c=0; //电压异常 失败=1
addr_e=0; //tc35 失败=1
read_sms=0; //标记有新短信,主动处理一次
sms_t=0; //正在发送短信 0=没有发送
error=0;
ok=0;
qu=0;
request_msm_to=0;
count30s=20;
WDT_C=0;
Receiver_c=0;//接收机
Transmitter_c=0;//发射机
Frequency_c=0;//频率精度
}
//外中断初始化
void int_init(void)
{
}
//系统初始化
void init_devices(void)
{
cli(); //禁止所有中断
MCUCR = 0x00;
MCUCSR |= 0x80; //禁止JTAG
port_init();
timer ();
int_init();
UART0_InitUART(9600); //硬件串口0初始化
UART1_InitUART(9600); //串口1 9600,接收
Variable_init();
sei();//开全局中断
}
//---------------------------------------------------------------------
//主函数
int main(void)
{
wdt_enable(WDTO_2S);//启用看门狗,2S
init_devices();//系统初始化
CPU_STATUS =MCUCSR; //读取MCU控制和状态寄存器
CPU_STATUS&=0x1F;
switch (CPU_STATUS)
{
case (1<<WDRF): //看门狗引起的复位?
WDT_C=1;//标记看门狗复位,在密码发给我
break;
default: //多种复位同时发生?
break;
}
MCUCSR=0x80; //清除标志位
sms_counts(14);//密码qu
sms_counts(8);//上电报告
sms_counts(5);//发送状态报告
clr_ds18b20_dq();
set_ds18b20_dq_ddr();
convert_ds18b20(); //DS18B20初始化
eeprom_read();//调入初始设置
read_temperature(); //读温度
adv_m=27.5*AdcConvert(ADC_POW); //电源电压
Condition_control(); //状态控制
CLR_IGT;//GSM开机
DelayMs(100);
SET_IGT;//拉高
DelayMs(1000);
UART0_Transmitstr("应答器遥测启动");
CR;
DelayMs(500);
while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //清空接收区
while(1)
{
if(time100ms==1)
{
time100ms=0;
wdt_reset();//复位看门狗
}
if(time500ms==1)
{
time500ms=0;
wdt_reset();//复位看门狗
sms_event_circulation (); //监测发送短信
}
if(time1s==1)
{
time1s=0;
wdt_reset();//复位看门狗
Condition_control(); //状态控制
read_sms_1(); //接收解码短信
}
if(time3s==1)
{
time3s=0;
wdt_reset();//复位看门狗
read_inbuf(); //检查新的短信息
//UART0_Transmitstr("温度:");
//hex_bcd1(temper);
//UART0_Transmitstr("电压:");
//hex_bcd1(adv_m);
//Data_acquisition();//应答器数据采集
}
if(time30s==1)
{
time30s=0;
wdt_reset(); //复位看门狗
read_sms=1; //轮寻读取短信
write_addr(); //短信中心 ok
tc35_count (); //TC35初始化
//*******************************************************
//signal_c=1;//测试,不用装卡发短信
// addr_e=1;//测试,不用装卡发短信
//*******************************************************
}
if(time1m==1)
{
time1m=0;
Charge_Control();//充电控制
Data_acquisition();//应答器数据采集
}
if(time1h==1)
{
time1h=0;
Communication_tx();//定时发送监测数据
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -