📄 cheshi.#3
字号:
system_tep=1;
system_server=SYS_START; return;
}
//--------------------//参数查询命令--为三个语音\三个短信\二个定时时长---------------------------------------------
else if(i=strsearch("CXK")) //参数查询命令
{
//发短信 CXK 然后机器就会给法定号码的手机回一条短信,主要是检查 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() //发送短信
{ 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;
//根据不同的方式发送短消息内容
switch(sms_tmp)
{
//======================发送收到设备开启指令================================================
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; //设置接收成功标志
receive_count=0;
timer_S_cnt=0;while(timer_S_cnt<80&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
break;
//==============发送设备参数查询返回值=========================================
case smss_para: // 发短信 CXK 然后机器就会给法定号码的手机回一条短信,主要是检查 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; //设置接收成功标志
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; //设置接收成功标志
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;
}
//======================================================================
//================进行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);
}
//======================================================================
//========================进行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; //设置发送指针
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);
}
}
//=============================================================================
// 话机被叫程序
//=============================================================================
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
// 数字呼入
// +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; //读来电显示出错时设为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];//读出呼叫类型
//只要能读出呼叫类型就认为正确
// 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++)
{//进行初始化,并显示
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))
{//如有收到回应进行分析收到的信息,
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)//话机启动的初始化程序,包含键盘与定时器,串口等
{
//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进行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;
//ACC6=0;
//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;//设置T0为最高优先级中断
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 准备启动WDT
WDL = 0x80; //设置8 位倒计时器初值
WDCON = ACC; //启动WDT
WFEED1 = 0xA5; //清零第一部分
WFEED2 = 0x5A; //清零第二部分
// P4=0xff;
receive_count=0;
send_count=0xff; //表示禁止发送,可以接收
// 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)//话机启动的初始化程序,包含键盘与定时器,串口等
{
//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 (记数频率)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -