找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3507|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机串口通信如何发送一连串的数据,我的为什么只能收到第一个0xfe

[复制链接]
跳转到指定楼层
楼主
ID:756024 发表于 2020-5-27 16:24 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3黑币
#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发送一次数据
}
}
}
}

最佳答案

查看完整内容

延时函数写错了,for(m=0;m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-5-27 16:24 | 只看该作者
延时函数写错了,for(m=0;m<2000;m++),m最大只能加到255,for循环永远出不去,串口发送一次就卡死在delay();这里了。
回复

使用道具 举报

板凳
ID:660091 发表于 2020-5-27 20:59 | 只看该作者
你没有写中断函数,把中断打开干嘛? 是不是你中断函数没有放上来,程序卡在中断函数里面了
回复

使用道具 举报

地板
ID:282850 发表于 2020-5-27 21:37 | 只看该作者
最后delay(); 时间太短,建议500ms以上试试。
delay(void)写的不好,要改进
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表