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

📄 tckr.c

📁 51单片机同步串口接收数据的程序
💻 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 + -