标题: 单片机串口字符串重复发送问题 [打印本页]

作者: Kormin    时间: 2022-3-27 21:33
标题: 单片机串口字符串重复发送问题
本意是想串口发送一次字符串,但是却一直重复发送了。

程序代码如下:
#include<stc12c5a60s2.h>
#include<stdio.h>

#define uchar unsigned char
#define uint  unsigned int


void delay_ms(uint x)
{        uint j;
        for(;x>0;x--)
                for(j=125;j>0;j--);
}


void uart_init() //串口初始化
{        
        SCON=0x50; //串口方式1
        TMOD=0x20; //T1采用定时方式2  
        TH1=TL1=0xfd;//9600b/s
        PCON=0;    //波特率不加倍
        TR1=1;
}


void uart1_send_byte(uchar byte)
{
        SBUF = byte;
        while(!TI); //等待发送完成
        TI=0; //清TI标志位
}


//串口1 发送 字符串
void uart1_send_string(uchar *str)
{
        while(*str!='\0')
        {
                uart1_send_byte(*str++);
        }
}


void main()
{
        uart_init();
        delay_ms(100);
        uart1_send_string("yes,you can!\r\n");
        delay_ms(500);
}







作者: zhxiufan    时间: 2022-3-28 05:09
程序的尾部加一行语句while(1);就可以了,你的程序跑飞了,每执行一次就复位了,相当于重来,如此反复。
作者: yzwzfyz    时间: 2022-3-28 10:57
main程序结束后,程序运行到什么地方呢?
这一点,由编译平台决定,它的决定是,再回到MAIN!
沙发的方法是,让程序陷在while(1)里,出不去,所以就不会再回到MAIN了。
作者: percy    时间: 2022-3-28 10:58
你的主程序是,分4个部分,初始化,延时,发送,延时,完成了以后重新开始了。你要想好程序何时执行,执行完成以后如何处理。再来写对应功能代码。
作者: Kormin    时间: 2022-3-28 11:19
zhxiufan 发表于 2022-3-28 05:09
程序的尾部加一行语句while(1);就可以了,你的程序跑飞了,每执行一次就复位了,相当于重来,如此反复。

感谢您的热心解答!
作者: Kormin    时间: 2022-3-28 11:19
yzwzfyz 发表于 2022-3-28 10:57
main程序结束后,程序运行到什么地方呢?
这一点,由编译平台决定,它的决定是,再回到MAIN!
沙发的方法 ...

感谢您的热心解答!
作者: Kormin    时间: 2022-3-28 11:20
percy 发表于 2022-3-28 10:58
你的主程序是,分4个部分,初始化,延时,发送,延时,完成了以后重新开始了。你要想好程序何时执行,执行 ...

感谢您的热心解答!
作者: Yoona_Ssl    时间: 2023-8-24 20:57
zhxiufan 发表于 2022-3-28 05:09
程序的尾部加一行语句while(1);就可以了,你的程序跑飞了,每执行一次就复位了,相当于重来,如此反复。

大佬,为啥我加while(1)之前,和楼主一样的问题,加了之后,计算机直接收不到单片机发送的内容了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1