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

📄 main.c

📁 这是通过AT8952单片机实现模拟串口收发数据
💻 C
字号:
#include "at89x52.h"

#define uchar unsigned char
#define uint  unsigned char

sbit B_RFIN = P3^2;
sbit B_TFIN = P3^3;

uchar dat,m;


void PSendChar(uchar ch)
{
 uchar i;
 B_TFIN=0;
 Mydelay_800us();
 for(i=8;i>0;i--)
 {
  B_TFIN=ch&1;
  Mydelay_800us();
  ch>>=1;
 }
 B_TFIN=1;
 Mydelay_800us();
}

void Serial_SimulatRe(void)                // 9600b/s
{
 uchar i;
 if(!B_RFIN)              //起始位0,共扫描3次
 {            
  Mydelay_200us();
  if(!B_RFIN)
  {
   Mydelay_200us();
   if(!B_RFIN)
   {
    Mydelay_200us();
    if(!B_RFIN)
    {
     Mydelay_200us();
   	}else {return;}       // 出错,退出
   }else{return;}
  }else{return;}
 }else{return;}
 for(i=0;i<8;i++)        //扫描第一到第八位,每位扫描三次。
 {     
  dat=dat>>1;
  Mydelay_200us();         //为1,
  {             //为0;
   Mydelay_200us();
   if(!B_RFIN)
   {
    Mydelay_200us();
    if(!B_RFIN)
    {
     Mydelay_200us();
     dat=dat&0x7f;
    }else{return;}  //出错,退出
   }else {return;}
  }
 }
 Mydelay_200us();
 if(!B_RFIN)
 {   //停止位
  return;
 }
}

void Serial_Moni(void)  interrupt 0
{
 EX0=0;             //禁止init0中断
 Serial_SimulatRe();//接收一BYTE,
 //PSendChar(dat);
 EX0=1;           //开中断
}

void check_demo_send(uchar *buf)
{
 uchar ecc=0;
 while(*buf==0)
 {
  ecc=ecc^(*buf);
  PSendChar(dat);
  buf++;
 }
 PSendChar(ecc);
 PSendChar(0x01);
}

bit ceck_demo_recv(uchar *buf)
{
 uchar ecc=0;
 while(1)
 {
  *buf=dat;
  if(dat==0x01)
  {
   buf=0;
   break;
  }
  ecc=ecc^(*buf);
 }
 if(ecc!=0)
  return 0;
 return 1;
}

void main(void)
{
 P0=P1=P2=P3=0xff;
 initial();
 while(1); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -