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

📄 复件 mnck.c

📁 模拟串口C51编程
💻 C
字号:
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$     扩展串口

//simulate serial port

   #include <reg52.h>
   #include <intrins.h>
   #define   uchar   unsigned char
   #define   uint    unsigned int
   #define   nop     _nop_()
   #define   On      1 ;
   #define   Off     0
    sbit  TXDS = P1^0 ;
    sbit  RXDS = P1^1 ;
    sbit  rede1= P3^5;
    bit   Tend;//发送结束标志
    bit   Rend;//接收结束标志
    bit   Tov;// 接收超时标志
    bit   TR;//  发送 接受标志
    uchar Tb=10;//发送数据为十位
    uchar Rb=8; //接收数据为8位
  uchar  TX_number;
  uchar   RX_number;
  uchar hs=0;// 发送数据移位变量
  uchar t[10];
  uchar r[10];
  uchar*ptr_T; //发送数据指针
  uchar*ptr_R; //接收数据指针

 void  delay(uint);
 void  TX_DATA();
 void  RX_DATA();
   void main (void)
    {  delay(9);
       Tov=0;

     *ptr_R=r;
    // TX_number=10;

    // t[0]=0x11;

    //  t[1]=0x12;
    //  t[2]=0x13;
    // t[3]=0x14;
    //  t[4]=0x15;
    //  t[5]=0x25;
    //  t[6]=0x26;
    //  t[7]=0x27;
    //  t[8]=0x28;
    //  t[9]=0x29;
    //  TX_DATA();
    RX_number=2;
     RX_DATA();
     delay(199);
     nop;
     nop;
      while(1);

    } //main
 void TX_DATA(void)
     {
         ptr_T=t; //定义指针地址
         hs=*ptr_T; //第一个数据送达数据移位单元
         TR=On;//发送
         Tend =0;
         rede1=Off;  //只发送状态
         delay(9);


         T2CON=0x00;
          TH2=0xfd;     //bps 1200
          TL2=0x23;                                
                                               
         TR2=On;   //开中断
         ET2=On;
         EA =On;
         do  {
         PCON|=0x01;
         nop;}
        while(Tend==0);
         rede1=On;
      }

 void RX_DATA(void)

      {
          ptr_R=r;
          Rend= 0;
          TR  = 0;//接收标志
          rede1= 1;

          T2CON=0x08;//允许外部中断
          ET2=1;
          EA= 1;
        
       }//RX_DATA

   void  Timer2(void)    interrupt   5    //timer interrupt
     {
        uchar  Rdata;

         if(TR)
         {  //发送   
           TL2=0x23;//
           TH2=0xfd; //bps 1200           
                                        
           TF2=0x00;

           if (--Tb)
              {  if(Tb==9)
                  {  nop;
                     nop;
                     nop;
                     TXDS=0;
                   }
                else
                  {   TXDS=(bit)(hs&0x01) ;
                      hs=hs>>1;
                   }
                }
            else //if(Tb==0)
              {  nop;
                 nop;
                 Tb=10;
                 nop;
                 nop;
                 TXDS=1;
                 if(--TX_number!=0)
                  {  ptr_T++;
                     hs=*ptr_T ;
                   }
                   else
                     {
                    Tend=1;   //发完
                    T2CON=0;
                     }
                }//Tb==0
          } //TR=1
       if (!TR)//接收
         {
              if(!EXF2)
              { TF2=0;
                TL2=0x1c;// 
                TH2=0xfd;  ///bps=1200                ////TL2=0xc2; //  bps9600
                                                      ////TH2=0x0ff;
                Rdata=(uchar)RXDS;
                hs|=Rdata;
                hs=_cror_(hs,1);
               if(--Rb==0)
               {//
                *ptr_R=hs;
                 ptr_R++;
                 hs=0;

                  //;;;;;;;;;;
              //    TH0=0x0f0;//每收-每收到1字节,重新设置定时溢出超时时间4mS
                  //;;;;;;;;;;;;;;;;;;;
                if(--RX_number)
                {
                 T2CON=0x08;

                  }
                 else
                 {T2CON=0x00;
               //   Rend=1;
                  }
                }//
              }//EXF2
               else if (EXF2)
                {

                EXF2=0;
                TL2=0xef;//0xe6;//0x22;  
                TH2=0xfc;                       
                TR2=1;
                EXEN2=0;
                ET2=1;
                Rb=8;
                }

          }//TR==0


         }//end

 void delay(uint delx)
{
        uint i=0;
        while(i<delx)
        {
                i++;
        }
}

⌨️ 快捷键说明

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