yxl394766464 发表于 2010-11-6 21:00:33

请教高手M1280与TC35发短信的问题

编译环境是ICC代码如下:
uchar Uart_Buf;//接收缓冲区
uchar ReceverFlag=0;   //接收标志
uchar ReceCnt=0;         //接收计数
uchar Break[]="7044F60597D";// 你好
uchar SMS_Center_Pdu[]="3108200005F0"; //短信中心号码
uchar Phone_Num_Pdu[]="5110035372F5";//目标手机号码
uchar Phone[]="15013035275";


//---------------发送ASCII码---------------
void Usart_Send(uchar dat)//利用查询方式进行发送
{
while(!(UCSR0A&0x20));   //等待发送缓冲器为空
UDR0=dat;
while(!(UCSR0A&0x40));   //等待发送结束
UCSR0A|=0x40;            //清零
}

//---------------初始化---------------
void Usart_Init()
{
UCSR0B=0x00;    //清零
UCSR0A=0x00;
//tmp=clk/16/baud-1;
UBRR0H=BAUD_H;//设置波特率宏定义时钟,波特率
UBRR0L=BAUD_L;
UCSR0B=0x98;    //发送器、接收器、接收中断使能
UCSR0C=0x06;
Delayms(1000);    //设置帧格式
SEI();         //全局中断开放 BIT(7);
   
}

//接收中断
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
Uart_Buf=UDR0;
ReceCnt++;
}

#pragma interrupt_handler uart0_tx_isr:iv_USART0_TXC
void uart0_tx_isr(void)
{
//character has been transmitted
}

//是否返回OK
uint check_return(uchar *r)
{      
    if(strcmp(Uart_Buf,r)==0)
         return 1;
   else
         return 0;
}

/*----------------------------------------------------------------
函数功能: 发送命令到TC35I
----------------------------------------------------------------*/
void GSM_Send_AT(uchar *str)
{
uchar len;
len=strlen(str);
while(len--)
{
    Usart_Send(*str);
    str++;
}
}

/*----------------------------------------------------------------
函数功能: 设置波特率
----------------------------------------------------------------*/
void GSM_Baund()
{
GSM_Send_AT("AT+IPR=9600\r\n");
Delayms(100);
while(check_return("OK"))
{
    Delayms(100);
    GSM_Send_AT("AT+IPR=9600\r\n");
}
ReceCnt=0;
}

/*----------------------------------------------------------------
函数功能: GSM设置
----------------------------------------------------------------*/
void GSM_Set()
{
GSM_Send_AT("AT\r\n");
Delayms(100);   //发送指令到手机
while(check_return("OK"))
{
    Delayms(1000);
    GSM_Send_AT("AT\r\n");
}
flag|=0x01;                //GSM握手标志位
ReceCnt=0;               //Uart_Buf 清零
}

/*----------------------------------------------------------------
函数功能: 初始化GSM
----------------------------------------------------------------*/
void GSM_Init()
{
GSM_Set();
Delayms(10);
GSM_Baund();
Delayms(10);
}

/*-----------------------------------------------------------------
函数功能:发送短信               
-----------------------------------------------------------------*/
void GSM_Send_SMS(uchar *p)      //短信的具体内容
{
uchar temp=0;
GSM_Send_AT("AT+CMGF=0\r\n");//设置短信格式为用PDU格式
Delayms(100);
while(check_return("OK"))
{
    Delayms(500);
    GSM_Send_AT("AT+CMGF=0\r\n");
}
ReceCnt=0;
Delayms(200);
GSM_Send_AT("AT+CMGS=18\r\n");//发送短消息的字节数
Delayms(100);
while(check_return(">"))
{
    Delayms(500);
    GSM_Send_AT("AT+CMGS=18\r\n");
}
ReceCnt=0;
Delayms(100);
CLI();                        //全局中断关闭
GSM_Send_AT("089168");       //固定,国际
GSM_Send_AT(SMS_Center_Pdu); //短信中心
GSM_Send_AT("11000B81");   //固定搭配
GSM_Send_AT(Phone_Num_Pdu);//对方号码
GSM_Send_AT("0008A");      //固定
GSM_Send_AT(p);            //短信的具体内容
Usart_Send(0x1A);
UCSR0B=UCSR0B|0x80;            //接收中断使能开放         
SEI();                     //开全局中断
}
我用bootloader下到M1280里,TC35没有发出短信,请问是不是程序上的错误?我用串口调试工具发送AT指令可以发短信。
AT+CMGF=0 回车
AT+CMGS=18 回车
0891683108200005F011000B815110035372F50008A7044F60597D
1A(16进制发送)

yxl394766464 发表于 2010-11-7 19:35:53

没人回答?大家支持下新手吧。

yxl394766464 发表于 2010-11-10 09:27:36

要解决,只要关闭OK检测就好了。
页: [1]
查看完整版本: 请教高手M1280与TC35发短信的问题