?? 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 + -