/***************************************************************/
//功能:PIC单片机控制GSM模块向指定号码拨打电话
/***************************************************************/
#include"pic.h"
__CONFIG(0x3f31);
#define uchar unsigned char
#define uint unsigned int
uchar TC_Phone[]={"ATD15928614755;"};
uchar TC_Hold[]={"ATH"};
/***************************************/
//延时函数
//功能:zms延时
/***************************************/
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=75;y>0;y--);
}
void Start_GSM()
{
RC2=0;
delay_ms(1000);//IGT处于低电平1s
RC2=1;
delay_ms(1000);//IGT拉高,保持1s
}
/***************************************/
//单个字符发送函数
//功能:通过串口发送一个字符
/***************************************/
void send_char(uchar data)
{
TXREG=data;//把待发的字符送到TXREG寄存器中
while(!TRMT);//若一个字符发送完了,TRMT会置1
TRMT=0;//清零,否则容易出现错误
}
/***************************************/
//字符串发送函数
//功能:通过串口发送一个字符串,*str为字符串指针,len为预发送字符长度
/***************************************/
void send_string(uchar *str,uchar len)
{
while(len--)
{
send_char(*(str++));//发送一个字符,然后字符地址加1,直到发送指定长度的字符
}
}
/***************************************/
//初始化函数
//功能:定义端口,中断和串口初始化
/***************************************/
void init()
{
TRISC=0x80;//1000 0000
TRISA=0;
TRISD=0;
PORTC=0x01;
PORTA=0;
PORTD=0;
TXSTA=0x24;//0010 0100异步,8位数据,高速波特率
RCSTA=0x90;//接收使能,允许连续接收,8位
SPBRG=25;//定义SPBRG中的值,根据波特率来计算
GIE=1;//开总中断
PEIE=1;//允许外部中断
RCIE=1;//串口接收中断使能,发送中断disable
}
/***************************************/
//主函数
//功能:控制GSM模块向指定手机拨打电话,S1键拨打电话,S2键挂断电话
/***************************************/
void main()
{
init();
Start_GSM();//GSM模块注册
delay_ms(15000);//延时15s,等待模块注册成功
while(1)
{
if(RB0==0)//如果S1键被按下,发送拨打电话指令
{
delay_ms(10);
if(RB0==0)
{
RD0=1;
send_string(TC_Phone,15);
send_char('\r');//发送发送字符
delay_ms(500);
RD0=0;
}
while(!RB0);
}
if(RB1==0)//如果S2键被按下,发送挂断电话指令
{
delay_ms(10);
if(RB1==0)
{
send_string(TC_Hold,3);
send_char('\r');
delay_ms(500);
}
while(!RB1);
}
}
}