📄 10_3_1.c
字号:
//
#include<stdio.h>
#include<dir.h>
#include<dos.h>
#include<conio.h>
#include<string.h>
#include<alloc.h>
#include<ctype.h>
#include<time.h>
FILE *p;
void unsigned senddata(char data);
void char receivedata();
void unsigned sendgroup();
void unsigned receivegroup();
time_t T1,T2;
int i,data1[10],data2[10];
unsigned char c,c1,s,s1,addr_send,addr_receive,temp;
main()
{
outportb(0x2FBH,0x80H); //串口初始化
outportb(0x2F8H,0x60H); //波特率为1200
outportb(ox2F9H,0x00H);
outportb(0x2FCH,0x00H);
while(1)
{
if (kbhit()) exit(0); //按任意键退出
sendgroup(); //发送一组数据
receivegroup(); //接收一组数据
}
}
//PC机上采用Turbo C编写的发送和接收程序实例
void unsigned sendgroup()
{
FILE *p;
outportb(0x2FBH,0x2BH); //设置传送地址
addr_send=0xF1H;
while(1)
{
if (kbhit()) exit(0); //按任意键退出
senddata(addr_send); //发送地址
addr_receive=receivedata(); //接收回送的地址
if (addr_receive=addr_send)
break; //正确则跳出
}
outportb(0x2FBH,0x3BH); //置传送数据
if ((p=fopen(test.txt","r"))==NULL)
{
printf("\n cannot open the file\n");
exit(0); //出错,跳出
}
retransmit:
s=0;
for (i=0;i<=10;i++)
{
datal[i]=fgetc(p); //取一个数据
s+=data1[i]; //累加
sendata(data1[i]); //发送一个数据
}
senddata(s); //发送累加值
s1=receivedata(); //接收回送码
if (s1=0)
{
printf("OK"); //传送正确,显示"OK"
fclose(p); //关文件
}
else
{
fseek(p,-10L,SEEK_CUR);
goto retransmit; //重新发送
}
}
void unsigned receivegroup()
{
FILE *p;
outportb(0x2FBH,0x2BH); //设置传送地址
addr_send=0xF1H;
while(1)
{
if (kbhit()) exit(0); //按任意键退出
senddata(addr_send); //发送地址
addr_receive=receivedata(); //接收回送的地址
if (addr_receive=addr_send)
break; //正确则跳出
}
outportb(0x2FBH,0x3BH); //置传送数据
if ((p=fopen(test.txt","r"))==NULL) //打开文件
{
printf("\n cannot open the file\n");
exit(0); //出错,跳出
}
receive:
s=0;
for (i=0;i<=10;i++)
{
data1[i]=receivedata(); //取一个数据
s+=data2[i]; //累加
fprint(%d",data2[i]); //写入文件
}
s1=receivedata(); //接收累加值
if (s1=s)
{
senddata(0x00H); //相等则发送00H
printf("OK"); //接收正确,显示"OK"
fclose(p); //关文件
}
else
{
senddata(0xFFH);
fseek(p,-10L,SEEK_CUR); //文件指针回退10个,准备重新接收
goto receive; //重新发送
}
}
unsigned char receivedata() //接收函数
{
TI=time(NULL); //设置T1
while(1)
{
T2=time(NULL); //设置T2
if (difftime(T2,T1)>=2) //时间差是否大于2S?
{
printf("overtime\n");
exit(0);
}
c1=inportb(0x2FDH); //读取状态
if ((c1&0x01H)!=0) //若第0位为1,从接收数据寄存器0x2F8H中读取一帧接收到的数据
{
temp=intportb(0x2F8H); //接收一帧数据
break;
}
}
return(temp);
}
void unsigned senddata(char data) //发送函数
{
TI=time(NULL); //设置T1
while(1)
{
T2=time(NULL); //设置T2
if (difftime(T2,T1)>=2) //时间差是否大于2S?
{
printf("overtime\n");
exit(0);
}
c=inportb(0x2FDH); //读取状态
if ((c&0x20H)!=0) //若第5位为1,将数据写入0x2F8H中
{
outportb(0x2F8H,data); //发送一帧数据
break;
}
else continue;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -