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

📄 gprs.c

📁 AVR单片机与明基实现GPRS通讯C语言代码
💻 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 + -