sim800c调试通过
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
******************************************************************************* ***
* 工程名:拨打电话
* 描述:通过手机发送短信控制LED
* 实验平台:STC12XX
*
* : ******************************************************************************* ****/
#include ""
#include ""
#include ""
#define Buf2_Max 200 //串口2缓存长度
/************* 本地常量声明**************/
sbit RUNING_LED = P2^1; //运行指示灯
/************* 本地变量声明**************/
xdata u8 Uart2_Buf[Buf2_Max];
u8 Times=0,First_Int = 0,shijian=0;
//u8 Time_count=0;
bdata u8 Flag;//定时器标志位
sbit Timer0_start =Flag^0; //定时器0延时启动计数器
static unsigned char *phone = "ATD10086;\r\n"; //拨打电话,修改这里可以修改拨打的电话。
/************* 本地函数声明**************/
void GPIO_config(void);
void Timer0Init(void);
void CLR_Buf2(void);
void Wait_CREG(void);
/************* 外部函数和变量声明*****************/
/****************************************************************************** *
* 函数名: main
* 描述: 主函数
* 输入:
* 输出:
* 返回:
* 注意: 串口2负责与GPRS模块通信,串口1用于下载程序或串口调试,可以避免在下载程序时数据
还发送到模块
******************************************************************************* /
void main(void)
{
GPIO_config();
Uart2Init();
Timer0Init();
EA=1; //开总中断
Wait_CREG(); //查询模块是否注册成功
UART2_SendString(phone); //拨打电话
while(1)
{
;
}
}
/****************************************************************************** *
* 函数名: Uart1
* 描述: 串口1中断服务入口函数
* 输入:
* 输出:
* 返回:
* 注意:
*******************************************************************************
/
void Uart1() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
}
if (TI)
{
TI = 0; //清除TI位
}
}
/****************************************************************************** *
* 函数名: Uart2
* 描述: 串口2中断服务入口函数
* 输入:
* 输出:
* 返回:
* 注意:
******************************************************************************* /
void Uart2() interrupt 8
{
IE2 &= ~0x01; //关闭串口2中断
if (S2CON & S2RI)
{
S2CON &= ~S2RI; //清除S2RI位
Uart2_Buf[First_Int] = S2BUF; //将接收到的字符串存到缓存中
First_Int++; //缓存指针向后移动
if(First_Int > Buf2_Max) //如果缓存满,将缓存指针指向缓存的首地址
{
First_Int = 0;
}
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI; //清除S2TI位
}
IE2 |= 0x01; //使能串口2中断
}
/****************************************************************************** *
* 函数名: Timer0_ISR
* 描述: 定时器0中断服务入口函数,20ms中断一次
* 输入:
* 输出:
* 返回:
* 注意:
*******************************************************************************
/
void Timer0_ISR() interrupt 1
{
static u8 Time_count=0;
TR0=0;//关定时器
Time_count++;
if(Time_count>=50)
{
Time_count = 0;
RUNING_LED =~RUNING_LED;
}
TR0=1;//开定时器
}
/****************************************************************************** *
* 函数名: GPIO_config
* 描述: IO口配置函数
* 输入:
* 输出:
* 返回:
* 注意:
******************************************************************************* /
void GPIO_config(void)
{
P3M1 &= 0XC3; //配置P32~P35为推挽输出
P3M0 |= ~0XC3;
RUNING_LED=0;
}
void Timer0Init(void) //
{
AUXR &= 0x7F; //12T模式
TMOD &= 0xF0; //设置定时器模式16位重载
TL0 = 0x00; //设定定时器初值
TH0 = 0x70; //设定定时器初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
/****************************************************************************** *
* 函数名: CLR_Buf2
* 描述: 清除串口2缓存数据
* 输入:
* 输出:
* 返回:
* 注意:
******************************************************************************* /
void CLR_Buf2(void)
{
u16 k;
for(k=0;k<Buf2_Max;k++) //将缓存内容清零
{
Uart2_Buf[k] = 0x00;
}
First_Int = 0; //接收字符串的起始存储位置
}
/****************************************************************************** *
* 函数名: Wait_CREG
* 描述: 等待模块注册成功
* 输入:
* 输出:
* 返回:
* 注意:
******************************************************************************* /
void Wait_CREG(void)
{
u8 i;
u8 k;
i = 0;
CLR_Buf2();
while(i == 0)
{
CLR_Buf2();
UART2_SendString("AT+CREG");
UART2_SendLR();
delay_ms(5000);
for(k=0;k<Buf2_Max;k++)
{
if(Uart2_Buf[k] == ':')
{
if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5')) //说模块注册成功
{
i = 1;
break;
}
}
}
}
}。