/* 名称:单片机与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是啥意思
|