用串口调试助手给单片机发数据再将得到的数据返回给上位机,可是我做的中断只能显示2个字符,请高手解答?

#include<reg51.h>#defineuintunsignedint#defineucharunsignedchar#definestring_max90uch... #include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define string_max 90
uchar flag,a=0;
uchar buffer_uart[string_max];
void init()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}

void main()
{
init(); // init1();
while(1)
{
if(flag==1)
{
ES=0;
for(a=0;buffer_uart[a]!='\0';a++)
{ SBUF=buffer_uart[a];
while(!TI);
TI=0;
}

flag=0; delay(10); buffer_clear();
ES=1;
}

}
}
void Receive_Uart() interrupt 4
{
ES=0;

if(RI&&(a<=string_max))
{
RI=0;
buffer_uart[a++]=SBUF;
if(SBUF=='\r'||SBUF=='\n')//为了压缩空间
a--;
if(buffer_uart[a]=='\0'||a>=string_max-1)
{// lcd(buffer_uartdelay(10););delay(10);
flag=1; }//收完的标识
if(a>string_max)
ES=0;
}
}
像ERROR只能显示ER如何更改程序,将所有字符显示出来,中间一定要用到数组的程序哦。
展开
 我来答
还是别说话SN
2011-01-27 · TA获得超过708个赞
知道小有建树答主
回答量:333
采纳率:50%
帮助的人:164万
展开全部
还能打出亮个字符?真不容易,怎么搞出来的呀,你的接收过程都没完成,怎么打出来的呢?

void Receive_Uart() interrupt 4
{
ES=0;

if(RI&&(a<=string_max))
{
RI=0;
buffer_uart[a++]=SBUF;
if(SBUF=='\r'||SBUF=='\n')//为了压缩空间
a--;
if(buffer_uart[a]=='\0'||a>=string_max-1)
{// lcd(buffer_uartdelay(10););delay(10);
flag=1; }//收完的标识
if(a>string_max)
ES=0;
}
}

你进了串口中断就关闭了中断使能ES,但直到中断结束也没有再次打开中断,也就是说收到了一个字符后就再也无法进入串口中断,你一共就收到一个‘E’,还没机会打开flag标志来启动发送,居然能在串口收到“ER”,实在不懂。

1.建议你在初始化程序中将flag和buffer_uart数组初始化为0。
2.中断程序的最后要加上
ES=1;
位置就在最后一个括号之前,改了先看看效果怎么样吧。
nphccx
2011-01-28 · TA获得超过3938个赞
知道小有建树答主
回答量:1145
采纳率:0%
帮助的人:970万
展开全部
QT我没有用过
界面自己想办法

只要是c/c++编程,都可以通过调用系统API与串口通信
有本VC与串口通信的书,里面也有提到用C语言操作串口的

建议看这本书
VisualC++/TurboC串口通信编程实践
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式