📄 gprs.c
字号:
#include <avr/wdt.h>
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <iom64.h>
#include <avr/delay.h>
#include <avr/eeprom.h>
#include <avr/pgmspace.h>
#include "stdio.h"
#include "string.h"
#include "includ.h"
#include "USER_DATA.c"
#include "I2c.C"
#include "gongneng.c"
#include "USER_INT.C"
/////////////////////////////命令回复没有从串口显示////////////////////////
void io_init(void)
{
//端口引脚初始化(方向控制 1:输出)
DDRA=0x01; //0000,0001
// PA0 DIN_7022
// PA1~PA7 A1~A7
DDRB=0xd9; //1101,1001
// PB0 SCLK_7022
// PB1 NC
// PB2 DOUT_7022 // PB3 RESET_7022 // PB4 SSR1 // PB5 PGD // PB6 SSR2 // PB7 CS_7022
DDRC=0xe0; //1110,0000
// PC1~PC4 NC
// PC0 A8 断路报警
// PC5 EN485
// PC6 M22 Power
// PC7 A8 LEd1
DDRD=0x08; //0000,1000
// PD0~PD1 NC
// PD2 RXD1
// PD3 TXD1
// PD4~PD7 NC
DDRE=0xfe; //1111,1110
// PE0 RXD0
// PE1 TXD0
// PE2 LED_CODE & Feed_DOG
// PE3 SCL_24C04
// PE4 SSR3
// PE5 COM1_LED
// PE6 COM2_LED
// PE7 SDA_24C04
DDRF=0x00; //0000,0000
// PF0~PF7 NC
DDRG=0xff;//////////////////////////////////////////hxc
}
void uart0_init(void)
{
UBRR0H=0;
UBRR0L=207;//12
UCSR0A|=0x20;
//9600
//UBRR0L=51;//12
//UCSR0A|=0x22;
//关发送中断//UCSR0B=0xd8 & ~BIT6; //1101,10RT---开启接收发送中断,启动usart功能,8位数据位
UCSR0B=0xd8;
UCSR0C=0x06; //0000,0110---异步,无奇偶校验,1停止位,8数据位
}
void uart1_init(void)
{
UBRR1H=0;
UBRR1L=207;//12
UCSR1A|=0x20;
// UBRR1L=51;//51;
// UCSR1A|=0x22; //0010,0010
UCSR1B=0xd8 & ~BIT6; //1101,10RT---开启接收发送中断,启动usart功能,8位数据位
UCSR1C=0x06; //0000,0110---异步,无奇偶校验,1停止位,8数据位
}
void time1_init(void)
{
//定时器1初始化
TCCR1B=0x01; //0000,0100
TIMSK=0x04; //0000,0100---打开定时器1溢出中断
}
int main( void )
{
unsigned char ctemp[3],i;
cli(); //关闭中断
//int_dog_AVR();
io_init(); //端口初始化
uart0_init(); // UART0 口初始化 9600
uart1_init(); // UART1 口初始化 9600
time1_init(); //定时器 1 初始化
sei(); //开中断////////////////////////////////////////////////////////////////////
Reset_7022();
UART0_output_const(MCU_RESET,sizeof(MCU_RESET)-1);
//UART1_output_const(MCU_RESET,sizeof(MCU_RESET)-1);
feed_dog();//喂硬件看门狗
//write_7022(0xc9,0x0);
// write_7022(0xc3,0x0); //清校表数据
write_7022(0xa9,0x078000); //失压检测
write_7022(0x9b,0x4b3882);//0x494e3b); //A相电压
write_7022(0x9c,0x4b3882);//0x4a3d70);//0x494e3b); //B相电压
write_7022(0x9d,0x4b3882);//0x4a3d70);//0x494e3b); //C相电压
/*
write_7022(0xa6,0x556041);//30:1
write_7022(0xa7,0x556041);//30:1
write_7022(0xa8,0x556041);//30:1
*/
feed_dog();//喂硬件看门狗
write_7022(0xa6,0x39d205);//0x436bfa);//100:1
write_7022(0xa7,0x39d205);//100:1
write_7022(0xa8,0x39d205);//100:1
feed_dog();//喂硬件看门狗
write_7022(0x8c,0xfabaad);//相角
write_7022(0x91,0xf8b8c1);//
write_7022(0x96,0xf8b8c1);//
feed_dog();//喂硬件看门狗
/*
write_7022(0xa6,0xbc6a6);//20:1
write_7022(0xa7,0xbc6a6);//20:1
write_7022(0xa8,0xbc6a6);//20:1*/
write_7022(0xa0,0x6b); //HFconst
I2cInit();
//write_7022(0xc9,0x1);
// eeprom_write_byte(0x40,0xaa);
// UDR0 = eeprom_read_byte(0x40);
RX_485;
M22_PowerOff;
while(cGprs_int_count<8)
{
feed_dog();
Com1();
}
cGprs_int_count = 0;
M22_PowerOn;
while(cGprs_int_count<10)
{
feed_dog();
Com1();
}
cGprs_int_count = 0;
M22_PowerOn;
while(cGprs_int_count<5)
{
feed_dog();
Com1();
}
I2cByteRead(0xa0,0x0,15);
for(i=0;i<15;i++)
{
AT_IP[13+i] = EE_STRING[i];
}
I2cByteRead(0xa0,0x20,4);
for(i=0;i<4;i++)
{
AT_IP[32+i] = EE_STRING[i];
}
I2cByteRead(0xa0,0x30,3);
for(i=0;i<3;i++)
{
ctemp[i] = EE_STRING[i];
}
addr = ctemp[0]-'0';
addr <<= 8;
addr += ctemp[1]-'0';
addr <<= 8;
addr += ctemp[2]-'0';
UART1_output_const(AT_1200,sizeof(AT_1200)-2);
UART0_output_const(AT_1200,sizeof(AT_1200)-2);
cGprs_int_count = 0;
while(1)
{
feed_dog();//喂硬件看门狗
Com1();
Com2();
feed_dog();
read_7022();
feed_dog();
GPRS();
feed_dog();
if(cNO_CARRIER_RESET_COUNT>5)
{
cNO_CARRIER_RESET_COUNT = 0;
while(1); //意外处理
}
if(wme_3min>=Time_3min)
{
wme_3min = 0;
cCom2_Send_data[0] = 0xcc;
cCom2_Send_data[1] = (char)(addr>>16);
cCom2_Send_data[2] = (char)(addr>>8);
cCom2_Send_data[3] = (char)addr;
cCom2_Send_data[4] = 0x08;
cCom2_Send_data[5] = 0x0;
cCom2_Send_data[6] = 0x0;
cCom2_Send_data[7] = 0x0;
cCom2_Send_data[8] = 0xdd;
UART1_output_const(cCom2_Send_data,8);
//UART0_output_const(cCom2_Send_data,8);
}
key();
if(wReset_time>600) //10分钟没有数据重新启动
{
while(1);
}
} return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -