用串口调试助手给单片机发数据再将得到的数据返回给上位机,可是我做的中断只能显示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如何更改程序,将所有字符显示出来,中间一定要用到数组的程序哦。 展开
#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如何更改程序,将所有字符显示出来,中间一定要用到数组的程序哦。 展开
2个回答
展开全部
还能打出亮个字符?真不容易,怎么搞出来的呀,你的接收过程都没完成,怎么打出来的呢?
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;
位置就在最后一个括号之前,改了先看看效果怎么样吧。
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;
位置就在最后一个括号之前,改了先看看效果怎么样吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询