打印

TC35i与单片机和PC串口连接情况

[复制链接]
3231|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yushiqian2012|  楼主 | 2012-5-18 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
chunyang| | 2012-5-19 00:42 | 只看该作者
GSM模块本身的串口是TTL电平的,与PC串口互连需要进行电平转换,单片机则不用。

使用特权

评论回复
板凳
yushiqian2012|  楼主 | 2012-5-20 09:31 | 只看该作者
多谢

使用特权

评论回复
地板
yushiqian2012|  楼主 | 2012-5-25 20:48 | 只看该作者
那51系列的单片机需要电平转换吗?哎,我今天整了一天,单片机与TC35i直连不能通讯,然后我在R-R中加了一个电平转换,即是3V向5V,但是还是通讯不了,然后T-T和R-R之间均加220欧姆电阻(防止烧坏)也是不行,有点沮丧!

使用特权

评论回复
5
chunyang| | 2012-5-25 21:45 | 只看该作者
MCU的端口当然是TTL的,而51系默认IO模式又是弱上拉的可以与3V逻辑直连,通讯不了的问题,先检查模块是否已正确启动,串口连线的接法是否正确。

使用特权

评论回复
6
小S| | 2012-5-25 22:05 | 只看该作者
TC35I标注的TX  实际是模块本身的接收端 也就是单片送给TC35的入口    单片机的TXD 应该接到TC35I的TXD         单片机和TC35i 均属于TTL 电平  不需要转换什么之类的     如果你的单片机是5V供电  那么最好在数据线中串联一下电阻   怎么会搞不定呢???难道你的TC35I又是坏的???    我直接用新华龙的那个什么CP2102   搞的也是很顺畅的啊 看来楼主硬件需要加强啊

使用特权

评论回复
7
yushiqian2012|  楼主 | 2012-5-25 22:15 | 只看该作者
6# 小S 是啊,我也很郁闷啊

使用特权

评论回复
8
yushiqian2012|  楼主 | 2012-5-25 22:21 | 只看该作者
void main()
{       
        Start_GSM();                        //开启TC35
          Delay_s(5);                    //延时大约10秒 ,等待模块联网/
           UART_init();                         //串口初始化/
          GSM_INIT();                                 //对tc35模块进行初始化

}

void GSM_INIT(void)
{
        sendstring(ATE);                //发送握手信号
        Delay_s(1);
        sendstring(ATE);                //发送握手信号
        Delay_s(1);
        sendstring(AT);                //发送握手信号
        Delay_s(1);
        sendstring(AT);                //发送握手信号
        Delay_s(1);
}


void UART_init (void)
{
     TMOD=0x20;         //选择定时器1
     PCON=0x00;        ///波特率不加倍
     SCON=0x50;        //串行工作方式1允许串行接收               
     TH1=0xFD;        //实验板上晶振位11.0592MHZ,选择波特率为9600
     TL1=0xFD;        //在相应计数器上赋值
     EA=1;                //总中断开启
     ES=1;                //串行中断开启
     TR1=1;                //开启定时器1

  }



void Start_GSM(void)
{
  start=0;
  Delay_ms(100);
  Delay_ms(100);
  Delay_ms(100);
  Delay_ms(100);
  start=1;
}


void Delay_ms(int xms)              //延时程序,xms是形式参数
{
        uint i, j;
        for(i=xms;i>0;i--)                   // i=xms,即延时xms, xms由实际参数传入一个值
                for(j=115;j>0;j--);                //此处分号不可少
}


void Delay_s(int xs)              //延时程序,xms是形式参数
{
        uint i,j;
        for(i=xs;i>0;i--)                   // i=xms,即延时xms, xms由实际参数传入一个值
                for(j=10;j>0;j--)                //此处分号不可少
                        Delay_ms(100);                               
                               
}

(uchar code AT[]="AT";        //握手信号
uchar code ATE[]="ATE";         //关回显


void sendchar(uchar ch)
{
    SBUF=ch;
        while(TI==0);
        TI=0;
}
void sendstring(uchar *p)
{
  
  while(*p)
  {
          sendchar(*p);
          p++;
  }
  sendchar(0x0D);                        //回车换行的ASCII码
  sendchar(0x0A);
}

void receive(void) interrupt 4 using 1
{
  
if(RI)
{
          while(1)
        {
                test=1;
                Delay_s(1);
                test=0;
                Delay_s(1);
        }        
}
}


我就是先测试一下硬件能不能用,所以就一直发了四个AT指令,如果串口好用的话,则可定会置位RI的吧,所以这个时候就会让P2^0锁链的LED灯闪烁,但是现实不行。。。

使用特权

评论回复
9
yushiqian2012|  楼主 | 2012-5-25 22:22 | 只看该作者
然后,单片机的TXD与RXD直接连接,则可以进接收中断,而且我做的板子也可以好好地下载程序,而TC35i模块与PC通讯也正常。。

使用特权

评论回复
10
yushiqian2012|  楼主 | 2012-5-25 22:23 | 只看该作者
void main()
{       
        Start_GSM();                        //开启TC35
          Delay_s(5);                    //延时大约10秒 ,等待模块联网/
           UART_init();                         //串口初始化/
          GSM_INIT();                                 //对tc35模块进行初始化

}

void GSM_INIT(void)
{
        sendstring(ATE);                //发送握手信号
        Delay_s(1);
        sendstring(ATE);                //发送握手信号
        Delay_s(1);
        sendstring(AT);                //发送握手信号
        Delay_s(1);
        sendstring(AT);                //发送握手信号
        Delay_s(1);
}


void UART_init (void)
{
     TMOD=0x20;         //选择定时器1
     PCON=0x00;        ///波特率不加倍
     SCON=0x50;        //串行工作方式1允许串行接收               
     TH1=0xFD;        //实验板上晶振位11.0592MHZ,选择波特率为9600
     TL1=0xFD;        //在相应计数器上赋值
     EA=1;                //总中断开启
     ES=1;                //串行中断开启
     TR1=1;                //开启定时器1

  }



void Start_GSM(void)
{
  start=0;
  Delay_ms(100);
  Delay_ms(100);
  Delay_ms(100);
  Delay_ms(100);
  start=1;
}


void Delay_ms(int xms)              //延时程序,xms是形式参数
{
        uint i, j;
        for(i=xms;i>0;i--)                   // i=xms,即延时xms, xms由实际参数传入一个值
                for(j=115;j>0;j--);                //此处分号不可少
}


void Delay_s(int xs)              //延时程序,xms是形式参数
{
        uint i,j;
        for(i=xs;i>0;i--)                   // i=xms,即延时xms, xms由实际参数传入一个值
                for(j=10;j>0;j--)                //此处分号不可少
                        Delay_ms(100);                               
                               
}

(uchar code AT[]="AT";        //握手信号
uchar code ATE[]="ATE";         //关回显


void sendchar(uchar ch)
{
    SBUF=ch;
        while(TI==0);
        TI=0;
}
void sendstring(uchar *p)
{
  
  while(*p)
  {
          sendchar(*p);
          p++;
  }
  sendchar(0x0D);                        //回车换行的ASCII码
  sendchar(0x0A);
}

void receive(void) interrupt 4 using 1
{
  
if(RI)
{
          while(1)
        {
                test=1;
                Delay_s(1);
                test=0;
                Delay_s(1);
        }        
}
}


我就是先测试一下硬件能不能用,所以就一直发了四个AT指令,如果串口好用的话,则可定会置位RI的吧,所以这个时候就会让P2^0锁链的LED灯闪烁,但是现实不行。。。

使用特权

评论回复
11
小S| | 2012-5-25 22:32 | 只看该作者
我最近才学单片机 你的程序我只能看个一知半解的    这样你就用串口发最简单的  AT   看模块回应你OK 不  会的话你亮灯  一点一点调

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不需要别人来证明自己,自己的态度更重要

45

主题

354

帖子

0

粉丝