请教各位高手:
在DTU的制作过程中,不知为何,编写的程序从理论上来说是正确的。而且硬件上也没有问题(LED可按程序要求闪烁,而且gprs模块也能接受呼叫,呼叫时有振铃)。
但就是不能通过PIC来控制GPRS模块呼叫指定电话.这是为什么呢?在线等
程序如下:
#include<pic.h>
#include<pic16f1947.h>
//#include "Parameters.h"
//
#define uchar unsigned char
#define uint unsigned int
#define PIC_CLK 4000000 //该产品选用4.0000MHz晶振
//-------------------------------------------
//const uchar ATD_SIZE[]={_QUOTE,_A,_T,_D,_0,_9,_1,_7,_3,_6,_1,_4,_4,_0,_5,_FENGHAO,_CR,_LF,_QUOTE};const uchar ATD_SIZE[]={_QUOTE,_A,_T,_D,_0,_9,_1,_7,_3,_6,_1,_4,_4,_0,_5,_FENGHAO,_CR,_LF,_QUOTE};
const uchar ATD_SIZE[]="ATD09xxxxxxxx;\r\n";
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void USART2_setup()
{
// #define BAUD1 1200
#define BAUD2 9600
#define BRGH_VALUE2 1
#define SPBRG2_VALUE ((PIC_CLK/(16UL * BAUD2) -1))
TX2STAbits.TX9D=0; //无奇偶校验位
TX2STAbits.TRMT=0; //Transmit Shift Register Status bit
TX2STAbits.BRGH=BRGH_VALUE2;
TX2STAbits.SYNC=0;
TX2STAbits.TXEN=1;
TX2STAbits.TX9=0; //发送8位
// TXSTA2bits.CSRC=1;
SPBRG2 = SPBRG2_VALUE;
RC2STAbits.RX9D=0; //无奇偶校验位
RC2STAbits.OERR=0;
RC2STAbits.FERR=0;
RC2STAbits.ADDEN=0;
RC2STAbits.CREN=1; //Continuous Receive Enable bit
// RCSTA2bits.SREN=0;
RC2STAbits.RX9=0; //接收8位
RC2STAbits.SPEN=1; //Serial Port Enable bit
//TX2STA=0X24; //串口1 发送状态兼控制寄存器
// CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D
// 发送使能 异步模式下的高速波特率
//RC2STA=0X90; //串口1 接受状态兼控制寄存器
// SPEN RX9 SREN CREN ADDEN FREE OERR RX9D
// 同步方式下的单字节接收使能
// 同/异步方式下的连续接收使能
//SP2BRGL=25;
// 波特率控制位 SYNC=0,BRGH=1,SPEN=1 BRG16=0
// Fosc=4.0000MHz, SP1BRGL=25
//SP2BRGH=0X00;
//TRISC=0XFF;
}
void send(const uchar data[],int length)
{
uint i;
for(i=0;i<length-1;i++)
{
delay(10);
TX2REG=data[i];
while(!TX2STAbits.TRMT);
delay(10);
}
}
void CMD_ATD()
{
PORTA=0X00;
send(ATD_SIZE,sizeof(ATD_SIZE)); //发送at\r\n
delay(5000); //延时50ms
}
void main()
{
USART2_setup(); //串口2初始化
TRISA=0XC0;
PORTA=0X0F;
loop1:
CMD_ATD();
delay(5000);
PORTA=0X00;
delay(1000);
goto loop1;
//SmsInit(); //短信初始化
//SmsRead(); //读短信
} |