**********************************************************************************
* 工程名 :拨打电话
* 描述 :通过手机发送短信控制LED * 实验平台:STC12XX * QQ:184164353 * : ***********************************************************************************/
#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 = \拨打电话,修改这里可以修改拨打的电话。
/************* 本地函数声明 **************/ 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) //20毫秒@22.1184MHz {
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 First_Int = 0; //接收字符串的起始存储位置 } /******************************************************************************* * 函数名 : Wait_CREG * 描述 : 等待模块注册成功 * 输入 : * 输出 : * 返回 : * 注意 : *******************************************************************************/ void Wait_CREG(void) { u8 i; u8 k; i = 0; CLR_Buf2(); while(i == 0) { CLR_Buf2(); UART2_SendString(\ UART2_SendLR(); delay_ms(5000); for(k=0;k } } } } }