115.2k串行口通信程序

来源:本站
导读:目前正在解读《115.2k串行口通信程序》的相关信息,《115.2k串行口通信程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《115.2k串行口通信程序》的详细说明。
简介:本文主要介绍了115.2k串行口通信程序。

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

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

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

//总体速度5KB/秒

//单片机程序

//使用22.1184晶振

unsignedchartime,b_break,b_break_3;

//35.555ms

voidint_t0(void)interrupt1{

TH0=0;

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

time++;

}

unsignedcharrec(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表示失败*/

bitsen(unsignedchard){

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);

}

voidmain(void){

unsignedinti;

unsignedchard;

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;i<1000;i++){

if(sen(i)){

//发送错误

break;

}

}

}elseif(dd==0xaa){

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

for(i=0;i<1000;i++){

d=rec();

if(!b_break){

//正确接收处理

}else{

//接收错误处理

break;

}

}

}

}

}

}

}

//电脑程序tc2.0

#include"stdio.h"

#include"dos.h"

#include"process.h"

#include"string.h"

#include"conio.h"

#include<dir.h>

unsignedchartime_out;

voidinit_com1(void){

outportb(0x3fb,0x80);

outportb(0x3f8,1);

outportb(0x3f9,0x0);

outportb(0x3fb,0x3);

}

voidsen_com1(unsignedchard){

longi;

time_out=0;

while(!(inportb(0x3fd)&0x20));

outportb(0x3fd,0x0);

outportb(0x3f8,d);

i=clock();

while(1){

if(clock()>(i+8)){time_out=1;return;}

if((inp(0x3fd)&0x1)==1)break;

}

if(inp(0x3f8)!=d){time_out=2;return;}

}

unsignedcharrec_com1(void){

longi;

unsignedchard;

time_out=0;

i=clock();

while(1){

if(clock()>(i+8)){time_out=1;return(0);}

if((inp(0x3fd)&1)==1)break;

}

d=inp(0x3f8);

while(!(inportb(0x3fd)&0x20));

outportb(0x3fd,0x0);

outportb(0x3f8,d);

return(d);

}

voidmain(void){

inti;

longst;

init_com1();

st=clock();

sen_com1(0xaa);

if(time_out){printf("CPUnotready!");exit(-1);}

sen_com1(0xaa);

if(time_out){printf("CPUnotready!");exit(-1);}

for(i=0;i<1000;i++){

sen_com1(i);

if(time_out){printf("CPUnotready!");exit(-1);}

}

printf("Totaluse%3.2fS.",(clock()-st)/18.2);

exit(1);

}

提醒:《115.2k串行口通信程序》最后刷新时间 2024-03-14 01:02:53,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《115.2k串行口通信程序》该内容的真实性请自行鉴别。