📄 cheshi.#3
字号:
//1ms记数 921.6次
//16位 2^16 - x = 922 x=64614 FC66
//定时器里不断放fc66,不用怀疑51定时器得到的 1ms的精确性吗
TH0 = 0xf6;
TL0 = 0x50;
//TH0 = 0xB1;
//TL0 = 0xE0; //20ms的时钟基准
//串口中断
TI=0;
RI=0;
SCON=0x50; //选用方式1
TMOD=0x20;
TMOD = (TMOD & 0xf0) | 1;//MODE 1
// TH1=0xe8; //波特率为9600
// TL1=0xe8;
TH1=0xfd; //波特率为9600
TL1=0xfd;
PCON=0x00; //倍频0x80
IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
TR1=1; //enable TIMER1
//TF0=0;
//PT0=1; //Set Timer0 interrupt as highest priority level'
// PT0=1; //Set Timer0 interrupt as highest priority level
ES=1;
TR0=1;
ET0=1;
ET1=0;
EA=1;
P0=0xC3;
P1=0xFE;
P2=0xFF;
P3=0xFF;
// P4=0xff;
timer_1S_cnt=0;
receive_count=0;
send_count=0xff; //表示禁止发送,可以接收
// sync_count=0;
// int_case=0;
hsk1_pin_flag=1;
// IO_OUT=1;
//INT_TMP1=0;
//INT_TMP2=0;
}
#elif CPU_TYPE2==C8051F330
void Sys_Init (void)
{
uchar j;
//OSCICN = 0x0C; // configure internal oscillator for
// its maximum frequency}
// RSTSRC = 0x04; // enable missing clock detector
OSCICN |= 0x03; // 配置内部振荡器的的最大频率
RSTSRC = 0x04;
P0SKIP |= 0x01;
P0MDIN |= 0x01;
P0MDOUT |= 0x10;
P1MDOUT |= 0x08;
XBR0 = 0x01; //端口I/O交叉开关寄存器0 TX0, RX0连到端口引脚P0.4和P0.5。
XBR1 = 0x50; // 端口I/O交叉开关寄存器1 使能交叉开关 T0连到端口引脚
SCON0 = 0x10; //(24500000/9600 /2/256)
if (SYSCLK/BAUDRATE/2/256 < 1) {
TH1 = -(SYSCLK/BAUDRATE/2);
CKCON &= ~0x0B;
CKCON |= 0x08;
} else if (SYSCLK/BAUDRATE/2/256 < 4) {
TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON &= ~0x0B;
CKCON |= 0x09;
} else if (SYSCLK/BAUDRATE/2/256 < 12) {
TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x0B;
} else {
TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON &= ~0x0B;
CKCON |= 0x02;
}
j=0x03;
j=~0x0b;
TL1 = TH1;
TMOD &= ~0xf0;
TMOD |= 0x20;
TR1 = 1;
TI0 = 1; // Indicate TX0 ready 24500000 ]
TH0 = 0x9e;
TL0 = 0x38;
//TH0 = 0xB1;
//TL0 = 0xE0; //20ms的时钟基准
//串口中断
TI=0;
RI=0;
SCON0=0x50; //选用方式1
IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
TR1=1; //enable TIMER1 TL0(低8位)和TH0(高8位)
TR0 = 1; ET0 = 1; //t=65536-( 24.5/12)*25*1000 25MS 51041 14495 389e
//--- 定时器2系统时钟中断 //t=65536-(11.0592/12)*25*1000 25MS 23040 42496 A600
timer_1S_cnt=0;
//wait_count_50ms=0;
// wait_count_10s=0;
PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer enable)
}
#endif
uchar Send_AT_Command( uchar type)
//拨号时号码放在phone.number
//其他用para_temp
{
AT_Command_Type=type;
send_count=0;
switch(type)
{
case VOICE_DIAL: //语音拨号
strcpy(uart_buff,"ATD");
strcat(uart_buff,para_temp);
// strcpy(uart_buff,"ATD10086;");
//strcat(uart_buff,";");
break;
case RESET_TC35: //复位TC35
strcpy(uart_buff,"AT+CFUN=1,1");
break;
case CHECK_PIN: //检查当前是否要输入PIN码
strcpy(uart_buff,"AT+CPIN?");
break;
case TC35_INIT: //TC35初始化命令
strcpy(uart_buff,"ATE0V0");
break;
case TC35_SBC: //检查信号
strcpy(uart_buff,"AT^SBC?");
break;
case VOICE_HANDSET: //手柄方式
strcpy(uart_buff,"AT^SNFS=4^SNFO=2,8000,14000,20000,26000,32700,0,512^SNFI=5,10000");
break;
//
// case REQUEST_MOD: //读模块型号
//strcpy(uart_buff,"AT+CGMM");
//strcpy(para_temp,uart_buff);
//strcpy(uart_buff,para_temp);
//uart_buff[55]=0x0d;
// uart_buff[60]=0x00;
// break;
// case SIM_CARD_CHECK://查询是否有插入SIM卡 ^SCKS: 0,1
// strcpy(uart_buff,"ate0v0^scks?");
// break;
case SIM_ID:
strcpy(uart_buff,"AT+CMGF=1+CNMI=1,1");
break;
case SMSS_ID:
strcpy(uart_buff,"ATE0V0^SSMSS=1+CNMI=1,1");
break;
case HOOKOFF: //挂机,停止通话
strcpy(uart_buff,"AT+CHUP");
break;
//case SMS_CNMI: //SMS 接收方式,
// strcpy(uart_buff,"AT+CNMI=1,1");
// break;
// case TC35_VERSION: //读取TC35的版本号
// strcpy(uart_buff,"AT+GMR");
// break;
case PHONE_WRITE: //存电话号码
strcpy(uart_buff,"AT+CPBW=");
strcat(uart_buff,para_temp);
break;
// case PHONE_RC_CHECK: //已接电话
// strcpy(uart_buff,"AT+CPBS=\x22RC\x22+CPBS?");
// break;
case PHONE_SET:
strcpy(uart_buff,"AT+CPBW=");
strcat(uart_buff,para_temp);
break;
// case PHONE_RC_CHECK: //已接电话
// strcpy(uart_buff,"AT+CPBS=\x22RC\x22+CPBS?");
// break;
case CALL_ID: //读来电显示
strcpy(uart_buff,"AT+CLCC");
break;
case PHONE_READ: //读电话本
strcpy(uart_buff,"AT+CPBR=");
strcat(uart_buff,&read_tmp);
uart_buff[9]=0x0d; uart_buff[10]=0x0a;
uart_buff[11]=0x00; uart_buff[12]=0x00;
break;
case SMS_CMGR: //读一个短信
strcpy(uart_buff,"AT+CMGR=");
strcat(uart_buff,para_temp);
break;
case SMS_CMGS: //写一个短信
strcpy(uart_buff,"AT+CMGS=");
strcat(uart_buff,para_temp);
break;
case SMS_CMGD: //删除一个短信
strcpy(uart_buff,"AT+CMGD=");
strcat(uart_buff,para_temp);
break;
case CMGS_MUB: //发报警短信内容
strcpy(uart_buff,para_temp);
break;
case PICK_UP: //摘机
strcpy(uart_buff,"ATA");
case AT_COMMAND:
break;
default:
receive_count=0;
return(TRUE);
}
ES=1;
strcat(uart_buff,"\x0d\x00");//在命令后加入CR
send_count=0; //设置发送指针
receive_count=0;
AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
timer_1S_cnt=0; timer_S_cnt=0;
txd_rxd_bit=0;
at_send_bit=0;
TI=1; //开始发送数据
RI=0; //清除接收标志
if(type==AT_COMMAND)
{
return(TRUE);
}
else if (type==TC35_INIT )
{ while (timer_S_cnt<20)
{
if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
else if((type==SMS_CMGR))
{
while (timer_S_cnt<25)
{
if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
else
{
while (timer_S_cnt<20)
{
system_sleep;
if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
eer_int++;
return(FALSE);
}
void tel_diat() //报警时拨打前三个电话,时间设为40秒,
{ uchar j,t;
timer_S_cnt=0;timer_1S_cnt=0;
while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) ;
Send_AT_Command(VOICE_HANDSET );
timer_S_cnt=0;timer_1S_cnt=0;
while(timer_S_cnt<2);
io_p02_on=1;
t=0; //为没有打通电话时做临时存储 0000 0 000 0000 0111,
do
{
TMP_BUF=0;
read_tmp=0x31;
j=PHONE_RD(); //读电话号码
if(j)
{ para_temp[j++]=';';para_temp[j++]=0x0d;para_temp[j++]=0x00;
if(!Send_AT_Command(VOICE_DIAL));
{ ES=1; //设置发送指针
receive_count=0;
send_count=0xff;
RI=0 ;
//AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
timercount=0;
while((timercount<40)&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
}
if((uart_buff[0]=='0')&&uart_buff[1]==0x0d) //拨号成功
{ //加语音发送设置--------------------------
// IO_SBT=1;IO_IRP=0; P0=0x87;
ES=1; //设置发送指针
receive_count=0;
send_count=0xff;
uart_buff[0]=0;
RI=0 ;
AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
timercount=0;
while(timercount<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
// t&=~(1<<ii-1) ; // 0110 & 1101
Send_AT_Command(HOOKOFF);
while(timercount<5) system_sleep;
return;
}
else
{
}
Send_AT_Command(HOOKOFF);
while(timercount<5) system_sleep;
// else continue; //拨号失败 再拨下一个电话
}
t++;
if(io_p02_on==0) return;
}while(t<50);
}
void tel_diat2() //报警时拨打前2个电话,时间设为40秒,
{ uchar ii,j,t;
timer_S_cnt=0;timer_1S_cnt=0;
while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) ;
Send_AT_Command(VOICE_HANDSET );
timer_S_cnt=0;timer_1S_cnt=0;
while(timer_S_cnt<2);
ii=0;
t=3; //为没有打通电话时做临时存储 0000 0 000 0000 0111,
do
{
ii=ii+1;
if(ii>=3) ii=0;
TMP_BUF=0;
if( (t>>ii-1)&0x01!=0)
{
read_tmp=0x30+ii; }
else
{ //ii=ii+1;
continue; }
j=PHONE_RD(); //读电话号码
if(j)
{ para_temp[j++]=';';para_temp[j++]=0x0d;para_temp[j++]=0x00;
if(!Send_AT_Command(VOICE_DIAL));
{ ES=1; //设置发送指针
receive_count=0;
send_count=0xff;
RI=0 ;
//AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
timercount=0;
while(timercount<70&&(AT_Command_Status==COMMAND_WAIT)) ;
}
if((uart_buff[0]=='0')&&uart_buff[1]==0x0d) //拨号成功
{ //加语音发送设置--------------------------
// IO_SBT=1;IO_IRP=0; P0=0x87;
ES=1; //设置发送指针
receive_count=0;
send_count=0xff;
uart_buff[0]=0;
RI=0 ;
AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
timercount=0;
while(timercount<40&&(AT_Command_Status==COMMAND_WAIT))
system_sleep;
t&=~(1<<ii-1) ; // 0110 & 1101
}
else
{ sms_tmp= smss_alarm;
read_tmp=0x30+ii;
send_sms();
timercount=0;
while(timercount<3&&(AT_Command_Status==COMMAND_WAIT)) ;
}
Send_AT_Command(HOOKOFF);
timercount=0;
while(timercount<10&&(AT_Command_Status==COMMAND_WAIT)) ;
Send_AT_Command(HOOKOFF);
}
else t=0;
}while(t!=0);
}
void main(void)
{
Initialize_Model();
pickup_pin_flag=1;hsk1_pin_flag=1;
// if(system_server==SYS_RING) system_server=SYS_RING;
// else
system_server=SYS_SMSR;
//system_server=SYS_START;
//system_server=SYS_PARA;
receive_count=0;
sms_tmp=0;
system_tep=1;
eer_int=0;
p2_stop_bit=0;
// pickup_pin_flag=1; hsk1_pin_flag=1;
while(1)
{
//-----------查询1到20条中的短信,只要有短信就处理------------------------------------------
if(system_server==SYS_SMSR) //读1-20条短信
{ //send_sms();
//system_server=SYS_SMSR;
//
// tel_diat();
read_sms(); //timer_S_cnt=0;
//tel_diat();
}
//----------------一些短信的发送---------------------------------------------------
else if(system_server==SYS_SMSS) //发送小区信息
{ eer_int=0;
send_sms();system_server=SYS_SMSR;
}
//---===============外部中断进行 报警状态=================================================================
//===================设置报警时的延时时长==================================================
else if(system_server==SYS_ALARM)
{
sms_tmp=smss_tel;
system_server=SYS_SMSR;
}
else if(system_server==SYS_START)
{
sms_tmp=smss_atart;
send_sms();
system_server=SYS_SMSR;
}
//========================用短信进行设备参数检查=============================================================
else if(system_server==SYS_PARA) //设备参数查询
{
sms_tmp=smss_para;
// IO_OUT=1; //断油、断电
//read_sms();
system_server=SYS_SMSS;
}
//==========================进行报警时的电话号码和手机号的设置===========================================================
else if(system_server==SYS_TEL) //防盗电话号码设置
{ //存储位于SIM卡的4,5,6三个位置
sms_tmp=smss_tel;
system_server=SYS_SMSS;
}
//==================//电池电量不充报警=================================================================
else if(system_server==SYS_SBC) //电池电量不充报警
{
if(batt_tmp>=1)
{
sms_tmp=smss_sbc;
system_server=SYS_SMSS;
}
else system_server=SYS_SMSR;
}
else system_server=SYS_SMSR;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -