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

#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如何更改程序,将所有字符显示出来,中间一定要用到数组的程序哦。

还能打出亮个字符?真不容易,怎么搞出来的呀,你的接收过程都没完成,怎么打出来的呢?

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;
位置就在最后一个括号之前,改了先看看效果怎么样吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-28
QT我没有用过
界面自己想办法

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

建议看这本书
VisualC++/TurboC串口通信编程实践

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网