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

📄 myserialport.c

📁 单片机初学者最后的资料
💻 C
字号:
#include <reg51.h>
#include <stdio.h>
#include <string.h>

typedef unsigned char   BYTE;
typedef unsigned short   WORD;
typedef unsigned long   DWORD;

#define MSB(word)      (BYTE)(((WORD)(word) >> 8) & 0xff)
#define LSB(word)      (BYTE)((WORD)(word) & 0xff)

sbit P3_6=P3^6;		 //HM628128写使能
sbit P3_7=P3^7;		//HM628128读使能
sbit P3_2=P3^2;		//计算机发送,单片机接收的标志
sbit P3_3=P3^3;		//单片机发送,计算机接收的标志
sbit P3_4=P3^4;	//最高位

bit SendToPc=0;	//读到计算机中的标志位

void main(void)	   //主程序
{
	unsigned int count3;
	DWORD t;
	unsigned int i;
	unsigned int j;
	SCON=0x50;			//串口模式1,允许接收
	TMOD|=0x20;			//初始化T1为定时功能,模式2
	PCON|=0x80;			//设置SMOD=1
	TL1=0xF4;			//波特率4800bit/s,初值
	TH1=0xF4;
	IE|=0x90;			//中断
	TR1=1;				//启动定时器
	P3_6=1;			 //write enable
	P3_7=1;			 //read enable
	count3=0;
	t=0;
	SendToPc=1;
	while(1)
	{
		while(P3_2==0) 		 //计算机发送,单片机接收
		{
			if(RI)			//如果单片机接收到数据
			{
				
				P0=LSB(count3);
				P2=MSB(count3);
				if(t<=0xFFFF)
				{
					P3_4=0;	   //最高位
				}	
				else
				{
					P3_4=1;
				}
				count3++;  //计数递增
				t++;
				
				P3_6=0;		  //HM628128写使能
				RI=0;		  //RI清零
				P1=SBUF;	//将计算机发送的数据写入P1口
				P3_6=1;		   //HM628128禁止写
			}

			SendToPc=1;
		}
	
		while(P3_3==0 & SendToPc==1)  //单片机发送,计算机接收
		{
			for (j=0;j<=0xFF;j++)		//读0000H~FFFFH
			{
				P3_4=0;
				for(i=0;i<=0xFF;i++)
				{
					P0=i;
					P2=j;
					P3_7=0;	   		//HM628128读使能
					SBUF=P1;	   //将读到的数据写入SBUF,启动串行发送
					while(TI==0);  //等待发送完毕
					TI=0;		   //TI清零
					P3_7=1;			//HM628128禁止读
				}
				P3_7=1;
			}

			for (j=0;j<=0xFF;j++)	   //读10000H~1FFFFH
			{
				P3_4=1;
				for(i=0;i<=0xFF;i++)
				{
					P0=i;
					P2=j;
					P3_7=0;		   //HM628128读使能
					SBUF=P1;		//将读到的数据写入SBUF,启动串行发送
					while(TI==0);	//等待发送完毕
					TI=0;			 //TI清零
					P3_7=1;		 	//HM628128禁止读
				}
				P3_7=1;
			}
			SendToPc=0;			 //读标志清零
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -