⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10_3_1.c

📁 51事例原代码 事例多多 应该对初学者很有用
💻 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 + -