标题:
为啥我的单片机代码在一个死循环中,但是却只执行了一次,百思不得其解
[打印本页]
作者:
baigezy
时间:
2018-4-15 22:36
标题:
为啥我的单片机代码在一个死循环中,但是却只执行了一次,百思不得其解
单片机代码如下:
#include<main.h>
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x40;
TH1 = 0xFF;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
else
TI = 0;
}
void main()
{
uchar i;
InitUART();
while(1)
{
#include<main.h>
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x40;
TH1 = 0xFF;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
else
TI = 0;
}
void main()
{
uchar i;
InitUART();
while(1)//这里是死循环,但是块内代码就只执行了一次,串行口只发送了一次数据,请问是什么原因
{
DTH11_Ready();
for(i=0;i<5;i++)
{
SendOneByte(DTH11_DATA[i]);
}
}
}
复制代码
作者:
admin
时间:
2018-4-15 23:56
在keil里面单步 或者用仿真芯片硬件仿真就可以知道答案了
作者:
suph007
时间:
2018-4-16 00:08
中间可以不看,你就在死循环里面搞一个i++或者其他的看能不能执行,可以执行说明你的串口通讯程序有问题
作者:
zhangxiaozi
时间:
2018-4-16 00:09
你的程序结构就只能发送一次,错误是你在中断里写了else TI=0,当你发送完一个字节后,马上进入中断,此时因没有接收中断,只能是发送完成中断了,你把TI=0,而你的SENDONEBYTE()里边傻乎乎的等TI为1呢,TI早让别人清零了,所有去掉中断里的ELSE TI=0就可以了
作者:
jwl595
时间:
2018-4-16 08:33
有可能你的中断益出不在执行
作者:
kqqnhzl
时间:
2018-4-16 10:01
一般要给点delay
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1