在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2126|回复: 0

[资料] 115.2K串行通信C措辞示例

[复制链接]
发表于 2011-4-11 15:00:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
//115.2k串行口通信法度,校验体式技俩为简单双向校验,
//并且是需要的,因为任何采用中止、crc等的方式
//均很难包管速度和避免错误.
//总体速度5KB/秒
//单片机法度
//哄骗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=0xd8CON=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;
      }
     }
    } else if (dd==0xaa) {
     //领受到pc送来的要求领受指令0xaaaa
     for (i=0;i<1000;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>

unsigned char time_out;
void init_com1(void) {
outportb(0x3fb,0x80);
outportb(0x3f8,1);
outportb(0x3f9,0x0);
outportb(0x3fb,0x3);
}
void sen_com1(unsigned char d) {
long i;
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;}
}
unsigned char rec_com1(void) {
long i;
unsigned char d;
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);
}
void main(void) {
int i;
long st;
init_com1();
st=clock();
sen_com1(0xaa);
if (time_out) {printf("CPU not ready!");exit(-1);}
sen_com1(0xaa);
if (time_out) {printf("CPU not ready!");exit(-1);}
for (i=0;i<1000;i++) {
  sen_com1(i);
  if (time_out) {printf("CPU not ready!");exit(-1);}
}
printf("Total use %3.2f S.",(clock()-st)/18.2);
exit(1);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-2-8 23:37 , Processed in 0.012507 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表