标题: 51单片机串口通信如何发送一连串的数据,我的为什么只能收到第一个0xfe [打印本页]

作者: hax    时间: 2020-5-27 16:24
标题: 51单片机串口通信如何发送一连串的数据,我的为什么只能收到第一个0xfe
#include<reg51.h>
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //流水灯控制码
sbit key=P3^2;
void send(unsigned char dat) //数据发送程序
{
SBUF=dat; //将要发送的数据存入发送缓冲器中
while(TI==0); //若发送中断标志位没有置1(正在发送数据),就等待
TI=0; //若发送完成,TI自动置1,这里把它清零
}
void delay(void) //延时函数
{
unsigned char m,n;
for(m=0;m<2000;m++) //延时约50ms
for(n=0;n<250;n++);
}
void main(void)
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2(可自动重装的8位定时器)
SCON=0x40; //串口工作方式1,不允许接收
PCON=0x00; //波特率不倍增
TH1=0xfd; //波特率为2400b/s
TL1=0xfd;
TR1=1; //启动定时器T1(T1作波特率的发生器)
EA=1;
ET1=1;
while(1)
{
if(key==0)
{
for(i=0;i<8;i++) //一共8位的流水灯控制码
{
send(tab[i]); //发送数据
delay(); //每50ms发送一次数据
}
}
}
}
作者: wulin    时间: 2020-5-27 16:24
延时函数写错了,for(m=0;m<2000;m++),m最大只能加到255,for循环永远出不去,串口发送一次就卡死在delay();这里了。
作者: along123321    时间: 2020-5-27 20:59
你没有写中断函数,把中断打开干嘛? 是不是你中断函数没有放上来,程序卡在中断函数里面了
作者: f556    时间: 2020-5-27 21:37
最后delay(); 时间太短,建议500ms以上试试。
delay(void)写的不好,要改进




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1