📄 gsm-dtu-gr47avr.c
字号:
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 + -