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

📄 gsm-dtu-gr47avr.c

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 C
📖 第 1 页 / 共 4 页
字号:
						
						time_reg=i2c_Read(0x50);
						now_time[3]=time_reg&0x0f;
						now_time[3]=now_time[3]+0x30;
						now_time[2]=time_reg&0xf0;
						now_time[2]=now_time[2]/16+0x30;
						
						time_reg=i2c_Read(0x40);
						now_time[5]=time_reg&0x0f;
						now_time[5]=now_time[5]+0x30;
						now_time[4]=time_reg&0xf0;
						now_time[4]=now_time[4]/16+0x30;
						
						time_reg=i2c_Read(0x20);
						now_time[7]=time_reg&0x0f;
						now_time[7]=now_time[7]+0x30;
						now_time[6]=time_reg&0xf0;
						now_time[6]=now_time[6]/16+0x30;
						WDR();
						time_reg=i2c_Read(0x10);
						now_time[9]=time_reg&0x0f;
						now_time[9]=now_time[9]+0x30;
						now_time[8]=time_reg&0xf0;
						now_time[8]=now_time[8]/16+0x30;
						
						time_reg=i2c_Read(0x00);
						now_time[11]=time_reg&0x0f;
						now_time[11]=now_time[11]+0x30;
						now_time[10]=time_reg&0xf0;
						now_time[10]=now_time[10]/16+0x30;
					        } 
 //发送AT+CMGS="tx_mobile_num" 回车
 void  send_atcmgs_mobile()
                     {
                     	uchar  i;
                        USART1_Transmit('A');  //0x41  0x54
                        USART1_Transmit('T');
                        USART1_Transmit('+');
                        USART1_Transmit('C'); 
                        USART1_Transmit('M');
                        USART1_Transmit('G');
                        USART1_Transmit('S');
                        USART1_Transmit('=');
                        USART1_Transmit('"');
						//mobile
						WDR();
						for(i=0;i<11;i++)
						 {
						 	
						USART1_Transmit(tx_mobile_num[i]);
						 }
						
						//
						USART1_Transmit('"');
                        USART1_Transmit(0x0d);
                      }
    //发送短信, 具体内容在info_buffer[]中,短信个数在gsm_send_length
 void   send_sms()
 
		                  {
		                     uchar i,j;	
		                     WDR();
		                     j=UDR1;
		                     j=UDR1;
		                   send_atcmgs_mobile();  //先发AT+CMGS= 手机号
		                     do
                                     {
                                     WDR();	
                                     }
                                    while(!(UCSR1A & (1<<RXC1)));
		                   //while(!(UCSR1A & (1<<RXC1))); 
				           j=UDR1;              //等待>
		                 
		                    //发送具体内容
		                   for(i=0;i<gsm_send_length;i++)
		                    {
		                    WDR();
		                    USART1_Transmit(info_buffer[i]);
		                   }
		                  
		                    //ctrl-z : 0x1a
				  USART1_Transmit(0x1A);
				  //应该等待OK,以延时间代替
				  delay_ms(100);
				  
		                }     
		            
		            
   //读出eeprom 模块参数设置内容,从0x05 开始的116字节,//保存在data_buffer[]中,分别保存在相应缓存中                 
void    read_save_model_info() 	
					 	{
					 	 uchar i,j;
					 	j=0x05;
                                                for(i=0;i<116;i++)
                                                  {
                                                 data_buffer[i]=EEPROM_read(j);
                                                  WDR();
 
                                                    j++;
                                                  }
                                                //把设置内容分别归类  
                                                   j=6;
                                                for(i=0;i<33;i++)
                                                  {
                                                  mas_mobile_num[i]=data_buffer[0];
                                                  j++;
                                                  } 
                                                   j=45;
                                                  for(i=0;i<33;i++)
                                                  {
                                                  cen_mobile_num[i]=data_buffer[j];
                                                  j++;
                                                  } 
                                                   j=84;
                                                  for(i=0;i<11;i++)
                                                  {
                                                  me_mobile_num[i]=data_buffer[j];
                                                  j++;
                                                  } 
                                                  
                                                  j=99;
                                                  for(i=0;i<6;i++)
                                                  {
                                                 baut_rate_num[i]=data_buffer[j];
                                                  j++;
                                                  }  
                                                  WDR();
                                                 n_o_e_flag=data_buffer[106];       //N,  O , E 
                                                uart_byte_num=data_buffer[108];    //8,7
                                                uart_stop_num=data_buffer[110];    //1,2
                                                me_now_status=data_buffer[115];   
                                                 }   
//从现场仪表读数据,从now_time_hex[]获得当前时间,取得电池状态,根据data_save_sequence_num保存数据
//data_save_sequence_num=0;     eeprom adress   130
//data_save_sequence_num=1;     eeprom adress   160
//data_save_sequence_num=2;     eeprom adress   190
//data_save_sequence_num=3;     eeprom adress   220

//2006-08-24  修改为根据当前序号,取出地址,进行保存。
void     meter_data_get_save()
   {
           	              uchar i,j;
                              if(  (now_time_hex[5]==0x04)||(now_time_hex[5]==0x05)||(now_time_hex[5]==0x06) )
                                {
                                PORTB |=(1<< r232_onoff);           //使能UART0     
						
						
            //读出仪表数据,在 meter_rx_a_buffer1, meter_rx_a_buffer2, meter_rx_a_buffer3
          // if(PINB&(1<<7))  //高
	   //   {//A类仪表
						//清空
						delay_ms(1000);
						info_meter_rx_flag=0;
						 //发指令
						USART0_Transmit(0xFA);
						USART0_Transmit(0x49);
						USART0_Transmit(0x01);
						USART0_Transmit(0xA1);
						USART0_Transmit(0xA7);
						//等待1S
						delay_ms(2000);
						
						USART0_Transmit(0xFA);
						USART0_Transmit(0x49);
						USART0_Transmit(0x01);
						USART0_Transmit(0xA1);
						USART0_Transmit(0xA7);
						//meter_rx_a_buffer1[7]
						//meter_rx_a_buffer2[7]
						//meter_rx_a_buffer3[7]
						//接收第一个数据参量
						//info_meter_rx_flag
						////等待FA,49
						info_lenght=0x00;
						info_meter_rx_flag=0;
						for(delay_num=0;delay_num<65530;delay_num++)
						  {
						   if(UCSR0A&(1<<RXC0))
                                                     {
                                                     info_buffer[0]=UDR0;
                                                     
		                                     delay_num=65300;
		                                     if(info_buffer[0]==0xFA) 
													 
		                                      {
		                                      delay_num=65532;
		                                     
		                                      info_meter_rx_flag=1;   //表示第一次FA接收成功
		                                      
		                                      }
                                                     } 
                                                   else
                                                     {
                                                      WDR();
       	                                              delay_us(50);
                                                     }   
						  }
						  ///
						if(info_meter_rx_flag==1)   //有第一次FA
						 {
						 info_lenght=0x01;
						 info_meter_rx_flag=0;
						 for(delay_num=0;delay_num<65530;delay_num++)
						  {
						   if(UCSR0A&(1<<RXC0))
                                                     {
                                                     info_buffer[0]=UDR0;
                                                     
		                                     delay_num=65300;
		                                     if(info_buffer[0]==0x49) 
													 
		                                      {
		                                      delay_num=65532;
		                                     
		                                      info_meter_rx_flag=1;   //表示第一次FA,49接收成功
		                                      
		                                      }
                                                     } 
                                                   else
                                                     {
                                                      WDR();
       	                                              delay_us(50);
                                                     }   
						 }
						}
						//////
						if(info_meter_rx_flag==1)   //有第一次FA
						 {
						info_lenght=0x02;
						//for(i=0;i<250;i++)
						for(delay_num=0;delay_num<65530;delay_num++)
						  {
						   if(UCSR0A&(1<<RXC0))
                                                     {
                                                     info_buffer[info_lenght]=UDR0;
                                                     info_lenght++;
		                                     delay_num=65300;
		                                     if(info_lenght>8)
		                                      {
		                                      delay_num=65532;
		                                      meter_rx_a_buffer1[0]=info_buffer[2];
		                                      meter_rx_a_buffer1[1]=info_buffer[3];
		                                      meter_rx_a_buffer1[2]=info_buffer[4];
		                                      meter_rx_a_buffer1[3]=info_buffer[5];
		                                      meter_rx_a_buffer1[4]=0;
		                                       meter_rx_a_buffer1[5]=0;
		                                        meter_rx_a_buffer1[6]=0;
		                                      info_meter_rx_flag=1;   //表示第一次数据接收成功
		                                      
		                                      }
                                                     } 
                                                   else
                                                     {
                                                      WDR();
       	                                              delay_us(50);
                                                     }   
						  }
						}////表示有第一次FA,接收数据都完毕
						//接收第二个参量
						delay_ms(2000);
						
						info_meter_rx_flag=0;
						USART0_Transmit(0xFA);
						USART0_Transmit(0x49);
						USART0_Transmit(0x04);
						USART0_Transmit(0xA2);
						USART0_Transmit(0x67);  
						
						////等待第二次FA
						info_lenght=0x00;
						info_meter_rx_flag=0;
						for(delay_num=0;delay_num<65530;delay_num++)
						  {
						   if(UCSR0A&(1<<RXC0))
                                                     {
                                                     info_buffer[0]=UDR0;
                                                     
		                                     delay_num=65300;
		                                     if(info_buffer[0]==0xFA) 
													 
		                                      {
		                                      delay_num=65532;
		                                     
		                                      info_meter_rx_flag=1;   //表示第二次FA接收成功
		                                      
		                                      }
                                                     } 
                                                   else
                                                     {
                                                      WDR();
       	                                              delay_us(50);
                                                     }   
						  }
						  //
						if(info_meter_rx_flag==1)   //有第二次FA
						 {
						 info_lenght=0x01;
						 info_meter_rx_flag=0;
						 for(delay_num=0;delay_num<65530;delay_num++)
						  {
						   if(UCSR0A&(1<<RXC0))
                                                     {
                                                     info_buffer[0]=UDR0;
                                                     
		                                     delay_num=65300;
		                                     if(info_buffer[0]==0x49) 
													 
		                                      {
		                                      delay_num=65532;
		                                     
		                                      info_meter_rx_flag=1;   //表示第二次FA,49接收成功
		                                      
		                                      }
                                                     } 
                                                   else
                                                     {
                                                      WDR();
       	                                              delay_us(50);
                                                     }   
						 }
						 }
						//////
						if(info_meter_rx_flag==1)   //有第二次FA
						 {
						info_lenght=0x02;
						
						//for(i=0;i<250;i++)
						for(delay_num=0;delay_num<65530;delay_num++)
						  {
						   if(UCSR0A&(1<<RXC0))
                                                     {
                                                     info_buffer[info_lenght]=UDR0;
                                                     info_lenght++;
		                                     delay_num=65300;
		                                     if(info_lenght>8)
		                                      {
		                                      delay_num=65532;
		                                      meter_rx_a_buffer2[0]=info_buffer[2];
		                                      meter_rx_a_buffer2[1]=info_buffer[3];
		                                      meter_rx_a_buffer2[2]=info_buffer[4];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -