查看: 3073|回复: 21
|
AT89C51 + GSM MODEM Siemens MC35i
[复制链接]
|
|
请各位帮帮忙。。。谢谢。。。
我要用AT89C51来控制GSM modem Siemens MC35i来send sms,我的问题是当我的program send完
‘AT'去GSM modem后,它没有反应, 它理应回复‘OK'给MCU的是吗?不过MCU一直 都 收 不 到 它 的 回应,以至 program不能接下去走了,因为program一直loop在接收部分。
我知道要连接AT89C51和 MC35i是需要MAX232来转换TTL去RS232 或RS232去TTL的,不过我不肯定 该怎样接驳 MAX232和MC35i, 是不是只需接 MC35i的 Tx,Rx 和 ground呢?其他6个如 RTS, CTS 之 类的需要被接驳吗?
以下是我的程式,程式就走到 bold的部分 ,接在P2的LED就一直一闪一闪了,代表一直loop, 可以看看有哪里出错了吗?有可能MC35i没收到任何东西吗?
ORG 0000H ower up
SJMP MAIN
ORG 50H
MAIN: MOV P2,#01H
ACALL DELAY
MOV PCON,#80H
MOV SCON,#52H ;8-bit, 1 stop bit, REN enabled
MOV TMOD,#20H ;Timer 1 in mode 2
MOV TH1,#-3 ;9600 baud rate
SETB TR1 ;Start timer 1
MOV DPTR,#ST ;Get address of Station
MOV R6,DPH ;Save higher data pointer
MOV R7,DPL ;Save lower data pointer
MOV P2,#81H
ACALL DELAY
NextMessage:
MOV DPTR,#AT ;Get address of AT
MOV P2,#11H
ACALL DELAY
ACALL SingleCommand ;Send AT+CMGF
MOV DPTR,#CMGF ;Get address of AT+CMGF
MOV P2,#22H
ACALL DELAY
ACALL SingleCommand ;Send AT+CMGF
MOV DPTR,#CSCA ;Get address of AT+CSCA
MOV P2,#33H
ACALL DELAY
ACALL SingleCommand ;Send AT+CSCA
MOV DPTR,#CMGS ;Get address of AT+CMGS
MOV P2,#44H
ACALL DELAY
ACALL ATcommand ;Send AT+CMGS
WaitReady:
ACALL SerialIn ;Get the status of the phone
CJNE A,#'>',WaitReady ;Repeat if symbol '>' not received
MOV DPH,R6 ;Retrieve higher address of station
MOV DPL,R7 ;Retrieve lower address of station
ACALL ATcommand ;Send station
MOV R6,DPH ;Save current higher address of station
MOV R7,DPL ;Save current lower address of station
CLR A ;Clear accumulator
MOVC A,@A+DPTR ;Get data to be saved into accumulator
JNZ NextMessage ;Jump to NextMessage if '0' is reached
MOV P2,#88H
ACALL DELAY
FINISH: JMP FINISH ;If yes, end of program
SerialOut:
MOV SBUF,A ;Load the data
WaitTI: JNB TI,WaitTI ;Stay until last bit sent
CLR TI ;Get ready for next character
MOV P2,#55H
ACALL DELAY
RET
SendIt: ACALL SerialOut ;Jump to send
ATcommand:
CLR A ;Clear accumulator
MOVC A,@A+DPTR ;Get data to be saved into accumulator
INC DPTR oint to next data
MOV P2,#99H
ACALL DELAY
JNZ SendIt ;Jump to send if it is not zero
RET
SingleCommand:
ACALL ATcommand ;Jump to ATcommand
Wait0DH:
ACALL SerialIn ;Jump to receive
CJNE A,#0DH,Wait0DH ;Jump if not equals to carriage return
MOV P2,#77H
ACALL DELAY
RET
SerialIn:
MOV P2,#00H
ACALL DELAY
MOV P2,#0FFH
ACALL DELAY
JNB RI,SerialIn ;Wait for another character
MOV A,SBUF ;Save it in accumulator
CLR RI ;Get ready for next character
MOV P2,#66H
ACALL DELAY
RET
DELAY:
ACALL DELAY1
ACALL DELAY1
DELAY1:
MOV R2,#0FFH ; 1 machine cycle,1.085us
LONG1:
MOV R3,#0FFH ; 1 machine cycle,1.085us
LONG2:
DJNZ R3,LONG2 ; 2 machine cycle .
DJNZ R2,LONG1 ; Total delay = 256X256X2X1.085u = 142ms
RET
AT: DB 'AT',0DH,0
CMGF: DB 'AT+CMGF=1',0DH,0
CSCA: DB 'AT+CSCA="+60120000015"',0DH,0
CMGS: DB 'AT+CMGS="+60122521131"',0DH,0
ST: DB '01',1AH,0,'02',1AH,0,'03',1AH,0,0
END
真的很需要大家的帮忙,谢谢。。。
[img] [/img]
不知道我这样接对不对呢?
[ 本帖最后由 e_finale 于 10-3-2007 06:31 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 11-3-2007 08:56 AM
|
显示全部楼层
原帖由 e_finale 于 10-3-2007 11:34 AM 发表
请各位帮帮忙。。。谢谢。。。
我要用AT89C51来控制GSM modem Siemens MC35i来send sms,我的问题是当我的program send完
‘AT'去GSM modem后,它没有反应, 它理应回复‘OK'给MCU的是吗?不过MCU一直 都 收 ...
请问你的MC35i是不是模块(Module)?还是Terminal?
我先了解了再做后续解答。
是不是如下图?
 |
|
|
|
|
|
|
|

楼主 |
发表于 11-3-2007 12:01 PM
|
显示全部楼层
回复 #2 pic 的帖子
噢不好意思,没说清楚,是 terminal,如下图。
[img] [/img]
[ 本帖最后由 e_finale 于 11-3-2007 12:03 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 11-3-2007 12:36 PM
|
显示全部楼层
回复 #3 e_finale 的帖子
我要用AT89C51来控制GSM modem Siemens MC35i来send sms,我的问题是当我的program send完
‘AT'去GSM modem后,它没有反应, 它理应回复‘OK'给MCU的是吗?不过MCU一直 都 收 不 到 它 的 回应,以至 program不能接下去走了,因为program一直loop在接收部分。
我知道要连接AT89C51和 MC35i是需要MAX232来转换TTL去RS232 或RS232去TTL的,不过我不肯定 该怎样接驳 MAX232和MC35i, 是不是只需接 MC35i的 Tx,Rx 和 ground呢?其他6个如 RTS, CTS 之 类的需要被接驳吗?
你的MAX232电路没问题。RTS 可以short去CTS,
1。AT89C51 我不熟悉, 但我有用PIC18F452 (C code) +TC35i Teminal, 取得成功。
2。你先试用电脑, Hyperterminal + MC35i Terminal,接RX、TX,Gnd, 看有遇到什么问题吗?
3。试了在回来报告。 |
|
|
|
|
|
|
|

楼主 |
发表于 11-3-2007 12:46 PM
|
显示全部楼层
原帖由 pic 于 11-3-2007 12:36 PM 发表
2。你先试用电脑, Hyperterminal + MC35i Terminal,接RX、TX,Gnd, 看 ...
我有试过用rs232 cable的方法用 hyperterminal没有问题,没试过只用 rx, tx和ground的接 法,是那3条线接电脑后面的rs232孔吗?还有什么要接的吗?如果是那样的话需要用到max232 吗 ?
谢谢你的回复。 |
|
|
|
|
|
|
|
发表于 11-3-2007 12:53 PM
|
显示全部楼层
原帖由 e_finale 于 11-3-2007 12:46 PM 发表
我有试过用rs232 cable的方法用 hyperterminal没有问题,没试过只用 rx, tx和ground的接 法,是那3条线接电脑后面的rs232孔吗?
是的。
还有什么要接的吗?如果是那样的话需要用到max232 吗 ?
不用MAX232。(你的rs232 cable也没有用到MAX232) |
|
|
|
|
|
|
|

楼主 |
发表于 11-3-2007 02:25 PM
|
显示全部楼层
我有一个问题。。。RTS 和 CTS 是什么用的?把它们接在一起是什么原因呢? 不接的话有分别吗?那么 DSR 和 DTR 呢? |
|
|
|
|
|
|
|
发表于 11-3-2007 05:37 PM
|
显示全部楼层
原帖由 e_finale 于 11-3-2007 02:25 PM 发表
我有一个问题。。。RTS 和 CTS 是什么用的?把它们接在一起是什么原因呢? 不接的话有分别吗?那么 DSR 和 DTR 呢?
RTS(request to send),CTS (clear to send) (一组)
DSR (Data set ready), DTR (Data terminal ready)(一组)
是Hardware handshaking 用到的。
Software handshaking 是用Xon, Xoff。
为什么要handshake呢?什么是handshake 呢?
handshake 是为了确定双方都已准备接收,或发data。
没有handshake,如接收那方不够快,或buffer不够大,data就会丢失。
但如果是把MC35i的RTS,CTS接一起,就像是骗它(MC35i),以为你的MCU是Ready的,就只管送data了,而不管你(MCU)有没有收到。 |
|
|
|
|
|
|
|

楼主 |
发表于 11-3-2007 05:56 PM
|
显示全部楼层
谢谢你噢版主。。。我明天就会去试试看的了,因为现在MC35i不在我手上,明天会再向你报告的。那么DSR和DTR不需要被接在一起吗?
[ 本帖最后由 e_finale 于 11-3-2007 05:59 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 12-3-2007 12:21 AM
|
显示全部楼层
回复 #9 e_finale 的帖子
DTR, DSR 不用接。
DTR在Modem里有一个功能,就是Wake up唤醒你的MC35i。
MC35i在上电时,是关机状态的。Toggle DTR就能开电。看DataSheet你就明白。
还有一条线, 叫RING, 有incoming call时, 就会有信号,可以好好利用。 |
|
|
|
|
|
|
|

楼主 |
发表于 12-3-2007 02:09 PM
|
显示全部楼层
惨了,不知道为什么,我用rs232的cable连接电脑和 MC35i 时 hyperterminal 没有问题,回有'OK', 但是我一用只是Tx,Rx 和ground 从电脑接去 MC35i 时,hyperterminal 就没有反应了,我也将 CTS 和 RTS 连接在一起了,也是没有反应,那么我应该怎么做呢?请各位给小妹一些意见好吗?谢谢。 |
|
|
|
|
|
|
|

楼主 |
发表于 13-3-2007 02:05 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 13-3-2007 06:53 PM
|
显示全部楼层
原帖由 e_finale 于 13-3-2007 02:05 PM 发表
谢谢大家的帮忙,我已成功把短讯发出去了。
那和大家分享你的心得可以吗? |
|
|
|
|
|
|
|

楼主 |
发表于 13-3-2007 10:25 PM
|
显示全部楼层
好的。。
基本上我的程式是没有问题的,只是接法有点出错,从以下的网站 :
http://tldp.org/HOWTO/Serial-HOWTO-20.html
得知 AT89C51 的 Tx pin 应该要接去 modem 的 Tx pin,而不是 Rx pin,简单来说,AT89C51 和 modem 的连接应该是 Tx - Tx, Rx - Rx,而不是crossover接法。
然而接对了之后 , AT89C51 的确是有收到从 modem 来的signal了,但是modem不会 发 出 ‘OK’, 而是一些奇怪的 signal,结果我把程式稍微更改,与其等待 ‘OK',我放了 delay, 不去接收 modem 的 signal, 而假设了 modem 发出 ‘OK',好让程式继续送出剩余的 AT command, 程式走完 后 ,接收的电话也收到我的讯息了,就是这样,希望可以帮到大家。  |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 5-5-2010 02:08 PM
|
显示全部楼层
在pc与modem的接法是:
PC Tx DB9 (male) pin3 To Modem DB9 (female) pin 3 "其实这就是Modem的Rx pin"
PC Rx DB9 (male) pin2 To Modem DB9 (female) pin 2 "其实这就是Modem的Tx pin"
在 AT89x51 MCU与modem的接法就因该是:(Mcu 与 Modem 之间要有 Max232)
MCU Tx pin 11 TO Modem DB9 (female) pin 3 "其实这就是Modem的Rx pin"
MCU Rx pin 10 TO Modem DB9 (female) pin 2 "其实这就是Modem的Tx pin"
****** 不是 tx - tx , rx - rx !!!
其实它应该是 tx-rx , rx-tx, gnd-gnd
Modem DB9 (female) pin 3 "其实这就是Modem的Rx pin"
Modem DB9 (female) pin 2 "其实这就是Modem的Tx pin"
如我有错,请更改我。
谢谢。 |
|
|
|
|
|
|
|
发表于 6-5-2010 09:24 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 6-5-2010 12:42 PM
|
显示全部楼层
谢谢更改。
我没有留意modem datasheet,
原来 modem pin2 发出信号给 pc 的 pin 是称为 "rx"
我还以为发出信号的就是 “tx”
总之
pc pin2 to modem pin2, pc pin3 to modem pin3 就对了。
mcu rx to modem pin2, mcu tx to modem pin3 就对了。
但是我不明白的就是,
电脑 rs232 pin2 是 rx (接收), 那么 modem pin 2 那端是发出讯号才对,
为什么modem pin 2 那端也称为 "rx"..?
难道在DCE发出信号的就是称为"rx"...?
谢谢。 |
|
|
|
|
|
|
|
发表于 6-5-2010 02:44 PM
|
显示全部楼层
本帖最后由 pic 于 6-5-2010 02:49 PM 编辑
回复 17# qweeer
可能想太多了。。
这样想吧。。
如果我们要把PC 的RS232 线延长, 要怎样接呢?
PC (Male) <DSUB Female> ---- 延长线 ---- <DSUB Male>
这个延长线是怎样接呢?
pin 2 (Female)- pin 2 (Male),
pin 3 (Female)- pin 3 (Male),
pin 5 (Female)- pin 5 (Male),
对吗?
DCE 的pin 2, 其实内部是TX
DCE 的pin 3, 其实内部是RX
所以, 不用再cross了。
DTE 一般是Male 端子
DCE 一般是Female 端子
一个Male, 一个Female 是设计成直接1 对 1 的连接。
所以,它的电线 是1 对1 来接的, 再cross 就反了。。
你可以Google看看。
有疑问我们再交流研究看看  |
|
|
|
|
|
|
|
发表于 7-5-2010 08:50 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 16-10-2010 11:15 AM
|
显示全部楼层
本帖最后由 我很专一2 于 16-10-2010 11:17 AM 编辑
小弟是手机维修员,对电子电器电工都有浓厚的兴趣(基本上我对什么都有兴趣,好学),可是我的基本功不是很好(与你们相比的话就是,不过骗吃还行),况且现在很多原厂的维修只作到level 2 , 也就是整个部分换掉。但是我想学的更精专,不但是为了本身的工作,也为了精益求精。所以我对原理结构特别有兴趣,因为我知道任何的一个产品都是先由概念,理论转换出来的。
但是现今因为竞争关系,很多电子生产上只注重生产,销售而降低了品质,导致很多成品的元件寿命特别短,也不懂什么原因,喜欢喜欢就不供应货,又要我们处理好。哦,对了,我先说明,我公司的sub contract 的,很多时候老板因为这些问题而与官方闹翻。
回到原题,我想利用知识,加上一些半桶水的经验,作一些level 3 的工作。看了楼主的答案,我感到非常的有兴趣,因为我知道发送一个sms 到另一个设备没有那么简单,只是没想到真正的信号运作流程比我想象中高深许多。由于时间和学历的关系,不太方便立刻进修,我想自学,请问有没有一些介绍入门知识的网站可以介绍呢? 比如说介绍每个字词的用途,要利其锋,先利其器,问题都看不懂就达不到真正的效果。
我厌倦了我同事们(包括小屁孩)说的:有这个问题换这个,换那个就行了。虽然我不认同,但是他们比我资深,为了工作上少些纷争,只好跟着作。唯有当他们不在,我才自己分析,发现有相当多的job ,他们都超过预算的维修,有很多时候一个很基本的问题都能分析错误,导致手机hold 住几个月就等一个不相关的零件来更换,换了不好又在等。
最辛苦的还是,我还是负责接听电话和解释给顾客的那位。我不喜欢游花园,问题发生就要立刻解决,那就没问题了,三推四拖,到最后全部人都不好过。
Paiseh , 要你们看我喷口水,各位大大多多指教,小弟虚心受教。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|