#include<regX51.h> //同步串口接收程序//
unsigned char temp=0; //对时钟上升沿检测信号的缓存//
unsigned char te=0; //对分隔信号上升沿检测信号的缓存//
unsigned char a[16]={0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0};//接收数据缓存数组//
unsigned int p=0; //接收到的数据值缓存//
unsigned char i=0;
unsigned char yanla() //分隔信号上升沿函数//
{
unsigned char w; //判断上升沿变量//
unsigned char z; //读取分隔信号变量//
z=P3_2; //读取分隔信号//
if((z==1)&&(te==0)) //判断是否上升沿//
w=1;
else
w=0;
te=z;
if(w)
return 1;
else
return 0; //是上升沿返回1,不是返回0//
}
unsigned char yanclk() //时钟信号上升沿函数//
{
unsigned char y; //判断上升沿变量//
unsigned char x; //读取时钟变量//
x=P3_0;
if((x==1)&&(temp==0)) //判断是否上升沿//
y=1;
else
y=0;
temp=x;
if(y)
return 1;
else
return 0; //是上升沿返回1,不是返回0//
}
unsigned int he() //和函数,将缓存在数组中的接收到的数据变成具体的数//
{
unsigned int zj=0; //具体的树变量//
unsigned char j; //循环相加,加出具体的数//
for(j=0;j<=15;j++)
{
zj=a[j]+(zj<<1);
}
return zj; //返回具体的数//
}
void main() //主函数//
{
P3_0=1; //先将I/O口付给高电平,I/O口才可以读取数据,不先付高不能读取//
P3_1=1;
P3_2=1;
while(1) //为了随时都能收到数据,做成死循环//
{
if(yanclk()) //判断是否检测到时钟上升沿//
{ //如果检测到将读取数据并保证读完16个上升沿i=0//
a[i]=P3_1;
if(i!=15)
{
i++;
}
else
{
i=0;
}
}
if(yanla()) //如果检测到分隔信号上升沿将数组的数求出具体的数,并付给p//
{
p=he(); //将i和数组清0//
i=0;
a[16]=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
}
P2=~p;
}
}
tckr.rar_51单片机 串口_同步串口
版权申诉
102 浏览量
2022-09-19
14:46:35
上传
评论
收藏 3KB RAR 举报
Kinonoyomeo
- 粉丝: 77
- 资源: 1万+
最新资源
- 运算放大器基础.pdf
- 本仓库包含我们队伍2019年数模美赛题目A、我们的代码及论文
- 基于JavaWeb图书管理系统课程设计软件源码+数据库+实验报告
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6172.0)
- WesternDigital-SSD-Dashboard-v4.2.2.5
- 计算机视觉,课后习题部分解答(章毓晋)
- “推荐系统”相关资源推荐
- 软件工程期末复习笔记 快速冲刺
- 毕业设计基于Spring Boot的健身房管理系统源码+数据库+使用文档(高分项目)
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6170.3)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈