单片机C语言程序设计:单片机与PC通信/*名称:单片机与PC通信 说明:单片机可接收PC发 送的数字字符,按下单片机的 K1键后,单片机可向PC发送 字符串。在Proteus环境下完成 本实验时,需要安装Virtual SerialPortDriver和串口调试助 手。本例缓冲100个数字字符, 缓冲满后新数字从前面开始存放(环形缓冲)。 */ #include #defineucharunsignedchar #defineuintunsignedint ucharReceive_Buffer[101];//接收缓冲 ucharBuf_Index=0; //数码管编码 //缓冲空间索引 ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //延时 voidDelayMS(uintms) { uchari; while(ms--)for(i=0;i } //主程序 voidmain() { uchari; 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 {//收到-1为一次显示结束 if(Receive_Buffer[i]==-1)break; P0=DSY_CODE[Receive_Buffer[i]]; DelayMS(200); } DelayMS(200); } } //串口接收中断函数 voidSerial_INT()interrupt4 { ucharc; if(RI==0)return;//关闭串口中断 ES=0;//清接收中断标志 RI=0; c=SBUF; if(c=‘0’&&c {//缓存新接收的每个字符,并在其后放-1为结束标志 Receive_Buffer[Buf_Index]=c-’0’; Receive_Buffer[Buf_Index+1]=-1; Buf_Index=(Buf_Index+1)%100; } ES=1; } voidEX_INT0()interrupt0//外部中断0 { uchar*s=这是由8051发送的字符串!rn; uchari=0; while(s[i]!=‘‘) { SBUF=s[i]; while(TI==0); TI=0; i++; } } 扩展阅读:单片机向主机发送字符串程序