<address id="tnvjh"></address>
    <form id="tnvjh"><listing id="tnvjh"><meter id="tnvjh"></meter></listing></form>

      <form id="tnvjh"></form>

      <address id="tnvjh"><th id="tnvjh"></th></address>

        專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        51單片機串口通信例子

        作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月17日   【字體:

             小記:本例子是在別人的版本修改而來的,因本人沒有11.0592MHz的晶振,進而采用12MHz的,經過波特率的調整發現在波特率為1200時,定時器工作在方式二,穿口工作在模式二,且SMOD=1.此時定時器的TH1=TL1=0xCC,此時調試串口沒有錯誤。

         
        發送例子:
         
        #include<reg52.h>
        #include<stdio.h>
         
        void delay(unsigned int i);
         
        char code message[]="welcome";
        unsigned char a;
        void main(void)
        {
         SCON=0x50; //REN=1 ,串口工作模式2;
         TMOD=0x20; //定時器工作方式2;
         PCON=0x80;
         TH1=0xCC;
         TL1=0xCC;
         
         TR1=1;//啟動定時器
         ES=1; //串行中斷允許
         EA=1;//開總終端
         while(1)
         {
          a=0;
          while(message[a]!='\0')
          {
           SBUF=message[a];
           while(!TI)  //等待一幀數據(一個字符)發完,TI置1,
            TI=0;    //讓TI為0就繼續接收,直至跳出while。
            a++;    //接收下一字符
           delay(1000);
          }
         }
         
        }
        void delay(unsigned int i)
        {
         unsigned char j;
         for(i;i>0;i--)
          for(j=200;j>200;j--);
         
        }
         
        接收例子:
         
        #include<reg52.h>
        #include<stdio.h>
         
        sbit BEEP=P1^4;
        unsigned char b;
        void main(void)
        {
         .................
         
         BEEP=1;
         while(1)
         {
          if(RI==1)  //如果一幀數據接收完畢
          {
           RI=0;    //RI清零;繼續接收下一幀數據
           P1=SBUF; //數據送P1口
          }
         }         //如果P1^4為0或1,可驅動蜂鳴器發聲
         
        }          //即發送的數據bit4為0或1
         
        發送加接收例子:
         
        #include<reg52.h>
         
        bit flag;
        unsigned int redata,sendata;
         
        void main(void)
        {
         
        ..................
         while(1)
         {
          if(flag==1)
          {
           SBUF=sendata; //發送數據
           while(TI==0);//等待發送完畢
           TI=0;        //發送完畢,TI=0
           flag=0;     //flag清零
          }
         }
          
        }
        void ser_int(void) interrupt 4  using 1
        {
         if(RI==1)  //數據接收完畢
         {
          RI=0;     //等待接收下一幀數據
          redata=SBUF;
          sendata=redata; //將接收的數據發回
          flag=1;  //flag置1,發回接收數據
         
         }
        }
        關閉窗口
        和老头做爰很舒服,JK白丝裤袜开裆自慰喷水,在线天堂www在线...中文

          <address id="tnvjh"></address>
          <form id="tnvjh"><listing id="tnvjh"><meter id="tnvjh"></meter></listing></form>

            <form id="tnvjh"></form>

            <address id="tnvjh"><th id="tnvjh"></th></address>