打印

请问能调试串口接收程序吗?

[复制链接]
3949|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我通过串口调试助手调试了串口发送程序,调试的结果是正确的。我现在想反过来让串口助手发数据,让keil中的接收程序来接收数据,但是我找了很长时间也没有找到能观察串口助手调试助手发来数据的窗口。我把发送程序放在串口调试程序的发送文件处,点击“发送”,在keil中让接收程序跑起来,但是看了所有的地方,都没有反应,请教一下,能否用keil和调试助手调试接收程序?

相关帖子

沙发
playjian| | 2010-4-26 21:36 | 只看该作者
串口偶调试助手有发送数据的功能呀~~有发送的窗口  还能选择是要十六进制发送还是字符发送 楼主用的什么版本  要不你邮箱留一个我发给你

使用特权

评论回复
板凳
宇容创行| | 2010-4-26 21:42 | 只看该作者
要有两个串口,交叉连上
keil 软仿真分配一个,com工具占用一个

使用特权

评论回复
地板
likefpga|  楼主 | 2010-4-27 07:13 | 只看该作者
两个串口靠VSPD软件模拟, com1分配给keil中接收程序,com2分配给串口调试助手,把发送文件装入串口调试助手的发送数据的地方,然后调试串口接收功能。我的问题是看发送结果在什么地方能看到,是在keil软件中能看到串口助手发来的数吗?

使用特权

评论回复
5
冷漠| | 2010-4-27 10:24 | 只看该作者
写个接收程序就行了。不用2个串口,你原来怎么向调试助手发数据的,现在就怎么收数据。PC机串口9针第3脚“发送”输出数据,第2脚“接收”输入数据。第5脚数据“地”。
#include<reg51.h>

unsigned char arr[20];

void main()
{
//串口初始化;
while(1);
}
void seres() interrupt 4
{
static  char  i;
arr[i++]=SBUF;
RI=0;
}

使用特权

评论回复
6
冷漠| | 2010-4-27 10:36 | 只看该作者
本帖最后由 冷漠 于 2010-4-27 10:40 编辑

歪歪介绍的软件挺好用的。



以上是以下串口助手发送"01  a1"  十六进制和ASCII码的捕捉验证。

使用特权

评论回复
7
likefpga|  楼主 | 2010-4-27 20:50 | 只看该作者
引:“你原来怎么向调试助手发数据的,现在就怎么收数据”,这句话能给个详细点儿的解释吗?那个serial port monitor窗口中的数是keil中程序接收到的数据吗?

使用特权

评论回复
8
冷漠| | 2010-4-28 10:08 | 只看该作者
本帖最后由 冷漠 于 2010-4-28 10:10 编辑

你原来怎样和PC机串口相接的,保持硬件连接不动。——你不是已经发送成功了吗?说明你串口连接正确,怎么又想出什么2个串口(COM2接什么)的问题?
一共占用PC机一个串口3根线。哪来用第2个串口?笔记本只有一个串口,怎么办?没法做了?

serial port monitor窗口中的数是对串口助手发送的数据“01 a1”的捕捉,也就是说串口助手确实发出了01 a1,serial port monitor捕捉到了。自己程序收到的应该和它一样;如果自己的程序没收到或者收到乱码,问题归结在自己一方,不是助手的问题;——范围缩小了。

5楼给的程序收到的内容和serial port monitor窗口中显示的数完全一样。

使用特权

评论回复
9
歪 歪| | 2010-4-29 12:14 | 只看该作者
用虚拟串口把串口调试助手和KEIL两个应用程序串口连上,用comtrace监视数据流,就可以看到串口助手发送的数据了。你可以在KEIL中把收到的数据返回去,判断KEIL程序是否正确接收。这样你就可以从comtrace的串口中看到数据内容,不必在KEIL里找窗口看了,而且这个串口数据是在Windows内核截获的,能比KEIL自身监视更多信息。

注意:一定按照下面详细使用方法里说明的顺序操作。

下载地址:
http://download.cnet.com/ComTrac ... 6892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!

FAQ
How to use it?
1.Run ComTrace
2.Select serial port name(e.g. COM1)
3.Run serial port application program that you want to debug(e.g. Windows HyperTerminal)
4.debug......(e.g. press any key in Windows HyperTerminal, then watch the data that is captured.)
5.Close application program(e.g. Windows HyperTerminal)
6.Close ComTrace

Notice: You must operate by the order, only support Win2000 and WinXp(32 bit) system!

使用特权

评论回复
10
likefpga|  楼主 | 2010-4-30 21:02 | 只看该作者
谢谢冷漠和歪歪,我已经彻底明白了。

使用特权

评论回复
11
likefpga|  楼主 | 2010-5-1 07:15 | 只看该作者
引用9楼: 你可以在KEIL中把收到的数据返回去,判断KEIL程序是否正确接收。
这句话是什么意思,在keil中怎么把数据返回去,返回到哪里?

使用特权

评论回复
12
冷漠| | 2010-5-1 10:07 | 只看该作者

请教歪歪:虚拟串口用法。

请教歪歪:如何“用虚拟串口把串口调试助手和KEIL两个应用程序串口连上”?我下了个虚拟串口(包含TCP/IP的),不会用,求教了。

使用特权

评论回复
13
歪 歪| | 2010-5-1 11:22 | 只看该作者
re:11
    自己编程,把收到的数据原样发回去。
re:12
    虚拟串口有很多种,我说的是NULL MODEM,就是虚拟出两个串口,模拟物理连接线。
    你说的那个是串口转以太网。

使用特权

评论回复
14
冷漠| | 2010-5-1 13:04 | 只看该作者
多谢歪歪,一语点破咱浆糊头脑。

使用特权

评论回复
15
computer00| | 2010-5-1 13:23 | 只看该作者
keil本来就带了一个串口终端显示呀,就是那个serials。

使用特权

评论回复
16
likefpga|  楼主 | 2010-5-1 15:39 | 只看该作者
请问13楼,你说的编程序是对串口的SBUF数据缓冲器进行操作吧?

串口接收程序
       ORG     0000H
       LJMP    MAIN
       ORG     0023H
       LJMP    COM_INT
       ORG     1000H
MAIN:  MOV     SP,#53H    ;设置堆栈指针
       ACALL   RECEL     ;调用接收子程序
       SJMP    $
RECEL: MOV     R0,#78H    ;设置地址接收区
       MOV     TMOD,#20H  ;设置定时器/计数器工作方式
       MOV     TH1,#0F3H  ;设置波特率
       MOV     TL1,#0F3H  
       MOV     PCON,#80H  ;波特率加倍
       SET     TR1        ;开计数器
       MOV     SCON,#50H  ;设置串行口工作方式
       MOV     IE,#90H    ;开中断
       CLR     F0         ;清标志位
       CLR     7FH
WAIT:  JNB     7FH,WAIT    ;查询标志位等待接收
           RET
COM_INT:  PUSH   DPL      ;压栈,保护现场
          PUSH   DPH   
          PUSH   ACC
          CLR    RI        ;清接收中断标志位
          JB     F0,R_DATA ;判断接收的是数据还是地址F0=0为地址
          MOV    A,SBUF    ;接收地址
          MOV    @R0,A     ;将地址桢送指定的寄存器
          DEC    R0
          CJNE   R0,#74H,RETN
          SETB   F0        ;置位标志位,地址接收完毕
RETN:  POP    ACC       ;出栈,恢复现场
          POP    DPH
          POP    DPL
          RETI             ;中断返回
R_DATA:   MOV    DPH,78H   ;数据接收程序区
          MOV    DPL,77H   
          MOV    A,SBUF    ;接收数据
          MOVX   @DPTR,A   ;送指定的数据存储单元中
          INC    77H       ;地址加1
          MOV    A,77H     ;判断当前接收的数据的地址是否向高8位进位
          JNZ    END2
          INC    78H
END2: MOV    A,76H
          CJNE   A,78H,RETN ;判断是否为最后一桢数据,不是则继续
          MOV    A,75H
          CJNE   A,77H,RETN ;是最后一桢数据则清各种标志位
          CLR    ES
          CLR    EA
          SETB   7FH
          SJMP   RENT
          END

使用特权

评论回复
17
歪 歪| | 2010-5-1 17:35 | 只看该作者
re:15
    用comtrace不影响keil的串口显示,你可以两个都看。

re:16
    对

使用特权

评论回复
18
likefpga|  楼主 | 2010-5-1 19:20 | 只看该作者
我在这两句
          MOV    A,SBUF    ;接收地址
          MOV    @R0,A     ;将地址桢送指定的寄存器
下面加了一句
          MOV   SBUF, A    可以这样写吗,能把收到的地址桢发到串口调试助
                                    手的数据接收区吗?好像不行?!

使用特权

评论回复
19
likefpga|  楼主 | 2010-5-2 18:06 | 只看该作者
我把串口接收程序中的部分语句改成

MOV  A, SBUF
MOV  SBUF, A
MOV  @R0,A
希望串口调试助手发的数,能够通过keil中的接收程序中的这三条语句将发送的数返回到串口调试助手的接收区,但是接收到的数据跟发给keil中接收程序的数不一样,请问,我这样改写,不能达到接收和发送数据的一致吗?

使用特权

评论回复
20
likefpga|  楼主 | 2010-5-3 13:14 | 只看该作者
请歪歪,给出个keil中的接收程序,使其能将收到串口助手发过来的数,再发回给串口助手。就在我16楼写的基础上改吧,十分的感谢。

使用特权

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

本版积分规则

6

主题

34

帖子

0

粉丝