蓝桥杯模块之串口通信

先将串口通信的初始化程序从STC-ISP软件中的波特率计算器中,把初始化程序导出来
对于STC15f2k60S2的单片机来讲,用串口1,定时器1的就可以
如果要开串口中断的话,记得串口中断号为4,即,interrupt 4

首先得解释一下,RI,TI
RI可以想成是Receive接受这个单词代表的,一般情况下等于0,
当单片机接收到PC机上发的消息,就会被置1,通常需要用软件再置0,才能继续正常工作
TI可以想成是Text接受这个单词代表的,一般情况下等于0,
当PC机接收到单片机上发的消息,就会被置1,通常需要用软件再置0,才能继续正常工作

简单的PC向单片机发送十六进制的数据:

        if(RI==1)
        {
            RI=0;
            P2=0x80;
            P0=SBUF;
        }
PC发送字符到数码管上显示(发字符串的话,我觉得不得行,但是可以如下两例子):
        if(RI==1)
        {
            RI=0;
            yi=SBUF;
        }
发字符,然后判断,这个是在中断里的
        void ser() interrupt 4//串口中断号为4
        {
            RI=0;
            num=SBUF;
            if(num==’$’)
            {
                P2=0x80;P0=0x55;
            }
        }

注:发送字符串的话,需要把发送串口调整到文本模式

接下来是,单片机向PC机发送数据:
单片机向PC机发送字符串好说,就这个函数添上去调用就可以了
void send(uchar *p)
{
    uchar index=0;
    do
    {
        SBUF=p[index++];
        while(TI==0);
        TI=0;
    }while(p[index]!=0);
}
单片机向PC机发送数字就有点不好弄了,我们接着看
    strcmp()函数属于头文件为string.h的头文件里
    if(strcmp(anhao,"AAASSS")==0)//为0的时候相等
    {
        anhao_chuan=1;
    }
向PC机发送数字的话,还是用sprintf(zifu,%d,num)函数比较好
其中sprintf(zifu,"%d",num);属于头文件<stdio.h>
zifu为存储转化后的字符的数组,num为需要转化的数字
之后再调用上面send(zifu);发送就可以
例如:
    sprintf(zifu,"%d",num);
    send(zifu);

发布了5 篇原创文章 · 获赞 9 · 访问量 133

猜你喜欢

转载自blog.csdn.net/weixin_41946168/article/details/104538169