📄 gsmcs.c
字号:
para_temp[j++]='s';para_temp[j++]='t';
para_temp[j++]='e';para_temp[j++]='m';
para_temp[j++]='O';para_temp[j++]='K';
para_temp[j++]=0x1a;para_temp[j++]=0x0d;
para_temp[j++]=0x00;para_temp[j]=0x00;
Send_AT_Command(CMGS_MUB);
break;
case smss_para: //发送中文
//0011000D91683118180295F20008A70A8F66670953719669FF01
Send_AT_Command(SMS_CMGF);
TMP_BUF=0;
para_temp[TMP_BUF++]='2'; //短信号码长度,如果每加一个中文,长度加2
para_temp[TMP_BUF++]='5';
para_temp[TMP_BUF++]=0x0d;
para_temp[TMP_BUF++]=0x00;
para_temp[TMP_BUF++]=0x00;
Send_AT_Command(SMS_CMGS);
TMP_BUF=0;
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='D';
para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='8';
//3118180295F2
j=0; //发送对方号码
do{ //动态电话号码
para_temp[TMP_BUF++]=TEL_temp[j+1];
para_temp[TMP_BUF++]=TEL_temp[j];
j=j+2;
if(TEL_temp[j+1]==0x0d){
para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]=TEL_temp[j];
break;
}
}while(j<=18);
//短信格式设备
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='8';
para_temp[TMP_BUF++]='A';para_temp[TMP_BUF++]='0';
//短信长度、 5个字,10个英文
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='A';
//短信内容
//53D1 9001 6210 529F FF01 发送成功
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='3';para_temp[TMP_BUF++]='D';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='2';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='2';para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
//短信结束符
para_temp[TMP_BUF++]=0X1A;para_temp[TMP_BUF++]=0X0D;
para_temp[TMP_BUF++]=0X00;
Send_AT_Command(CMGS_MUB);
break;
//======================发送收到设备开启指令================================================
default:
//system_server=SYS_SMSR;
break;
}
system_server=SYS_SMSR;
receive_count=0;
AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
send_count=0xff;timer_S_cnt=0;
while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)){
if(strsearch("+CMGS:")) break;
else if(txd_rxd_bit) break;
// watch_dog_clear;
}
para_temp[0]=(num_tmp1/10)+0x30;
para_temp[1]=(num_tmp1%10)+0x30;
para_temp[2]=0x0d;
para_temp[3]=0x00;
Send_AT_Command(SMS_CMGD);
timer_S_cnt=0;
// while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
Send_AT_Command(SIM_ID);
// IO_OUT=1;
for(i=0;i<=MAX_TM-2;i++){
uart_buff[i]=0;
}
}
void Initialize_Model(void){ //初始化 PIN检测
uchar i;
IO_IGT=0;
for(i=0;i<12;i++){//进行初始化,并显示
Send_AT_Command(TC35_INIT);
if(uart_buff[1]==0x0d&&uart_buff[0]==0x30){
chinit=1;
break;
}
if((i%4)==0){
IO_IGT=1;
}
else if((i%2)==0){
IO_IGT=0;
}
timer_S_cnt=0;
// while(timer_S_cnt<5&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
}
if(i>=11){
chinit=0;
goto at_eer;
}
for(i=0;i<12;i++){
if(Send_AT_Command(CHECK_PIN)){//如有收到回应进行分析收到的信息,
uart_buff[receive_count]=0;
if(strsearch("READY")!=0)
{chping=1;
break;}
}
timer_S_cnt=0;
// while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
//LED_INT=~LED_INT;
}
if(i>=11){
chping=0;
at_eer:
Send_AT_Command(RESET_TC35);
// SendData(0xf4);
timer_S_cnt=0;
//while(timer_S_cnt<2) watch_dog_clear;
Send_AT_Command(SMSS_ID);
// timer_S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
timer_S_cnt=0;
//while(timer_S_cnt<10) watch_dog_clear;
}
Send_AT_Command(SIM_ID);
Send_AT_Command(AT_IPR);
Send_AT_Command(REQUEST_MOD);
// if(strsearch("TC35\x0d\x0a")==0){
// Send_AT_Command(SMSS_ID); TC35_bit=0;
// }
// else TC35_bit=1;
timer_S_cnt=0;
// while(timer_S_cnt<8) watch_dog_clear;
}
//======================================================================
//================进行SIM卡的电话本读======================================================
//======================================================================
uchar PHONE_RD( ){ //read_tmp=0x30+i; 要读的电话号码
uchar j;
Send_AT_Command(PHONE_READ);
send_count=0;
timer_S_cnt=0;
// while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
if(j=strsearch("+CPBR:")){ //+CPBW: 1,"13818120592",129,"chia"
j=j+9;
do{
para_temp[TMP_BUF++]= uart_buff[j++];
if( uart_buff[j]=='"'){ //para_temp[t++]=';';para_temp[t++]=0x0d;para_temp[t++]=0x00;
return(TMP_BUF);
}
}while(j<=24);
}
else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34){
return(FALSE);
}
else return(FALSE);
}
void rdnumber(uchar u){ // 发短中文短信前设置。 P0.2灯闪,同时蜂鸣器长叫一声
read_tmp=0x30+u;
TMP_BUF=0; //读电话本1
PHONE_RD();
para_temp[TMP_BUF++]=0x0d;
para_temp[TMP_BUF++]=0x00;
TMP_BUF=0; // 将读出的电话号码转存起来,做发送对方号码
do{
TEL_temp[TMP_BUF]=para_temp[TMP_BUF]; TMP_BUF++;
}while( TMP_BUF<=18);
sms_tmp=smss_break;
send_sms();
}
void start(void)
{
if(chinit==1) LED1=0; //初始化成功
else LED2=0;
if(chping==1) LED3=0; //SIM卡初始化成功
else LED4=0;
}
/***********主程序***************/
void main (void)
{
system_server=SYS_SMSR;
LED1=1;LED2=1;LED3=1;LED4=1;
Sys_Init();
Initialize_Model();
start();
while(1)
{
if(system_server==SYS_SMSR){ //读1-20条短信
Send_AT_Command(SIM_ID);
Send_AT_Command(SMSS_ID);
read_sms(); //timer_S_cnt=0;
}
if(system_server==SYS_ALARM){
sms_tmp=smss_para;
system_server=SYS_SMSS;
}
else if(system_server==SYS_TEL){
sms_tmp=smss_tel;
system_server=SYS_SMSS;
}
else if(system_server==SYS_NUMSAVE){
sms_tmp=smss_save;
system_server=SYS_SMSS;
}
if(system_server==SYS_SMSS){ //发送信息
system_server=SYS_SMSR;
send_sms();
}
}
}
void Int_Timer0(void) interrupt 1 using 3{
TH0 = 0xB8;
TL0 = 0x00; //20ms的时钟基准
//watch_dog_clear;************************************************
timer_1S_cnt++;
timer_tmp++;
if(timer_1S_cnt==50){ //20×50=1000MS =1S
timer_10S_cnt++;
timer_1S_cnt=0;
timer_S_cnt++;
// LED=~LED;
} //1秒=1000毫秒
if(timer_10S_cnt==10){ //10S
timer_10S_cnt=0;
timercount++;
}
}
/*****************************************************************************
* TC35 的命令列表,与中断服务程序 *
*****************************************************************************/
void Int_Uart(void) interrupt 4 using 3{ //串口的中断程序
if(TI){//数据模式与命令方式共用
// LED2=0;
TI=0;
if(send_count>=MAX_TM-5) send_count=0;
if((uart_buff[send_count]==0)){ //应该检测命令结束代码,检测到时结束通信
at_send_bit=1;
send_count=0xff;
for(F=0;F<20;F++){
uart_buff[F]=0;
}
//清除接收缓冲区
receive_count=0;
return;
}
else{
if(uart_buff[send_count]<=0xB0) //0xff
SBUF=uart_buff[send_count++];
if((uart_buff[send_count]==0)){ //应该检测命令结束代码,检测到时结束通信
at_send_bit=1;
send_count=0xff;
for(F=0;F<20;F++){
uart_buff[F]=0;
} //清除接收缓冲区
receive_count=0; return;
}
}
receive_count=0;
}
if(RI){ //命令方式
// LED1=0;
RI=0;
if(at_send_bit==0) return;
if((send_count==0xff)&&(receive_count<MAX_TM-5)){//没有发送时才能进行接收 所有的命令返回都是处于 0x0A [Result] 0x0D 之间,其他命令,不会出现这种情况
uart_buff[receive_count++]=SBUF;
}
else{//ACC=SBUF;
return;
}
if(receive_count>=MAX_TM-5){
if(AT_Command_Type==SMS_CMGR)
receive_count=0;
else if(AT_Command_Type==SMONC_ID){
AT_Command_Status=COMMAND_OK;
return;
}
else{
receive_count=0;
AT_Command_Status=COMMAND_OK;
return;
}
receive_count=0;
}
if((receive_count==2)&&(uart_buff[1]==0x0d))//没有包含为其他信息的命令返回
{ //接收到一个命令回应,可能为,0-OK 1-CONNECT 2-RING 3-NO CARRIER 4-ERROR
//只返回OK
uart_buff[receive_count]=0;
if(uart_buff[0]=='0'){
AT_Command_Status=COMMAND_OK; //txd_rxd_bit=1;
}
if(uart_buff[0]=='2'){
AT_Command_Status=COMMAND_OK; //txd_rxd_bit=1;
ES=1; //设置发送指针
receive_count=0;
send_count=0xff;
}
else if(uart_buff[0]=='4'||uart_buff[0]=='3'){
AT_Command_Status=COMMAND_ERROR;
}
else AT_Command_Status=COMMAND_UNKNOW;
txd_rxd_bit=1;
uart_buff[receive_count]=0;
return;
}
else if((uart_buff[receive_count-1]==0x0d)
&&(receive_count>=3)
&&(uart_buff[receive_count-3]==0x0a)
&&((uart_buff[receive_count-2]=='0'))){ ///可能是包含为其他信息的命令返回
uart_buff[receive_count]=0;//RECEIV OK ANSWER, with some message
AT_Command_Status=COMMAND_OK;
txd_rxd_bit=1;
}
else if((AT_Command_Type==SMS_CMGS||AT_Command_Type==AT_COMMAND)&&uart_buff[2]=='>'){
AT_Command_Status=COMMAND_OK;
txd_rxd_bit=1;
return;
}
}//End of if(RI)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -