搜索
bottom↓
回复: 11

有用过GM8125做串口拓展的吗??

[复制链接]

出0入0汤圆

发表于 2013-10-22 16:52:26 | 显示全部楼层 |阅读模式
小弟最近在弄一个一转多串口的板子,调试了很久都不行,望大神指导..
不知道电路是否有问题。程序和电路都是按照官方给的做的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-10-22 16:53:10 | 显示全部楼层
7,8年以前用过

出0入0汤圆

发表于 2013-10-22 16:59:52 | 显示全部楼层
很老的片子了 现在32随便一个都串口5++

出0入0汤圆

发表于 2013-10-22 17:03:09 | 显示全部楼层
我会告诉你可能是电平不匹配吗

出0入0汤圆

 楼主| 发表于 2013-10-22 17:12:48 | 显示全部楼层
HadesHe 发表于 2013-10-22 17:03
我会告诉你可能是电平不匹配吗

片子是有点老,因为是新手,所以选择了相对简单一点的方案。我调试的时候,将单片机串口的收发绕过GM8125收发是正常的。但是一旦把收发接到Gm8125上就没反应了。

出0入0汤圆

发表于 2013-10-22 17:16:13 | 显示全部楼层
wushifeng 发表于 2013-10-22 17:12
片子是有点老,因为是新手,所以选择了相对简单一点的方案。我调试的时候,将单片机串口的收发绕过GM8125 ...

那你现在是收不到还是发不出去呢?你CPU是5.0V的而8125是3.3V的 估计单片机接收不到数据

出0入0汤圆

 楼主| 发表于 2013-10-22 17:31:51 | 显示全部楼层
如果单片机和GM8125相连,接收不到也发不出去。你看看是不是我的代码有问题?
  1. /**************************************************************/
  2. /*CPU£ºAT89C51 */
  3. /*¾§ÌåƵÂÊ£º22.1184M */
  4. /*»úÆ÷ÖÜÆÚ£º0.54us */
  5. /*C51 */
  6. /**************************************************************/
  7. #include <stc12c5a60s2.h>
  8. #define DELAY_TIME 60000 //Delay time
  9. #define DELAY_TIME1 1

  10. /**********************I/O¶¨Òå***********************/
  11. sbit MS=P3^6; //GM8125¹¤×÷ģʽ¿ØÖÆ
  12. sbit RESET=P3^7; //GM8125¸´Î»Òý½Å¿ØÖÆ
  13. sbit SRADD0=P0^0;//GM8125½ÓÊÕµØÖ·µÚһλ
  14. sbit SRADD1=P0^1;//GM8125½ÓÊÕµØÖ·µÚ¶þλ
  15. sbit SRADD2=P0^2;//GM8125½ÓÊÕµØÖ·µÚÈýλ
  16. sbit STADD0=P0^4;//GM8125·¢Ë͵ØÖ·µÚһλ
  17. sbit STADD1=P0^5;//GM8125·¢Ë͵ØÖ·µÚ¶þλ
  18. sbit STADD2=P0^6;//GM8125·¢Ë͵ØÖ·µÚÈýλ

  19. /******************Êý¾Ý±äÁ¿¶¨Òå*****************/
  20. unsigned char SendBuff[5]={0xaa,0x45,0x67,0xbc,0xc9};
  21. unsigned char ReceiveBuff0;
  22. unsigned char ReceiveBuff1;
  23. unsigned char ReceiveBuff2;
  24. unsigned char ReceiveBuff3;
  25. unsigned char ReceiveBuff4;
  26. unsigned char ReceiveBuff5;
  27. unsigned char Contr_data;
  28. unsigned char ADD;

  29. unsigned char i=0 ,j1=0 ,j2=0 ,j3=0 ,j4=0 ,j5=0 ,c=0;
  30. /*********************************************/
  31. /*º¯ÊýÃû³Æ£ºdelay.C */
  32. /*º¯Êý¹¦ÄÜ£º ÑÓʱ³ÌÐò */
  33. /*********************************************/
  34. void delay(unsigned int m)
  35. {
  36. unsigned int n;
  37. n=0;
  38. while(n < m)
  39. {n++;}
  40. return;
  41. }



  42. /*********************************************/
  43. /*º¯ÊýÃû³Æ£ºsend0.c */
  44. /*º¯Êý¹¦ÄÜ£º Ñ¡Ôñ0¿ÚµØÖ· */
  45. /*********************************************/
  46. void sendwrite0()
  47. {
  48.         STADD0=0;
  49.         STADD1=0;
  50.         STADD2=0;
  51. }

  52. void sendread0()
  53. {
  54.         STADD0=0;
  55.         STADD1=0;
  56.         STADD2=0;
  57.         SRADD0=0;
  58.         SRADD1=0;
  59.         SRADD2=0;
  60. }




  61. /*********************************************/
  62. /*º¯ÊýÃû³Æ£ºsend1.c */
  63. /*º¯Êý¹¦ÄÜ£º Ñ¡Ôñ1¿ÚµØÖ· */
  64. /*********************************************/
  65. void send1()
  66. {
  67.         STADD0=1;
  68.         STADD1=0;
  69.         STADD2=0;
  70. }
  71. /*********************************************/
  72. /*º¯ÊýÃû³Æ£ºsend0.c */
  73. /*º¯Êý¹¦ÄÜ£º Ñ¡Ôñ2¿ÚµØÖ· */
  74. /*********************************************/
  75. void send2()
  76. {
  77.         STADD0=0;
  78.         STADD1=1;
  79.         STADD2=0;
  80. }
  81. /*********************************************/
  82. /*º¯ÊýÃû³Æ£ºsend0.c */
  83. /*º¯Êý¹¦ÄÜ£º Ñ¡Ôñ3¿ÚµØÖ· */
  84. /*********************************************/
  85. void send3()
  86. {
  87.         STADD0=1;
  88.         STADD1=1;
  89.         STADD2=0;
  90. }
  91. /*********************************************/
  92. /*º¯ÊýÃû³Æ£ºsend0.c */
  93. /*º¯Êý¹¦ÄÜ£º Ñ¡Ôñ4¿ÚµØÖ· */
  94. /*********************************************/
  95. void send4()
  96. {
  97.         STADD0=0;
  98.         STADD1=0;
  99.         STADD2=1;
  100. }
  101. /*********************************************/
  102. /*º¯ÊýÃû³Æ£ºsend0.c */
  103. /*º¯Êý¹¦ÄÜ£º Ñ¡Ôñ5¿ÚµØÖ· */
  104. /*********************************************/
  105. void send5()
  106. {
  107.         STADD0=1;
  108.         STADD1=0;
  109.         STADD2=1;
  110. }



  111. /*********************************************/
  112. /*º¯ÊýÃû³Æ£ºsend1_data.c */
  113. /*º¯Êý¹¦ÄÜ£º1¿Ú·¢ÉäÊý¾Ý
  114. /*********************************************/
  115. void send1_data()
  116. {
  117.         send1();
  118.         SBUF=ReceiveBuff1;
  119.         while(!TI);
  120.         TI=0;
  121. }
  122. /*********************************************/
  123. /*º¯ÊýÃû³Æ£ºsend2_data.c */
  124. /*º¯Êý¹¦ÄÜ£º2¿Ú·¢ÉäÊý¾Ý
  125. /*********************************************/
  126. void send2_data()
  127. {
  128.         send2();
  129.         SBUF=ReceiveBuff2;
  130.         while(!TI);
  131.         TI=0;
  132. }
  133. /*********************************************/
  134. /*º¯ÊýÃû³Æ£ºsend3_data.c */
  135. /*º¯Êý¹¦ÄÜ£º3¿Ú·¢ÉäÊý¾Ý
  136. /*********************************************/
  137. void send3_data()
  138. {
  139.         send3();
  140.         SBUF=ReceiveBuff3;
  141.         while(!TI);
  142.         TI=0;
  143. }
  144. /*********************************************/
  145. /*º¯ÊýÃû³Æ£ºsend3_data.c */
  146. /*º¯Êý¹¦ÄÜ£º4¿Ú·¢ÉäÊý¾Ý
  147. /*********************************************/
  148. void send4_data()
  149. {
  150.         send4();
  151.         SBUF=ReceiveBuff4;
  152.         while(!TI);
  153.         TI=0;
  154. }
  155. /*********************************************/
  156. /*º¯ÊýÃû³Æ£ºsend3_data.c */
  157. /*º¯Êý¹¦ÄÜ£º5¿Ú·¢ÉäÊý¾Ý
  158. /*********************************************/
  159. void send5_data()
  160. {
  161.         send5();
  162.         SBUF=ReceiveBuff5;
  163.         while(!TI);
  164.         TI=0;
  165. }
  166. void main()
  167. {
  168.         TMOD= 0x20; //Ö¸¶¨¶¨Ê±Æ÷1¹¤×÷ÔÚ·½Ê½2
  169.         IE = 0x90; //¿ª´®ÐпÚÖжÏ
  170.         SCON=0xc0; //´®Ðпڹ¤×÷ÔÚ·½Ê½3
  171.         TH1 = 0xf8; //×°È붨ʱÆ÷1³õÖµ,ÉèÖÃÖ÷»ú¹¤×÷²¨ÌØÂÊΪ7200bps
  172.         TL1 = 0xf8;
  173.         PCON=0x00;
  174.         RESET=0; //¶ÔGM8125½øÐи´Î»²Ù×÷
  175.         RESET=1;
  176.         delay(DELAY_TIME);
  177.         Contr_data=0xfc; //×°ÈëÃüÁî×Ö³õÖµ
  178.         TR1=1; //Æô¶¯¶¨Ê±Æ÷1
  179.     MS=0;
  180.         sendwrite0();
  181.         SBUF=Contr_data; //ÉèÖÃGM8125×Ó´®¿Ú²¨ÌØÂÊΪ19200bps£¬Ä¸´®¿Ú²¨ÌØÂÊΪ115200bps
  182.         while(!TI);
  183.         TI=0;
  184.         delay(DELAY_TIME);
  185.         REN=1;
  186.         MS=1; //¶ÁÃüÁî×Ö
  187.         sendread0();
  188.         delay(DELAY_TIME);
  189.         while (ReceiveBuff0!=Contr_data) //Ñé֤дÈëµÄÃüÁî×ÖÊÇ·ñÕýÈ·£¬²»ÕýÈ·ÔòÖØÐÂд
  190.         {
  191.         MS=0; //GM8125¹¤×÷ÔÚдÃüÁî×Ö¹¤×÷ģʽÏÂ
  192.         sendwrite0();
  193.         SBUF=Contr_data;       
  194.         while(!TI);
  195.         TI=0;
  196.         delay(DELAY_TIME);
  197.         REN=1;
  198.         MS=1; //¶ÁÃüÁî×Ö
  199.         sendread0();
  200.         delay(DELAY_TIME);
  201.         }
  202.         REN=0;
  203.         MS=0; //ÉèÖÃGM8125¹¤×÷ÔÚ¶àͨµÀ¹¤×÷ģʽÏÂ
  204.         TR1=0; //¶¨Ê±Æ÷1Í£Ö¹
  205.         TH1 = 0xff; //×°È붨ʱÆ÷1³õÖµ,ÉèÖÃÖ÷¿ØMCU¹¤×÷²¨ÌØÂÊΪ115200bps
  206.         TL1 = 0xff;
  207.         PCON=0x80;
  208.         TR1=1; //Æô¶¯¶¨Ê±Æ÷1
  209.     ReceiveBuff1=0X01;
  210.         ReceiveBuff2=0X02;
  211.         ReceiveBuff3=0X03;
  212.         ReceiveBuff4=0X04;
  213.         ReceiveBuff5=0X05;
  214.     while(1)
  215.     {
  216.       send1_data();
  217.           delay(DELAY_TIME);
  218.       
  219.       send2_data();
  220.           delay(DELAY_TIME);

  221.       send3_data();
  222.           delay(DELAY_TIME);

  223.       send4_data();
  224.           delay(DELAY_TIME);

  225.       send5_data();
  226.           delay(DELAY_TIME);
  227.     }
  228. }


  229. void CommReceive(void) interrupt 4
  230. {
  231.         int i;
  232.         if(RI)
  233.         {
  234.             for(i=0;i<1;i++)
  235.             {
  236.                  if(SRADD2==0&&SRADD1==0&&SRADD0==0)
  237.                  {
  238.                     ReceiveBuff0=SBUF; //¶ÁÃüÁî×Ö´æÈëReceiveBuff0
  239.                     break;
  240.                          }
  241.                          if(SRADD2==0&&SRADD1==0&&SRADD0==1)
  242.                  {
  243.                     ReceiveBuff1=SBUF; //¶ÁÃüÁî×Ö´æÈëReceiveBuff0
  244.                     break;
  245.                           }
  246.                           if(SRADD2==0&&SRADD1==1&&SRADD0==0)
  247.                   {
  248.                      ReceiveBuff2=SBUF; //¶ÁÃüÁî×Ö´æÈëReceiveBuff0
  249.                      break;
  250.                           }
  251.                           if(SRADD2==0&&SRADD1==1&&SRADD0==1)
  252.                   {
  253.                     ReceiveBuff3=SBUF; //¶ÁÃüÁî×Ö´æÈëReceiveBuff0
  254.                     break;
  255.                              }
  256.                           if(SRADD2==1&&SRADD1==0&&SRADD0==0)
  257.                   {
  258.                     ReceiveBuff4=SBUF; //¶ÁÃüÁî×Ö´æÈëReceiveBuff0
  259.                     break;
  260.                              }
  261.                           if(SRADD2==1&&SRADD1==0&&SRADD0==1)
  262.                   {
  263.                     ReceiveBuff5=SBUF; //¶ÁÃüÁî×Ö´æÈëReceiveBuff0
  264.                     break;
  265.                              }
  266.                   }
  267.                   RI=0;
  268.         }
  269. return;
  270. }
复制代码

出0入0汤圆

发表于 2013-10-22 18:28:01 | 显示全部楼层
以前用过,控制很简单,建议再检查电路,

出0入0汤圆

 楼主| 发表于 2013-10-22 20:08:54 | 显示全部楼层
雨醉江南 发表于 2013-10-22 18:28
以前用过,控制很简单,建议再检查电路,

嗯,谢谢

出0入0汤圆

发表于 2013-10-22 20:52:18 | 显示全部楼层
不知道现在的51某口还需不需要加外部上拉电阻

出0入0汤圆

 楼主| 发表于 2013-10-22 21:15:22 | 显示全部楼层
我是用STC12c5a60s2做的,P0口做强推挽输出。所以应该不用加上拉电阻的。

出0入0汤圆

 楼主| 发表于 2013-10-25 15:16:16 | 显示全部楼层
HadesHe 发表于 2013-10-22 20:52
不知道现在的51某口还需不需要加外部上拉电阻


找到了问题的所在了,主要是因为程序卡在了while (ReceiveBuff0!=Contr_data)的死循环了面了,我把程序改了一下,直接发送控制字,不做校验,让程序一直往下执行,发现GM8125是可以发送数据的,但是接收不到数据,或者是即使收到了,也没有把收到的数据发回给单片机,这就为什么,在校验的时候死在循环里面了,不知道是什么问题,网上查了一下,遇到这个问题的人不止我一个。求指导,不甚感激啊...

while (ReceiveBuff0!=Contr_data) //Ñé֤дÈëµÄÃüÁî×ÖÊÇ·ñÕýÈ·£¬²»ÕýÈ·ÔòÖØÐÂд
        {
        MS=0; //GM8125¹¤×÷ÔÚдÃüÁî×Ö¹¤×÷ģʽÏÂ
        sendwrite0();
        SBUF=Contr_data;        
        while(!TI);
        TI=0;
        delay(DELAY_TIME);
        REN=1;
        MS=1; //¶ÁÃüÁî×Ö
        sendread0();
        delay(DELAY_TIME);
        }
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 09:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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