📄 tckr.c
字号:
#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;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -