请教有关单片机与手机模块的通讯问题!!

wangluyan 2004-10-15 12:57:04
请教有关单片机与手机模块的通讯问题:
1)单片机怎样对手机进行初始化!!
2)单片机怎样接收发送数据
3)单片机怎样对手机内短信进行处理!
4)在pdu格式下,单片机怎样处理7位,8位以及16位数据
5)在对手机初始化后,怎样判断手机模块在第二次上电是否已经初始化了
6)谁能提供有关手机的AT中文指令
7)单片机发送和接收手机模块的数据格式以及各个参数的详细定义!!


以上的问题希望大家能够参与回答以及提取相关的问题和意见!!

本人在此感谢各位!!
对提供有有用的信息的人,给于500-1000分的奖励!!

本人的信箱:zhy_yzf@126.com

...全文
487 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangluyan 2004-11-02
  • 打赏
  • 举报
回复
哈哈!!!终于可以结贴了!!!
wangluyan 2004-11-02
  • 打赏
  • 举报
回复
to: suuare(督察)
谢谢,今天早上已经测试成功!!
00
11
00
0D
91
683155927145F6
00
08
01
1B
005A 0048 0059 0035 0038 0034 0035 0032 0030 0033 0033 0034 0034


;**************************************
完整的过程
AT&F0


OK

AT+WIND=1023


OK

AT+CMEE=1


OK

ATE0


OK

AT+CMGF=0


OK

AT&W


OK

AT+CNMI=2,2,0,1,0


OK

AT+CSAS


OK

AT+CMGS=021


> 0011000D91683155927145F600000006C83298FD0E01

+CMS ERROR: 304

AT+CSQ


+CSQ: 26,0



OK

AT+CMGS=021

> 0011000D91683155927145F600000006C83298FD0E01

+CMGS: 74



OK



+CMT: ,30

0891683108100005F0040D91683155927145F60000401120904130230B31D98C56B3DD72B2D80C


AT+CMGS=016

> 0011000D91683155927145F60004000112

+CMGS: 75



OK

'接收“1234567890”
+CMT: ,29

0891683108100005F0040D91683155927145F60000401120903570230A31D98C56B3DD703918


;**************************************
FIFO2003 2004-11-02
  • 打赏
  • 举报
回复
up
suuare 2004-11-02
  • 打赏
  • 举报
回复
利用pdu发送短信 往手机号为13552917546发送ZHY5845203344
0011000D91682155927145F60008011B005A004800590035003800340035003200300033003300340034
wangluyan 2004-11-01
  • 打赏
  • 举报
回复
我的测试文件:
1、手机模块与pc是否建立连接
TX:AT<CR><LF>
RX:AT<CR><LF><CR>OK<CR><LF> '收到正确回执
RX:AT<CR><LF>ERROR<CR><LF> '收到不正确回执
2、查询信号的质量
TX:AT+CSQ<CR><LF>
RX:AT+CSQ<CR><LF><CR><LF>+CSQ:<SP>31,0<CR><LF><CR><LF>OK<CR><LF>
3、当前网络注册情况
发送ASC码
TX:AT+CREG=?<CR><LF>
RX:AT+CREG=?

+CREG: (0-2)

OK

TX: AT+CREG=0<CR><LF>
RX: AT+CREG=0

OK

TX: AT+CREG?
RX: AT+CREG?

+CREG: 0,1

OK

注意:必须要先使AT+CREG=<mode>后,然后才可以使用AT+CREG?命令
4、选择消息服务
发送ASC码
TX: AT+CSMS=?<CR><LF>
RX: AT+CSMS=?

+CSMS: (0,1)

OK

TX: AT+CSMS=0<CR><LF>
RX: AT+CSMS=0

+CSMS: 1,1,1

OK

TX: AT+CSMS?<CR><LF>
RX: AT+CSMS?

+CSMS: 0,1,1,1

OK

5、信息格式AT+CMGF
发送ASC码
TX: AT+CMGF=?<CR><LF>
RX: AT+CMGF=?

+CMGF: (0,1)

OK


TX: AT+CMGF=0<CR><LF>
RX: AT+CMGF=0

OK

(设置TEXT格式)
TX: AT+CMGF=1<CR><LF>
RX: AT+CMGF=1

OK

(判断当前格式)
TX: AT+CMGF?<CR><LF>
RX: AT+CMGF? '当前为TEXT格式

+CMGF: 1

OK

7、设置短信服务中心地址 AT+CSCA
发送ASC码
TX: AT+CSCA="+8613800100500"<CR><LF> '北京移动短信中心码
RX: AT+CSCA="+8613800100500"

OK

8、保存设置,主要是保存+CSMP和+CSCA参数
发送ASC码
TX: AT+CSAS<CR><LF>
RX: AT+CSAS

OK

9、设置新信息指示,这个命令设置如何从网络接收短信(AT+CNMI)
发送ASC码
TX: AT+CNMI=2,2,0,0,0<CR><F>
RX: AT+CNMI=2,2,0,0,0

OK

说明:AT+CNMI=<mode>,<mt>,<bm>,<ds>,<bfr> 详见AT指令P97
主要设置为AT+CNMI=2,1,0,0,0
10、利用TEXT发送短信 往手机号为13552917546发送ZHY5845203344
发送ASC码
TX: AT+CMGS="+8613552917546"<CR><LF>
RX: AT+CMGS="+8613552917546"

>
TX: ZHY5845203344<Ctrl+z>
RX:
+CMGS: 46

OK

注:发送短信是以<Ctrl+z>(十六进制为0X1A)为结束标志,发送成功后基站返回"OK"
11、TEXT接收消信,
RX:
+CMTI: "SM",2
TX: AT+CMGR=2<CR><LF>
RX: AT+CMGR=2<CR><LF>
RX:
+CMGR: "REC UNREAD","+8613552917546",,"04/10/29,11:20:59+32"
123456789

OK

重新读短信:
TX: AT+CMGR=2<CR><LF>
RX: AT+CMGR=2<CR><LF>
RX:
+CMGR: "REC READ","+8613552917546",,"04/10/29,11:20:59+32"
123456789

OK

12、删除短信息 (AT+CMGD)
发送ASC码
TX: AT+CMGD=2<CR><LF>
RX: AT+CMGD=2<CR><LF>
RX:
OK

13、利用PDU格式接收短信
a)AT+CNMI=2,2,0,0,0
ASC码
RX:
+CMT: ,29
0891683108100005F0040D91683155927145F60000400192315484230A
31D92C46ABD96EB81C

OK

b)AT+CNMI=2,1,0,0,0 (每次开机后重新设置)
ASC码
RX:
+CMTI: "SM",2

TX: AT+CMGR=2<CR><LF>
RX: AT+CMGR=2<CR><LF>
RX:
+CMGR: 0,,28
0891683108100005F0040D91683155927145F60000400192317414230931D
98C56B3DD7039

OK
重新读短信
TX: AT+CMGR=2<CR><LF>
RX: AT+CMGR=2<CR><LF>
RX:
+CMGR: 1,,28
0891683108100005F0040D91683155927145F60000400192317414230931D
98C56B3DD7039

OK

14、利用PDU格式发送短信(目前还没有测试完成)
wangluyan 2004-11-01
  • 打赏
  • 举报
回复
谢谢各位:
现在又有信问题:
我才有pdu格式发送数据,第一次发送数据成功,但重新发送刚才发送的内容就不行(手机卡还有钱),我不知道是什么原因,希望你们能帮我解决这个问题,现在我把我的操作工程粘贴如下:

>

>AATT

>

>

>

>

>OK

>

>AATTEE00

>

>

>

>OK

>

>AT+CMGF?

>

>

>+CMGF: 1

>

>

>

>OK

>

>AT+CMGF=0

>

>

>OK

>

>AT&W

>

>

>OK

>

>AT+CSCA="+8613800100500"

>

>

>OK

>

>AT+CNMI=2,2,0,1,0

>

>

>OK

>

>

>AT+CSAS

>

>

>OK

>

>AT+CMGS=16

>

>> 0031000D91683155927145F60004000112

>

>+CMGS: 61

>

>

>

>OK

>

>AT+CMGS=16

>

>

>> 0031000D91683155927145F60004000112

>

>ERROR

>

>AT+CMGF=0

>

>

>OK

>

>AT+CMGS=16

>

>

>> 0031000D91683155927145F60004000112

>

>ERROR


错误提示:ERROR 304
Invalid PDU mode parameter

请各位帮我分析一下这个pdu格式是怎么错的!!



先谢谢了!1
suuare 2004-11-01
  • 打赏
  • 举报
回复
回答你了 http://community.csdn.net/Expert/topic/3352/3352572.xml?temp=.6257593
wxf0204 2004-10-27
  • 打赏
  • 举报
回复
好象是的哦!具体的我找一下!看看!
wxf0204 2004-10-26
  • 打赏
  • 举报
回复
有啊,有这样的命令,你自己找一下!
wangluyan 2004-10-26
  • 打赏
  • 举报
回复
是不是AT+CREG??
wangluyan 2004-10-25
  • 打赏
  • 举报
回复
我所说的手机是否入网是指手机开机后,判断手机是否已经跟手机网络联系上!并不要手机上网!!

tjjack 2004-10-25
  • 打赏
  • 举报
回复
1):新短信过来及时提醒单片机读取短信

这个问题可以用接收中断呀!

2):在pdu格式下是不是所有的命令都是十六进制
不论什么格式,字符肯定是以十六进制发送,不论是否是pdu格式,text也是这样的


3):怎样判断手机是否入网以及模块的好坏(好像有一条命令可以,但我不记得了)

手机上网后会有一串数据过来,一般不上网这种情况比较少,再说不上网也可发短信息!

peng22277 2004-10-23
  • 打赏
  • 举报
回复
关注
Eddie005 2004-10-22
  • 打赏
  • 举报
回复
up~
wangluyan 2004-10-22
  • 打赏
  • 举报
回复
现在我主要想:
1):新短信过来及时提醒单片机读取短信
2):在pdu格式下是不是所有的命令都是十六进制
3):怎样判断手机是否入网以及模块的好坏(好像有一条命令可以,但我不记得了)

暂时就这么几个问题!!
wangluyan 2004-10-22
  • 打赏
  • 举报
回复
谢谢!!
其实我只想看看大家的意见!!
想听听意见!!

我用wavecom m1206b

要求采用pdu格式发送十进制数。

第一, 设置短信息格式。

AT+CMGF=0

第二, 发送短信息。

如,要向号码为“+8613693092030”发送一条短信息(号码转换为683196032930F0),发送内容为“节日快乐”,(假设变成Unicode为“8282 65E55FEB4E50”,长度是08) 。
"节日快乐"四个字,变成汉字的Unicode码:
节 :8282 日:65E5 快:5FEB 乐:4E50


那么操作如下:

AT+CMGS=023
>0011000D91683196032930F000080108828265E55FEB4E50<ctrl+z>
+CMGS: <发送的条数>

OK


简要解释如下:
首先将短信息格式设为PDU模式 :AT+CMGF=0

发送AT+CMGS= YYY [CR] ;其中 YYY 为TPDU的十进制长度
收到[>][SP]响应后再发送
[TPDU][ctrl-Z]
[TPDU]:发送规约数据单元:
TYPE 11
MR 00
DA 0D91683196032930F0 ; 13693092030
PID 00
DCS F4
VP 01
UDL XX ; XX 不大于 8C
DD ; XX字节的用户数据
用户数据中最后一个字节为前面XX-1个字节的按位累加和。
TPDU 中用户数据前的PDU规约头的长度是15字节

用户数据最长可用到140字节。
发中文是 pdu 格式为 80 dcs=80

以下例子 发送到 13693092030
"节日快乐"四个字,变成汉字的Unicode码:
节 :8282 日:65E5 快:5FEB 乐:4E50
译码为
088282 65E55FEB4E50
08 长度

at 命令
AT+CMGS=023 {*解释:15(规约为15)+8(节日快乐8个字节)=023}
返回
>
发送
0011000D91683196032930F000080108828265E55FEB4E50<ctrl+z>
{*解释: 前面两个00照写; 11为TYPE; 00为MR, 0D91683196032930F0为DA; 00为PID; 08为DCS; 01为VP; 08828265E55FEB4E50为UDL的内容,就是中文信息部分}
具体就这些例子中显示其实是一种内存编码方式,如 1369 为 3196
3196032930F0 ; 13693092030
wxf0204 2004-10-22
  • 打赏
  • 举报
回复
我觉得你仔细研究指令集好了!另外现在市场上专门做这些的都很多的,你可以咨询看看!给你个网址:www.sangrong.com
wangluyan 2004-10-20
  • 打赏
  • 举报
回复
谢谢你的支持!!
wangluyan 2004-10-20
  • 打赏
  • 举报
回复
谢谢!!
希望能够继续!!!
lpfreemail 2004-10-20
  • 打赏
  • 举报
回复
确保手机短信能够收全在上电后先问AT+CMGF=1、AT+CMGL="REC UNREAD" 或AT+CMGL=0、AT+CMGL=0
把没有确认的短信列表,而后在一一收回。
确保模块已经查到网络的指令是AT+CSQ 检查信号 若返回10—31,0之间的信号数字则继续,如果信号是99,99,则应该考虑不停的键入A/命令,不停的让模块去搜寻网络。
为保证每条短信都要收到,就要及时的把已经阅读的短信删除用AT+CMGD=*删除。
加载更多回复(11)

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧