在论坛上搜了一些SIM900A短信发送的资料和例程,现在可以实现英文短信发送了,但是中文发送实现不了,麻烦各位帮看下,谢谢!
英文短信发送:
void sim900a_init(void)
{
delay_ms(10);
if(sim900a_send_cmd("AT\r\n","OK",100)==0)//检测是否应答AT指令 默认是回显,所以返回的AT OK
{
if(sim900a_send_cmd("ATE0\r\n","OK",100)==0)//不回显
{
if(sim900a_send_cmd("AT+CSCS=\"GSM\"\r\n","OK",100)==0)//设置 GSM字符集,仅支持英文
{
sim900a_send_cmd("AT+CMGF=1\r\n","OK",100);//设置文本模式
  OINT_COLOR=GREEN;
}
}
}
u8* const pp1="The temp of the first channel is too high! Please Check it! ";
void sim900a_sms_send_test(u8 message,u8 *p1)
{
if(sim900a_send_cmd("AT+CMGS=\"13851914181\"\r\n",">",200)==0);//设置要发送的手机号码
{
delay_ms(500);
if(sim900a_check_cmd(">"))//是否收到">"
{
LED1=!LED1;
u2_printf((char*)p1); //发短息内容到GSM模块
if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)//发送结束符,等待发送完成(最长等待10秒,因为短信长了的话,等待时间会长些)
{
LED1=!LED1;
}
USART2_RX_STA=0;
}
}
中文短信时根据原子哥的例程改的:
void sim900a_init(void)
{
delay_ms(10);
if(sim900a_send_cmd("AT\r\n","OK",100)==0)//检测是否应答AT指令 默认是回显,所以返回的AT OK
{
if(sim900a_send_cmd("ATE0\r\n","OK",100)==0)//不回显
{
sim900a_send_cmd("AT+CMGF=1","OK",200);
sim900a_send_cmd("AT+CSCS=\"UCS2\"","OK",200);
sim900a_send_cmd("AT+CSMP=17,0,2,25","OK",200);
}
}
}
u8* const pp1="中文短信test! ";
void sim900a_sms_send_test(u8 message,u8 *p1)
{
u8 *send;
// send=mymalloc(SRAMIN,300);//申请300个字节的内存,用于存放短信的unicode字符串
sim900a_unigbk_exchange((u8*)p1,send,1);//将短信内容转换为unicode字符串.
if(sim900a_send_cmd("AT+CMGS=\"13851914181\"\r\n",">",200)==0);//设置要发送的手机号码
{
delay_ms(500);
if(sim900a_check_cmd(">"))//是否收到">"
{
LED1=!LED1;
u2_printf((char*)send);
if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)//发送结束符,等待发送完成(最长等待10秒,因为短信长了的话,等待时间会长些)
{
LED1=!LED1;
}
USART2_RX_STA=0;
}
}
// myfree(SRAMIN,send);
}
这边外部flash里有UNIGBK.BIN了,另外AT指令应该是和原子例程是相同的,为什么中文就不行呢?
|