在串口接收中断里写:
c = sbuf;
switch (c)
{
case '@':
{
i = 0;
SdataReady = 0;
break;
}
case '*':
{
SdataReady = 1;
break;
}
default:
{
SdataBuf[i++] = c;
}
}
/*检查SdataReady,如果为1表示有新的串口数据,用完后把它清0,i表示缓冲里的数据长度*/
串口助手发数据的格式是:@数据*
注意,别溢出,数据里不能有@和*
思路都出来了,LZ老大,自己实现一下不是很吃亏吧??
呵呵..
思路是一样的...
规定了数据的起始符:'@'结束符:'*'
在串口中断里面进行"解码"
如果收到的是起始符,那就开始初始化
然后开始接,如果不是结束符的话就把数据放入指定的空间
如果收到结束符,然后置一个标志以便别的函数使用
你先把汇编给写写吧...
你都不做,我怎么好意思帮你做完呢?
对吧?大哥
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
原来你要的是这个方面的哈?
具体你用什么芯片,你看具体的芯片的手册里面应该一清二楚
MOV SCON,#50H
换换试试
MOV SCON,#D8H
同时注意一下停止位那些,波特率那些的设置
再请教一下,我在调试的时候发现在执行该程序的时候发现,我的单片机的RST不停的复位,这是什么原因?
会不会是:电压不够,芯片有自动检测功能,再一个可能是看门狗,或是你的复位管脚变短起来了.
另,你怎么判断它在不停地重起呢?
还有一个,你的程序没进入一个死循环也会从头再来的