/***********************************************************
晶振11.0592 波特率:9600 接收时联合外中断口0(P3.2)
: 权
/************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit TXD1=P3^4;
sbit RXD1=P3^5;
uchar TAB[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar BUF[8];
/***************延时函数*************************/
void delay104us() //11.0592M 波特率:9600 时间104us (用于发送)
{
uchar i=9;
while(i--);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//////////////////////////////////////////////////////
void delay1041us() //11.0592M 波特率9600 时间104us (用于接收)
{
uchar i=13;
while(i--);
_nop_();
_nop_();
_nop_();
}
/////////////////////////////////////////////////////
void delay(uint q) //1ms
{
uint i,j;
for (i=0;i<q;i++)
for (j=0;j<124;j++);
}
/***********发送一字节数据****************************/
void SendByte(uchar c)
{
uchar j;
TXD1=0; //低电平起始位
delay104us();
for (j=0;j<8;j++) //每次发送的八位数
{
if((c>>j)&0x01) TXD1=1; /*判断发送位*/
else TXD1=0;
delay104us();
}
TXD1=1; //发高电平停止位
delay104us();
}
/***********************************************
字符串组发送函数
************************************************/
void send_Data(uchar *s, uchar n)
{
uchar i;
for(i=0;i<n;i++) //发n个字节
{
SendByte(*s);
s++;
delay(10);
}
TXD1=1; //退出时保证发送端为1
delay(10);
}
/*************************************************
/*************************************************
接收一字节数据
************************************************/
uchar Receive_Data()
{
uchar i,dat;
while(!IE0);
IE0=0;
delay1041us();
for(i=0;i<8;i++)
{
dat>>=1;
if(RXD1) dat|=0x80;
delay1041us();
}
RXD1=1;
return (dat);
}
/************************************************
接收一组数据
***********************************************/
void Receive(uchar *d, uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
*d=Receive_Data();
d++; //地址指针加一
P2=BUF[i];
}
}
/**********************************************/
void main()
{
IT0=0; // 外中断0低电平触发
IE0=0;
EX0=1; // 允许外中断0
EA=1; // 总中断允许
TXD1=1;
RXD1=1;
delay(10);
//send_Data(TAB,8); //发送数据
while(1)
{
send_Data(TAB,8);//发送数据
}
}
/*****************************************************
联用外中断0 进行串口接收
*****************************************************/
void init0() interrupt 0 using 0
{
//uchar pp;
EX0=0; //关外中断0允许
Receive(BUF,8); //接收一串字符
//pp=Receive_Data();//每次中断接收一字节
//P2=pp;
IE0=0;
EX0=1; //恢复外中断0
}
/**************************************************/
51用普通IO口模拟串口与PC通信
4星 · 超过85%的资源 需积分: 13 63 浏览量
2011-01-10
20:52:42
上传
评论 1
收藏 60KB RAR 举报
_永恒的爱恋
- 粉丝: 6
- 资源: 17
最新资源
- .arch4位0.36寸共阳数码管(带时钟点、不带小数点)引脚图-请忽略图中尺寸.jpg
- 基于单片机430采集电容极板的电容值,并通过蓝牙传输到安卓端,安卓端负责接收蓝牙数据及可视化显示(OpenGL ES)
- 2,标准例程-HAL库版本.zip
- NVD和CNNVD软件漏洞数据集,漏洞文本预处理,训练算法模型进行漏洞分类.zip
- java 毕业设计之实现的汽车租赁管理系统
- MongoDB数据库及基本操作.txt
- 毕业设计基于Python时空图卷积(ST-GCN)的骨骼动作识别源码(高分项目).zip
- 基于C++面向软件安全的污点数据检测系统源码.zip
- python毕业设计-基于时空图卷积(ST-GCN)的骨骼动作识别+源代码+文档说明.zip
- Java毕业设计之超市信息管理系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈