小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 16990|回复: 16

关于703N与单片机通信的问题?

[复制链接]
发表于 2013-1-14 00:41:20 | 显示全部楼层 |阅读模式
我按照论坛里的教程,给WR703N刷了openwart,串口也引出来了,把WR703N的电源和GND也引出来了,根据说明,单片机要采用波特率9600bps,那么要接11.0592晶振,程序用的是最简单的,单片机P1.0-P1.4控制直流电机,现在我把WR703N和单片机接起来,从单片机P1.0-P1.4接到LED上,理论上说,用手机端发指令,LED应该是变化的,可是目前没有变化,用串口调试助手能收到手机端的指令,我现在想知道如何判断WR703N和单片机的通信是连起来的?

问题之外:
1.如何更改ser2net的波特率?
2.如果更改波特率要用到putty,那么怎么使用,最好能从登录界面说起?
3.编译openwart一定要在Linux环境下吗,如何搭建编译环境?

为了能让各位大神更好的解决问题,现在贴出单片机端的程序:
  1. #include<reg52.h>
  2. #include<math.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar Buffer[4] = {0};      //从串口接收的数据
  6. uint i,j;
  7. sbit LeftLight=P2^1;
  8. sbit RightLight=P2^2;/********************************************************************
  9. * 名称 : Delay_1ms()
  10. * 功能 : 延时子程序,延时时间为 1ms * x
  11. * 输入 : x (延时一毫秒的个数)
  12. * 输出 : 无
  13. ***********************************************************************/
  14. void Delay_1ms(uint i)//1ms延时
  15. {
  16. uchar x,j;
  17. for(j=0;j<i;j++)
  18. for(x=0;x<=148;x++);
  19. }
  20. /********************************************************************
  21. * 名称 : Com_Int()
  22. * 功能 : 串口中断子函数
  23. * 输入 : 无
  24. * 输出 : 无
  25. ***********************************************************************/
  26. void Com_Int(void) interrupt 4
  27. {

  28. EA = 0;
  29. if(RI == 1)   //当硬件接收到一个数据时,RI会置位
  30. {
  31.   Buffer[0] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  32.   RI = 0;  
  33.   
  34. }
  35. EA = 1;
  36. }/********************************************************************
  37. * 名称 : Com_Init()
  38. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  39. * 输入 : 无
  40. * 输出 : 无
  41. ***********************************************************************/
  42. void Com_Init(void)
  43. {
  44.      TMOD = 0x20;
  45.      PCON = 0x00;
  46.      SCON = 0x50;   
  47.      TH1 = 0xFd;    //设置波特率 9600
  48.      TL1 = 0xFd;
  49.      TR1 = 1;  //启动定时器1
  50.   ES = 1;  //开串口中断
  51.   EA = 1;  //开总中断  
  52. }
  53. /********************************************************************
  54. * 名称 :Moto_Forward()
  55. * 功能 : 电机1、2启动,都是前进,整车表现为前进。
  56. * 输入 : 无
  57. * 输出 : 无
  58. ***********************************************************************/
  59. void Moto_Forward()
  60. {  
  61.    
  62.     P1= 0x06;   Delay_1ms(100);

  63. }/********************************************************************
  64. * 名称 :Moto_Backward()
  65. * 功能 : 电机1、2启动,都是后退,整车表现为后退。
  66. * 输入 : 无
  67. * 输出 : 无
  68. ***********************************************************************/
  69. void Moto_Backward()
  70. {
  71.    
  72.     P1= 0x05;
  73.   Delay_1ms(100);
  74. }/********************************************************************
  75. * 名称 :Moto_TurnLeft()
  76. * 功能 : 电机1后退,电机2前进,整车表现为左转。
  77. * 输入 : 无
  78. * 输出 : 无
  79. ***********************************************************************/
  80. void Moto_TurnLeft()
  81. {  
  82.    P1= 0x09;
  83.   Delay_1ms(100);
  84. }
  85. /********************************************************************
  86. * 名称 :Moto_TurnRight()
  87. * 功能 : 电机1前进,电机2后退,整车表现为右转。
  88. * 输入 : 无
  89. * 输出 : 无
  90. ***********************************************************************/
  91. void Moto_TurnRight()
  92. {  
  93.   P1= 0x0A;
  94.   
  95.   Delay_1ms(100);
  96. }
  97. /********************************************************************
  98. * 名称 :Moto_Stop()
  99. * 功能 : 电机1停止,电机2停止,整车表现为停止。
  100. * 输入 : 无
  101. * 输出 : 无
  102. ***********************************************************************/
  103. void Moto_Stop()
  104. {  
  105.   
  106.    P1= 0x00;
  107.    Delay_1ms(100);
  108. }
  109. /********************************************************************
  110. * 名称 :LightTurnOn()
  111. * 功能 : 打开车灯。
  112. * 输入 : 无
  113. * 输出 : 无
  114. ***********************************************************************/
  115. void LightTurnOn()
  116. {  
  117.   
  118.    
  119.    LeftLight=0;   
  120.    RightLight=0;

  121. }/********************************************************************
  122. * 名称 :LightTurnOff()
  123. * 功能 : 关闭车灯。
  124. * 输入 : 无
  125. * 输出 : 无
  126. ***********************************************************************/
  127. void LightTurnOff()
  128. {  
  129.   
  130.    LeftLight=1;   
  131.    RightLight=1;

  132. }
  133. void main()
  134. {
  135.     Delay_1ms(100);
  136. Com_Init();//串口初始化
  137.   
  138.   
  139.   while(1)
  140.   {
  141.    switch(Buffer[0])
  142.     {
  143.       case 0:  Moto_Stop(); break;
  144.       case 1:  Moto_Forward(); break;
  145.    case 2:  Moto_Backward(); break;
  146.    case 3:  Moto_TurnLeft();  break;
  147.    case 4:  Moto_TurnRight();   break;
  148.    case 8:  LightTurnOn();  break;
  149.    case 9:  LightTurnOff();  break;
  150.    default:break;  
  151.     }
  152.    
  153.   }
  154. }
复制代码
以上程序还有一些地方没有看懂,请大神指教:
这句uchar Buffer[4] = {0};
定义了一个数组,但是串口接收回来是送给Buffer[0],且主函数里面也只判断了Buffer[0],为何要定义一个数组Buffer[4]?

手机端的控制软件使用的是wifirobots V1.03,用串口调试助手接收到的是00 FF 00 01 00 FF("前"指令),而单片机程序里面只用了一个8位来接收数据,这样数据不会出错吗?

小弟刚开始接触wificar,所以还有很多不明白的地方,请各位大神多多包涵,希望有朝一日能做出属于自己特色的wificar!   

回复

使用道具 举报

发表于 2013-1-14 01:14:13 | 显示全部楼层
睡前回复一帖
1.如何更改ser2net的波特率?
--用winscp登陆703,(登录前要先修改一次登陆密码),到/etc/目录下,找到ser2net.conf文件,打开即可编辑波特率。
2.如果更改波特率要用到putty,那么怎么使用,最好能从登录界面说起?
--putty的效果和winscp一样的,只不过putty是命令行的,winscp是图形化的,建议不用putty,除非你对linux命令很熟。
3.编译openwart一定要在Linux环境下吗,如何搭建编译环境?
--一定要Linux环境,搭建过程在论坛的openwrt模块里有教程,比较复杂。
4、uchar Buffer[4] = {0};这句不必这样写,历史原因遗留了,直接定义一个uchar就行了。
5、你这个手机端是数据包格式的,我们现在所有的控制端都是数据包格式的,以匹配我们的驱动板协议;而你的下位机代码是单ASCII字符格式的,所以这个控制端是无法和下位机通信的。
回复 支持 反对

使用道具 举报

发表于 2013-1-14 10:09:28 | 显示全部楼层
数据包问题,格式不匹配,你改成发1、2、3、4、5、6,看看,原来发的是FF000100FF这种
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-14 16:02:24 | 显示全部楼层
cxw0102 发表于 2013-1-14 10:09
数据包问题,格式不匹配,你改成发1、2、3、4、5、6,看看,原来发的是FF000100FF这种

亲,我改成单字节了,但是单片机还是接收不到,我现在是把P1口接到了LED上,但是手机端按下按钮LED没变化,单片机稳定后P1口输出的是低电平,就说明Moto_Stop();子程序起作用了,但是单片机接收不到串口发来的信号,这是怎么回事?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-14 16:04:50 | 显示全部楼层
liuviking 发表于 2013-1-14 01:14
睡前回复一帖
1.如何更改ser2net的波特率?
--用winscp登陆703,(登录前要先修改一次登陆密码),到/etc ...

管理员,我现在单片机接收不到串口的数据,手机端改成单字节指令了,但是手机端发出指令后,串口助手能收到,单片机没反应?
回复 支持 反对

使用道具 举报

发表于 2013-1-14 16:53:10 | 显示全部楼层
yaochanged 发表于 2013-1-14 16:02
亲,我改成单字节了,但是单片机还是接收不到,我现在是把P1口接到了LED上,但是手机端按下按钮LED没变化 ...

用ttl直接连单片机呢?排除法啊,一步一步的排除下去就能找到结果了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-14 18:00:31 | 显示全部楼层
cxw0102 发表于 2013-1-14 16:53
用ttl直接连单片机呢?排除法啊,一步一步的排除下去就能找到结果了。

我就是直接连接的,路由的电源是靠单片机供电的
回复 支持 反对

使用道具 举报

发表于 2013-1-14 20:30:15 | 显示全部楼层
yaochanged 发表于 2013-1-14 16:04
管理员,我现在单片机接收不到串口的数据,手机端改成单字节指令了,但是手机端发出指令后,串口助手能收 ...

你用现在的1.04/1.03这些控制端是无法发送单字符指令的,要用专门的ASCII字符控制端才行。
另外,直接用串口助手给单片机发指令单片机正常接受吗?要先确认这点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-15 14:28:04 | 显示全部楼层
liuviking 发表于 2013-1-14 20:30
你用现在的1.04/1.03这些控制端是无法发送单字符指令的,要用专门的ASCII字符控制端才行。
另外,直接用 ...

串口助手直接给单片机发指令是正常的,单片机端的程序也改成多字节的了,用电脑串口发00FF000100FF单片机能正常工作,且指令是正确的,串口助手也能接收到手机端发送的指令,但是703和单片机连接就不行。
回复 支持 反对

使用道具 举报

发表于 2013-1-15 19:32:19 | 显示全部楼层
yaochanged 发表于 2013-1-15 14:28
串口助手直接给单片机发指令是正常的,单片机端的程序也改成多字节的了,用电脑串口发00FF000100FF单片机 ...

是不是703和单片机之间的电平相差太大呢?量量看
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 05:31 , Processed in 1.097267 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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