📄 myserialport.c
字号:
#include <reg52.h>
#include <stdio.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_2=P3^2; //计算机发送,单片机接收的标志
sbit P3_3=P3^3; //单片机发送,计算机接收的标志
sbit P3_4=P3^4; //HM628128最高位地址
sbit P3_6=P3^6; //HM628128写使能
sbit P3_7=P3^7; //HM628128读使能
bit AT89S52Send=0; //单片机发送,计算机接收的软件标志位
void main(void) //主程序
{
unsigned int count;
DWORD t;
int i,j;
count=0; //初始化变量
t=0;
SCON=0x50; //串口模式1,允许接收
TMOD|=0x20; //初始化T1为定时功能,模式2
PCON|=0x80; //设置SMOD=1
TL1=0xF4; //波特率4800bit/s,初值
TH1=0xF4;
IE|=0x90; //中断
TR1=1; //启动定时器
P3_6=1; //写使能
P3_7=1; //读使能
AT89S52Send=1; //软件标志
while(1) //主循环
{
while(P3_2==0) //计算机发送,单片机接收
{
if(RI) //如果单片机接收到数据
{
P0=LSB(count); //取低8位
P2=MSB(count); //取高8位
if(t<=0xFFFF)
{
P3_4=0; //最高位
}
else
{
P3_4=1;
}
count++; //计数递增
t++;
P3_6=0; //HM628128写使能
RI=0; //RI清零
P1=SBUF; //将计算机发送的数据写入P1口
P3_6=1; //HM628128禁止写
}
AT89S52Send=1; //软件标志位
}
while(P3_3==0 & AT89S52Send==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;
}
AT89S52Send=0; //读标志清零
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -