今天偶然去弄一个很早以前运行通过的串口通信实验例程,源代码中,有个功能,即按K1后,单片机会通过串口自动发送一个字符串给电脑,并显示在串口调试软件的接收窗口中,当我把K1这个按钮去掉,直接去运行K1这部分代码时,此部分代码却无法运行,不能自动发送字符串给PC,百思不得。
下面是部分代码:
uchar T1_com[]=" Receving Data:\0"; //发送的字符串
void K1_com(void) //按键K1功能子函数
{
uchar i=0;
IF(!K1) //按键是否按下
{
while(T1_com!='\0') //发送预定字符是否完毕
{
SBUF=T1_com; //发送预定字符
while(!ti); //判断字符是否发送完毕
TI=0; //停止发送字符
i++; //计数加1,返回发下个字符
}
}
}
下面是main部分代码
while(1) //循环
{
K1_com(); //调用按键子函数
delay(); //按键间隔延时
if(RI) //判断是否收到PC机串口信号
{
x=SBUF; //收到的信号存X
lcd1602_rendd(x); //收到的数字送显示子函数显示
SBUF=x; //收到数字送回串口
while(!TI); //判断串口发送是否完成
TI=0; //停止发送字符
此后代码省略.
以上代码,当按下目标板上的K1时,自动发送设定好的字符串到PC
我把上面 void K1_com(void) 子函数改成如下代码
void usart_com(void) //串口发送固定字符子函数
{
while(T1_com!='\0') //发送预定字符是否完毕
{
SBUF=T1_com; //发送预定字符
while(!TI); //判断字符是否发送完毕
TI=0; //停止发送字符
i++; //计数加1,返回发下个字符
}
}
将main主程序中改为
void main(void) //主程序开始
{
uchar x;
T1_com_init(); //调定时器1串口初始化子函数
LED0=0; //LED0点亮,
usart_com();
while(1) //循环
{
if(RI) //判断是否收到PC机串口信号
{
x=SBUF; //收到的信号存X
SBUF=x; //收到数字送回串口
while(!TI); //判断串口发送是否完成
TI=0; //停止发送字符
RI=0; //停止接收字符
}
}
程序不能自动发送设置好的字符串,相当于跳过usart_com(); 子函数,直接运行后面的代码。
|