因为在你recieve()函数里有神散一个while(1)循环处理过程,其实你这程序在用KEIL编译仿升的时候会有警告游大氏提示的,即:led1=0这句将永远不会被执行的
从事音频设备开发好多年——VX:xuquanfugui-2020
SBUF = *pTI = 0
这里的SBUF与TI都没有定义,应该不在这个函数里。猜测,SBUF,是发送缓冲区。TI是发送标志位。当发送缓冲区有字符时,等待发送标志位为0。毁滑也即这个标志位为0的时候,这个字符已经发送纤毕腊出去了。然后,p++,SBUF=*p,再发送下一个字符。
全部的循环,直到遇到字符串的结束标志'\0'。也即最后一个字符之后的字数芹符串结束标志,这个发送函数也就执行完了。
#include<reg51.h>
void initUART(void)
{
TMOD=0x20 //M1=1,M0=0 定时器1工作方式2(定时常数重装,8 位)
SCON=0x50 //SM0=0,SM1=1,REN=1 串口工作方式1,允许接收
TH1=0xfd //晶液冲振11.0592时,波喊蔽特率9600
TL1=TH1 //TL1计数,溢出后,TH1值送入TL1
EA=1 闹渗歼//开总中断
ES=1 //允许串口中断
TR1=1 //启动定时器1
}
void main()
{
while(1)
initUART() //调用串口初始化子程序
}
void UARTinterrupt( ) interrupt 4
{
if(RI)
{
RI=0
P1=SBUF
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)