求一段简单的串行通信接收程序(汇编)

ardentyears   2007-3-22 15:08 楼主
是从串行调试助手发的, 只要接收就可以了。

回复评论 (13)

在串口接收中断里写:

c = sbuf;
switch (c)
{
    case '@':
    {
        i = 0;
        SdataReady = 0;
        break;
    }
    case '*':
    {
        SdataReady = 1;
        break;
    }
    default:
    {
        SdataBuf[i++] = c;
    }
}
/*检查SdataReady,如果为1表示有新的串口数据,用完后把它清0,i表示缓冲里的数据长度*/
串口助手发数据的格式是:@数据*
注意,别溢出,数据里不能有@和*
点赞  2007-3-22 16:24
是否有汇编程序 ?
点赞  2007-3-22 16:33
思路都出来了,LZ老大,自己实现一下不是很吃亏吧??

呵呵..
点赞  2007-3-22 16:34
我不懂C
点赞  2007-3-22 16:36
思路是一样的...

规定了数据的起始符:'@'结束符:'*'
在串口中断里面进行"解码"
如果收到的是起始符,那就开始初始化
然后开始接,如果不是结束符的话就把数据放入指定的空间
如果收到结束符,然后置一个标志以便别的函数使用
点赞  2007-3-22 16:40
你先把汇编给写写吧...

你都不做,我怎么好意思帮你做完呢?

对吧?大哥
点赞  2007-3-22 16:41
ORG 00H
SJMP START
ORG 30H
START:
MOV P1,#0FH
MOV TMOD,#20H
MOV TL1,#0FCH
MOV TH1,#0FCH
MOV PCON,#00H
CLR ES
SETB TR1
MOV SCON,#50H
ML0:
JBC RI,ML1
SJMP ML0
ML1:
MOV A,SBUF
MOV P1,A

END
点赞  2007-3-22 16:43
原来你要的是这个方面的哈?

具体你用什么芯片,你看具体的芯片的手册里面应该一清二楚

点赞  2007-3-22 16:47
普通的51芯片, 就是调不出
点赞  2007-3-22 16:48
MOV SCON,#50H
换换试试
MOV SCON,#D8H

同时注意一下停止位那些,波特率那些的设置
点赞  2007-3-22 17:04
再请教一下,我在调试的时候发现在执行该程序的时候发现,我的单片机的RST不停的复位,这是什么原因?
点赞  2007-3-22 22:12
会不会是:电压不够,芯片有自动检测功能,再一个可能是看门狗,或是你的复位管脚变短起来了.
点赞  2007-3-23 09:02
另,你怎么判断它在不停地重起呢?

还有一个,你的程序没进入一个死循环也会从头再来的
点赞  2007-3-23 09:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复