串行双向通信实验c语言程序,115.2K串行通信C语言示例

该博客详细介绍了如何实现115.2k波特率下单片机与PC之间的串行通信程序,采用简单双向校验方式确保数据传输的准确性和速度。程序包括单片机端的发送和接收函数,以及PC端的通信接口。通过100ms超时机制防止通信错误,整体通信速率可达5KB/秒。
摘要由CSDN通过智能技术生成

//115.2k串行口通信程序,校验方式为简单双向校验,

//而且是必要的,因为任何采用中断、crc等的方法

//均很难保证速度和避免错误.

//总体速度5KB/秒本文引用地址:http://www.eepw.com.cn/article/173198.htm

//单片机程序

//使用22.1184晶振

unsigned char time,b_break,b_break_3;

//35.555ms

void int_t0(void) interrupt 1 {

TH0=0;

if ((++b_break_3)>2) b_break=1;

time++;

}

//

unsigned char rec(void) {

TH0=0;b_break_3=0;b_break=0;

while (RI==0) {

if (b_break) return(1); //等待pc发送100ms超时

}

RI=0;

SBUF=SBUF;

return(SBUF);

}

/*返回1表示失败*/

bit sen(unsigned char d) {

SBUF=d;

TH0=0;b_break_3=0;b_break=0;

while (RI==0) {

if (b_break) return(1); //等待pc送回相同字节数据,100ms超时

}

RI=0;

if (SBUF!=d) return(1);

return(0);

}

void main(void) {

unsigned int i;

unsigned char d;

EA=1;

SCON=0xd8;PCON=0x80;

TMOD=0x21;

TL1=TH1=0xff;TR1=1;

TH0=0;ET0=TR0=1;

while (1) {

d=rec();

if ((!b_break)(d==0x55)) {

d=rec();

if (!b_break) {

if (d==0xaa) {

//接收到pc送来的要求发送指令0xaa55

for (i=0;i1000;i++) {

if (sen(i)) {

//发送错误

break;

}

}

} else if (dd==0xaa) {

//接收到pc送来的要求接收指令0xaaaa

for (i=0;i1000;i++) {

d=rec();

if (!b_break) {

//正确接收处理

} else {

//接收错误处理

break;

}

}

}

}

}

}

}

//电脑程序tc2.0

#i nclude stdio.h

#i nclude dos.h

#i nclude process.h

#i nclude string.h

#i nclude conio.h

#i nclude dir.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值