打印
[51单片机]

单片机与PC通信程序

[复制链接]
768|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
/*        名称:单片机与PC通信
        说明:单片机可接收PC发送的数字字符,按下单片机的K1键后,单片机可向PC发送字符串。在Proteus环境下完成本实验时,需要安装Virtual Serial Port Driver和串口调试助手。本例缓冲100个数字字符,缓冲满后新数字从前面开始存放(环形缓冲)。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar Receive_Buffer[101];                //接收缓冲
uchar Buf_Index=0;                        //缓冲空间索引
//数码管编码
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//延时
void DelayMS(uint ms)
{
        uchar i;
        while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
        uchar i;
        P0=0x00;
        Receive_Buffer[0]=-1;
        SCON=0x50;                //串口模式1,允许接收
        TMOD=0x20;                //T1工作模式2
        TH1=0xfd;                //波特率9600
        TL1=0xfd;
        PCON=0x00;                //波特率不倍增
        EA=1;EX0=1;IT0=1;
        ES=1;IP=0x01;
        TR1=1;
        while(1)
        {
                for(i=0;i<100;i++)
                {        //收到-1为一次显示结束
                        if(Receive_Buffer==-1) break;
                        P0=DSY_CODE[Receive_Buffer];
                        DelayMS(200);
                }
                DelayMS(200);
        }
}
//串口接收中断函数
void Serial_INT() interrupt 4
{
        uchar c;
        if(RI==0) return;
        ES=0;                                //关闭串口中断
        RI=0;                                //清接收中断标志
        c=SBUF;
        if(c>='0'&&c<='9')
        {        //缓存新接收的每个字符,并在其后放-1为结束标志
                Receive_Buffer[Buf_Index]=c-'0';
                Receive_Buffer[Buf_Index+1]=-1;
                Buf_Index=(Buf_Index+1)%100;
        }
        ES=1;
}
void EX_INT0() interrupt 0                //外部中断0
{
        uchar *s="这是由8051发送的字符串!\r\n";
        uchar i=0;
        while(s!='\0')
        {
                SBUF=s;
                while(TI==0);
                TI=0;
                i++;
        }
}


问题:-----------------------------------------

1.uchar Receive_Buffer[101];       
uchar Buf_Index=0;------------------为什么第一个变量是中括号而且里面带数字101?101代表啥含义?第一个变量直接就=0S是啥含义?

2.Receive_Buffer[0]=-1;-----------------这条语句啥意义?


3.if(Receive_Buffer==-1) break;------------------这个变量i啥意思?

4.if(c>='0'&&c<='9')----------------这括号里面的语句啥意思?

5.Receive_Buffer[Buf_Index]=c-'0';
                Receive_Buffer[Buf_Index+1]=-1;
                Buf_Index=(Buf_Index+1)%100;-------------------------这三个语句完全没看懂


6.uchar *s="这是由8051发送的字符串!\r\n";
        uchar i=0;
        while(s!='\0')
        {
                SBUF=s;----------------------s!这个字符串啥含义?    SBUF=s------------------s是啥意思

图片3.png (30.1 KB )

图片3.png

使用特权

评论回复

相关帖子

沙发
QWE4562009|  楼主 | 2020-7-10 12:08 | 只看该作者
第六点是while(s[i]!='\0'),打错了

使用特权

评论回复
板凳
QWE4562009|  楼主 | 2020-7-13 12:06 | 只看该作者
QWE4562009 发表于 2020-7-10 12:08
第六点是while(s!='\0'),打错了

《新概念51单片机C语言教程:入门、提高、开发、拓展》这本书哪个有电子书的  提供下  谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

920

主题

2818

帖子

22

粉丝