佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2921|回复: 21

AT89C51 + GSM MODEM Siemens MC35i

[复制链接]
发表于 10-3-2007 11:34 AM | 显示全部楼层 |阅读模式
请各位帮帮忙。。。谢谢。。。
我要用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 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 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)
回复

使用道具 举报

Follow Us
 楼主| 发表于 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)有没有收到。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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, 程式走完 后 ,接收的电话也收到我的讯息了,就是这样,希望可以帮到大家。

评分

参与人数 1积分 +5 收起 理由
pic + 5 谢谢分享,加分奖励。

查看全部评分

回复

使用道具 举报

发表于 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 | 显示全部楼层
本帖最后由 pic 于 6-5-2010 09:34 AM 编辑
****** 不是 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"
如我有错,请更改我。
qweeer 发表于 5-5-2010 02:08 PM


PC  是DTE (Data Terminal Equipment)
Modem 是DCE (Data Communication Equipment)

PC COMport 那端 是公头, 电线那端是母头。
Modem 那端 是母头, 电线那端是公头。

那么, DCE 接DTE 的方法是Straight, 就是
TX <-> TX  
RX  <-> RX


http://www.bb-elec.com/bb-elec/literature/tech/faq_rs232_connections_work.pdf



如果是DTE 接DTE, 比如两架PC,
PC1 公头: 电线 那端是母头
PC2 公头: 电线 那端是母头

那么TX RX 就要交叉cross。
回复

使用道具 举报


ADVERTISEMENT

发表于 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 , 要你们看我喷口水,各位大大多多指教,小弟虚心受教。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 29-3-2024 05:53 PM , Processed in 0.095335 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表