新手求教,关于51单片机中断问题,按键发送数据到串口助手,求高手解答!

alisonxia 2013-06-10 05:26:36
串口助手发送数据到单片机接收回显到串口助手,再通过按键控制发送原来数据。
这是代码,按键不能完整发送数据到串口助手显示,不知道问题出在哪里,应该怎样改进啊?????
#include"STC12C5A.h"
#include"intrins.h"

sbit LED0=P0^0;
sbit LED1=P0^1;
unsigned char UART_buff,Rx=0,i=0;
unsigned char System_buff[20];
bit new_rec=0,send_ed=0;

void delay_us(unsigned int t)
{
while(t--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}

void delay_ms(unsigned int time)
{
for(;time>0;time--)
{
delay_us(1000);
}
}

void SendASC(unsigned char d)
{
SBUF=d;
}

void USART_Init()
{
PCON&=0x7f;
SCON=0x50;
AUXR|=0x40;
AUXR&=0xfe;
TMOD&=0x0f;
TMOD|=0x20;
TL1=0xB2;
TH1=0xB2;
ET1=0;
TR1=1;
ES=1;
EA=1;
}

void main(void)
{
USART_Init();
while(1)
{
LED0=0;
P2=0X0f;
if((new_rec==1)&&(send_ed==1))
{
LED1=0;
LED0=1;
delay_ms(1000);
LED1=1;
new_rec=0;
send_ed=0;
}
if(P2!=0X0f)
{
delay_ms(5);
if(P2!=0X0f)
{
while(P2!=0X0f);
{
for(i=0;i<20;i++)
{
SendASC(System_buff[i]);
for(i=0;i<20;i++)
{
System_buff[i]=0;
}
}
LED1=0;
LED0=1;
delay_ms(1000);
LED1=1;
}
}
Rx=0;
i=0;
}
}
}

void servise() interrupt 4
{
EA=0;
if(RI==1)
{
if(Rx<20)
{
UART_buff=SBUF;
System_buff[Rx]=SBUF;
Rx++;
SendASC(UART_buff);
RI=0;
new_rec=1;
}
}
else
{
TI=0;
send_ed=1;
}
EA=1;
}
...全文
173 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mybha 2013-06-15
  • 打赏
  • 举报
回复
for(i=0;i<20;i++) { SendASC(System_buff[i]); for(i=0;i<20;i++) { System_buff[i]=0; } } 仔细看看这段代码,好像有问题
_胖胖 2013-06-10
  • 打赏
  • 举报
回复
粗略看了下语法,是不是while(P2!=0X0f);多了个分号?

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧