?? cheshi.#3
字號:
system_tep=1;
system_server=SYS_START; return;
}
//--------------------//參數(shù)查詢命令--為三個語音\三個短信\二個定時時長---------------------------------------------
else if(i=strsearch("CXK")) //參數(shù)查詢命令
{
//發(fā)短信 CXK 然后機(jī)器就會給法定號碼的手機(jī)回一條短信,主要是檢查 P2,P3,P4,P5,P6,P7 的口線的電平
system_server=SYS_PARA;
return;
}
else {
DELTER:
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;timer_1S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
for(i=10;i<=90;i++)
{ uart_buff[i]=0;
}
return;
}
if(system_server==SYS_SMSR) return;
do
{
if((uart_buff[0]=='4')&&uart_buff[1]==0x0d){ return;}
if(uart_buff[i]>='0'&&uart_buff[i]<='9')
para_temp[j++]=uart_buff[i++];
else i++;
if((uart_buff[i]==0x0d)||(j>20)) //號碼存儲及分析
{
para_temp[1]=',';
para_temp[j]=0x0d;
//para_temp[j++]=0x0d;
para_temp[j++]=0x00;
Send_AT_Command(PHONE_WRITE);
//send_sms();
//system_server=SYS_SMSR;
break;
// return;
}
} while(1);
return;
}
}
void send_sms() //發(fā)送短信
{ uchar j=1,i=1;
Send_AT_Command(SIM_ID);
timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<8&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
//根據(jù)不同的方式發(fā)送短消息內(nèi)容
switch(sms_tmp)
{
//======================發(fā)送收到設(shè)備開啟指令================================================
case smss_alarm:
//read_tmp=0x31;
//for(read_tmp=0x31;read_tmp<=0x32;read_tmp++)
TMP_BUF=0;
j=PHONE_RD();
para_temp[j++]=0x0d;para_temp[j++]=0x00;
timer_S_cnt=0; while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SMS_CMGS);
TMP_BUF=0;
para_temp[TMP_BUF++]='Q';
para_temp[TMP_BUF++]='J';
para_temp[TMP_BUF++]='Q';
para_temp[TMP_BUF++]='J';
para_temp[TMP_BUF++]='Q';
para_temp[TMP_BUF++]='J';
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x1a;para_temp[TMP_BUF++]=0x0d;para_temp[TMP_BUF++]=0x00;
Send_AT_Command(CMGS_MUB);
at_send_bit=1;
send_count=0xff; //設(shè)置接收成功標(biāo)志
receive_count=0;
timer_S_cnt=0;while(timer_S_cnt<80&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
break;
//==============發(fā)送設(shè)備參數(shù)查詢返回值=========================================
case smss_para: // 發(fā)短信 CXK 然后機(jī)器就會給法定號碼的手機(jī)回一條短信,主要是檢查 P2,P3,P4,P5,P6,P7 的口線的電平。 //read_tmp=0x31; //第一個
read_tmp=0x31;
//for(read_tmp=0x31;read_tmp<=0x32;read_tmp++)
{
TMP_BUF=0;
j=PHONE_RD();
para_temp[j++]=0x0d;para_temp[j++]=0x00;
timer_S_cnt=0; while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SMS_CMGS);
TMP_BUF=0;
para_temp[TMP_BUF++]='P';
para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='2';
para_temp[TMP_BUF++]=0x20;
if(IO_P02)para_temp[TMP_BUF++]=0x31;
else para_temp[TMP_BUF++]=0x30;
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x0a;
para_temp[TMP_BUF++]='P';
para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='3';
para_temp[TMP_BUF++]=0x20;
if(IO_P03)para_temp[TMP_BUF++]=0x31;
else para_temp[TMP_BUF++]=0x30;
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x0a;
para_temp[TMP_BUF++]='P';
para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='4';
para_temp[TMP_BUF++]=0x20;
if(IO_P04)para_temp[TMP_BUF++]=0x31;
else para_temp[TMP_BUF++]=0x30;
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x0a;
para_temp[TMP_BUF++]='P';
para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='5';
para_temp[TMP_BUF++]=0x20;
if(IO_P05)para_temp[TMP_BUF++]=0x31;
else para_temp[TMP_BUF++]=0x30;
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x0a;
para_temp[TMP_BUF++]='P';
para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='6';
para_temp[TMP_BUF++]=0x20;
if(IO_P06)para_temp[TMP_BUF++]=0x31;
else para_temp[TMP_BUF++]=0x30;
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x0a;
para_temp[TMP_BUF++]='P';
para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='7';
para_temp[TMP_BUF++]=0x20;
if(IO_P07)para_temp[TMP_BUF++]=0x31;
else para_temp[TMP_BUF++]=0x30;
para_temp[TMP_BUF++]=0x20;
para_temp[TMP_BUF++]=0x0a;
para_temp[TMP_BUF++]=0x1a;para_temp[TMP_BUF++]=0x0d;para_temp[TMP_BUF++]=0x00;
Send_AT_Command(CMGS_MUB);
at_send_bit=1;
send_count=0xff; //設(shè)置接收成功標(biāo)志
receive_count=0;
timer_S_cnt=0;while(timer_S_cnt<80&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
for(i=10;i<=90;i++)
{ uart_buff[i]=0;
}
break;
default:
//system_server=SYS_SMSR;
break;
}
system_server=SYS_SMSR;
receive_count=0;
AT_Command_Status=COMMAND_WAIT; //設(shè)置接收成功標(biāo)志
send_count=0xff;timer_S_cnt=0;timer_1S_cnt=0;
while(timer_S_cnt<40&&(AT_Command_Status==COMMAND_WAIT))
{ if(strsearch("+CMGS:")) continue;
else if(txd_rxd_bit) continue;
system_sleep;
}
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;timer_1S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
//======================================================================
//================進(jìn)行SIM卡的電話本讀======================================================
//======================================================================
uchar PHONE_RD( ) //read_tmp=0x30+i; 要讀的電話號碼
{ uchar j;
Send_AT_Command(PHONE_READ);
send_count=0;
timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<6&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
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)
{ eer_int++; return(FALSE);
}
else return(FALSE);
}
//======================================================================
//========================進(jìn)行SIM卡中的1到20條短信號碼的讀==============================================
//======================================================================
uchar READ_TEL(uchar r) //讀短信號碼1-20個
{ // uchar r;
para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
para_temp[4]=0x00;para_temp[5]=0x00;para_temp[6]=0x00;para_temp[7]=0x00;
para_temp[8]=0x00;para_temp[9]=0x00;para_temp[10]=0x00;para_temp[11]=0x00;
// timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SMS_CMGR);
timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
send_count=0;
if(strsearch("CMGR: 0,,0")) //+CMGR: 0,,0 沒有短信返回
{ timer_S_cnt=0; while(timer_S_cnt<1) system_sleep;
timercount=0;
ES=1; //設(shè)置發(fā)送指針
receive_count=0;
send_count=0xff;
RI=0 ;
return(FALSE);
}
else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34)
{ eer_int++; return(FALSE);
}
else
{ if(AT_Command_Status==COMMAND_ERROR) return(FALSE);
else return(TRUE);
}
}
//=============================================================================
// 話機(jī)被叫程序
//=============================================================================
uchar Read_Call_ID(void)//讀出來電顯示的號碼
//正確 TRUE
//錯誤 FALSE
//號碼 string_temp[0..16],最多顯示前16位
//呼叫方式 stringt_temp[20]
{
uchar i,j,r;
Send_AT_Command(CALL_ID);//+CLCC:1,1,4,0,0,"02138950224",129
// 語音呼入
// +CLCC:1,1,4,0,0,"02138950223",129
// 數(shù)字呼入
// +CLCC:1,1,4,1,0,"02138950224",129
// 傳真呼入
// +CLCC:1,1,4,2,0,"02138950224",129
// 未知呼叫
// +CLCC:1,1,4,9,0,"02138950224",129
// 主叫:
// +CLCC:1,0,0,0,0,"1001",129
//string_temp[0]=0;
//string_temp[20]=0; //讀來電顯示出錯時設(shè)為1
if(receive_count<15) return(FALSE);
uart_buff[receive_count]=0;
j=0;
// i=strsearch(uart_buff,"CLCC");//查第一個CLCC
i=strsearch("CLCC");//查第一個CLCC
if(i==0)
return(FALSE);
//gotoxy(0,0);
//printlcd(&send_buf[12]);
j=j+i;
//i=strsearch(&uart_buff[j],",");//查第1個','
for(r=0;r<9;r++)
{
if(uart_buff[j]==',') break;
else j=j+1;
}
if(r>=9)
return(FALSE);
j=j+1;
//i=strsearch(&uart_buff[j],",");//查第2個','
for(r=0;r<4;r++)
{
if(uart_buff[j]==',') break;
else j=j+1;
}
if(r>=4)
return(FALSE);
j=j+1;
//檢查是否為來話呼叫
if(uart_buff[j]!='4')
return(FALSE);
//i=strsearch(&uart_buff[j],",");//查第3個','
for(r=0;r<4;r++)
{
if(uart_buff[j]==',') break;
else j=j+1;
}
if(r>=4)
return(FALSE);
j=j+1;
// string_temp[20]=uart_buff[j];//讀出呼叫類型
//只要能讀出呼叫類型就認(rèn)為正確
// i=strsearch(&uart_buff[j],"\x22");//查第一個"號
for(r=0;r<6;r++)
{
if(uart_buff[j]=='\x22') break;
else j=j+1;
}
if(r>=6)
return(FALSE);
j=j+1;
i=j;
// i=strsearch(&uart_buff[j],"\x22");//查第二個"號
for(r=0;r<20;r++)
{
if(uart_buff[j]=='\x22') break;
else j=j+1;
}
if(i<=2) return(FALSE);//沒有來電號碼
for(r=0;r<20;r++)
{
para_temp[r+2]=uart_buff[i++];
if(uart_buff[i]=='\x22')
{ uart_buff[i++]=0x0d;uart_buff[i]=0; break;}
}
return(TRUE);
}
void Initialize_Model(void) //初始化 PIN檢測
{
uchar i;
Sys_Init();
tel1_bit=0;
IO_IGT=0;
sms_tmp_bit=0;
io_p01_on=1;
io_p02_on=1;
io_p03_on=1;
io_p04_on=1;
io_p07_on=1;
io_p01_bit=0;
io_p02_bit =0;
io_p04_bit=0;
io_p07_bit=0;
//INT_TMP2=1;
for(i=0;i<12;i++)
{//進(jìn)行初始化,并顯示
Send_AT_Command(TC35_INIT);
// INT1=~INT1;
if(uart_buff[1]==0x0d&&uart_buff[0]==0x30)
//if(AT_Command_Status==COMMAND_OK)
{ break;}
if((i%4)==0)
{
IO_IGT=1;
}
else if((i%2)==0)
{
IO_IGT=0;
}
// timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
pickup_pin_flag=0;hsk1_pin_flag=0;
//Send_AT_Command(REQUEST_MOD);
}
if(i>=11) goto at_eer;
for(i=0;i<12;i++)
{
if(Send_AT_Command(CHECK_PIN))
{//如有收到回應(yīng)進(jìn)行分析收到的信息,
uart_buff[receive_count]=0;
if(strsearch("READY")!=0)
break;
}
timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
//LED_INT=~LED_INT;
}
if(i>=11)
{
at_eer: Send_AT_Command(RESET_TC35);
timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<2) system_sleep;
// Send_AT_Command(SMSS_ID);
// timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
eer_int=15;
timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<5) system_sleep;
}
//IO_SBT=1;IO_IRP=1; P0=0x87;
// t=7,i=1;
// t&=~(1<<i-1) ;
// i=2;
// t&=~(1<<i-1) ;
// i=3;
// t&=~(1<<i-1) ;
IO_IGT=0;
// Send_AT_Command(SMSS_ID);
//timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
pickup_pin_flag=1;hsk1_pin_flag=1;
// Send_AT_Command(SMS_CNMI);
// timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
Send_AT_Command(SIM_ID);
pickup_pin_flag=0;hsk1_pin_flag=0;
//timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
#if CPU_TYPE2==PLC900
void Sys_Init(void)//話機(jī)啟動的初始化程序,包含鍵盤與定時器,串口等
{
//TH0=(65536-46080)/256;//重新裝入定時25mS的初值到TH0,TL0
//TL0=(65536-46080)%256;
//65536-(11.0592/12)*25MS*1000=To 30732 87f4 3686.5
//65536-(7.373MHz/2)*15MS*1000=To 10239 27FF
//55297.5 10239 27FF
//Baudrate = CCLK [ BRGR1 BRGR0 +16]
//假如取9600 的波特率取7.3728MHz 的晶振得
//9600 = 7372800 [ (BRGR1 BRGR0)+16 ]
//計算出(BRGR1 BRGR0)= 7372800/9600 – 16 = 752 = 0x02F0
//最后得BRGR1 = 0x02 BRGR1= 0xF0
//7372800進(jìn)行8分 921600 1920
//端口初始化
P0M1=0X00;
P0M2=0Xf0;
P1M1=0x18; //0001 1000
P1M2=0xc4; //1100 0100
TH0 = 0x27; //7.373 15MS
TL0 = 0xFF;
DIVM=0x04;
//ACC=TRIM;
//TRIM=ACC;
//TRIM|= 0x40;
//TH0 = 0x87;
// = 0xF4;
SCON=0x50; //使能接收選擇串口模式1
SSTAT=0x00; //選擇獨立的Tx/Rx 中斷
BRGR0=0xF0; //1200 baud @ 7.373MHz
BRGR1=0x02;
BRGCON =0x03; //使能BRG
TAMOD&=(~0x01);//T0M2=0
TMOD &=0xF0; //清低4位
TMOD |= 0x10; //T0GATE 0 T0C/T 0 T0M1 1 T0M0 0
IP0H|=0x10;//設(shè)置T0為最高優(yōu)先級中斷
IP0|=0x10;
ET0= 1;
TR0 = 1;
IE0=0;
IE1=0;
IT0=1;
//ESR=1; //ESR=Enable Serial Recieve
//EST=1; //EST=Enable Serial Transmit
EA=1; //使能中斷
ES=1; //EST=Enable Serial Transmit
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
IO_IGT=0;
ACC = WDCON; //讀取WDT 控制寄存器
ACC = ACC|0x04; //置位ACC.2 準(zhǔn)備啟動WDT
WDL = 0x80; //設(shè)置8 位倒計時器初值
WDCON = ACC; //啟動WDT
WFEED1 = 0xA5; //清零第一部分
WFEED2 = 0x5A; //清零第二部分
// P4=0xff;
receive_count=0;
send_count=0xff; //表示禁止發(fā)送,可以接收
// int_case=0;
hsk1_pin_flag=1; // sync_count=0;
//timer_25ms_flag=0;
// timercount=0;
timer_10S_cnt=0;
timer_1S_cnt=0;
timer_S_cnt=0;
IO_IRP=1;
IO_SBT=0;
eer_int=0;
batt_tmp=1;
// LED_INT=0;
}
#elif CPU_TYPE2==SM5964
void Sys_Init(void)//話機(jī)啟動的初始化程序,包含鍵盤與定時器,串口等
{
//TH0=(65536-46080)/256;//重新裝入定時25mS的初值到TH0,TL0
//TL0=(65536-46080)%256;
//65536-(11.0592/12)*25MS*1000=To
//1ms定時
//11.0592/12 = 0.9216 M (記數(shù)頻率)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -