标题:
C51单片机串口通讯num不赋值为什么一直发送00 00 00,num换个值比如3,就一直不停的发3
[打印本页]
作者:
89C52RC单片机
时间:
2023-3-22 08:59
标题:
C51单片机串口通讯num不赋值为什么一直发送00 00 00,num换个值比如3,就一直不停的发3
[attach]311085[/attach]
单片机代码如下,发送不停,发送不受控制,发送函数只运行了一次
#include <REGX51.H>
unsigned char num;
void URET_TX()
{ SBUF=num; //发送数据
while(!TI);//等待发送中断请求标志位为1(已发送)
TI=0; //发送中断请求标志位清0
}
void URET_Tu(void) //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1;//启动定时器
}
void main(void)
{
URET_Tu();
URET_TX();
}
1.png
(20.91 KB, 下载次数: 91)
下载附件
2023-3-22 15:13 上传
作者:
glinfei
时间:
2023-3-22 10:21
你把 while(!);放到最后,就只发一次了。
作者:
hche1993
时间:
2023-3-22 13:38
楼上说的对,URET_TX();后面加个while(1); 重复发数据是因为URET_TX();执行完,后面没有程序了,跑飞复位了
作者:
coody_sz
时间:
2023-3-22 14:16
连大循环都没有?那就是这样了,不断重复的运行main()。
作者:
暖西夏
时间:
2023-3-22 14:37
程序一直在运行main函数,一直在发送数据,所以就一直接收数据了,如果想执只发一次,就把程序修改为void main(void)
{
URET_Tu();
while(1)
{URET_TX();}
}
作者:
yzwzfyz
时间:
2023-3-22 16:23
无论你赋值与否,它总有一个值,是什么?取决于上最的状态或初始化值。
所以发0,不必奇怪。
作者:
89C52RC单片机
时间:
2023-3-22 16:54
放大循环里面也不行,for循环也不行,是不是看门狗的原因
作者:
Hephaestus
时间:
2023-3-22 17:58
main最后一行后面没有死循环,死机了,自动复位,又重新执行了main。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1