<tfoot id="ygvxt"><menuitem id="ygvxt"></menuitem></tfoot>
    • <kbd id="ygvxt"></kbd>
      <th id="ygvxt"><progress id="ygvxt"></progress></th>

      您好,歡迎訪問上海意泓電子科技有限責任公司網站!
      4新聞資訊
      您的位置: 首頁 ->  新聞資訊 -> 單片機

      ?51單片機 (6)串口中斷通信+定時器2串口中斷

      文章出處:單片機 責任編輯:上海意泓電子科技有限責任公司 發(fā)表時間:
      2018
      05-19

      51單片機默認使用定時器1作為串口通信的波特率發(fā)生器、定時器1中斷通信,串口與定時器1沖突,在遇到定時器不夠用的時候可以用定時器2


      1. #include   

      2.  

      3. void DelayMs(unsigned int i);  

      4. void SerialInit();  

      5. void SendByte(unsigned char sbyte);  

      6. void SendString(unsigned char *pstr);  

      7.   

      8.   

      9. void main(void)  

      10. {  

      11.         SerialInit();  

      12.         while(1);     //注:必需要無限循環(huán)  

      13. }  

      14.   

      15.   

      16. /* 

      17. //單片機時鐘周期:11.0592MHz   以時鐘1作為波特率發(fā)生器 

      18. void SerialInit(){ 

      19.  TMOD=0x20;   //設置T1工作方式為方式2 

      20.  TH1=0xfd; //給定時器高位裝初值 

      21.  TL1=0xfd; //給定時器低位裝初值 

      22.  TR1=1;  //開定時器 

      23.              //以上是設置波特率 

      24.  SM0=0;  //設置串口通訊方式為方式1 

      25.  SM1=1;   

      26.  REN=1;  //串口是否接收數(shù)據的開關 

      27.  

      28.  EA=1; //總中斷打開,采用查詢法時不用打開中斷 

      29.  ES=1; //串口中斷開關,采用查詢法時不用打開中斷 

      30. */  

      31. //單片機時鐘周期:11.0592MHz       以時鐘T2作為波特率發(fā)生器  

      32. void SerialInit(){  

      33.      PCON &= 0x7F;      //波特率不倍速 SMOD=0  

      34.      SCON = 0x50;       //方式1,8位數(shù)據,可變波特率,接收允許  

      35.      T2CON  = 0x34;     

      36.      RCAP2H = 0xFF;      

      37.      RCAP2L = 0xDC;    

      38.      TH2    = 0xFF;    

      39.      TL2    = 0xDC;  

      40.          

      41.      EA=1; //總中斷打開,采用查詢法時不用打開中斷   

      42.      ES = 1;          //串口中斷開關,采用查詢法時不用打開中斷  

      43.   

      44. }  

      45.   

      46.   

      47. //串口中斷函數(shù):  

      48. void SerialPortInte(void) interrupt 4 //采用串口中斷法收發(fā)數(shù)據  

      49. {  

      50.      unsigned char rbyte;  

      51.      if(RI){     //RI=1,判定為串口接收到了數(shù)據,RI要清零,  

      52.          RI=0;  

      53.          rbyte=SBUF;   

      54.          if(rbyte==0x0A){       

      55.             SendString("換行");  

      56.          }else if(rbyte==0x0D){  

      57.             SendString("回車");  

      58.          }else{  

      59.             SendByte(rbyte);   

      60.          }  

      61.               

      62.      }  

      63.   

      64. }  

      65.   

      66. //串口發(fā)送一個字節(jié):  

      67. void SendByte(unsigned char sbyte)  

      68. {   

      69.      SBUF=sbyte; //發(fā)送數(shù)據  

      70.      while(!TI); //等待發(fā)送完成  

      71.      TI=0; //清零發(fā)送標志位  

      72. }  

      73.    

      74. //串口發(fā)送一個字符串:  

      75. void SendString(unsigned char *pstr) //定義指針  

      76. {  

      77.      while(*pstr!='\0') //字符串是否發(fā)完  

      78.      {  

      79.          SendByte(*pstr);//發(fā)送字符串數(shù)據  

      80.          pstr++; //指向下一個字符  

      81.      }  

      82. }  

      83.   

      84. void DelayMs(unsigned int i)  //延時i ms  

      85. {  

      86.     unsigned int j;  

      87.     while(i--)  

      88.     {  

      89.         for(j = 0; j < 125; j++);  

      90.     }  


      上海意泓電子科技有限責任公司 版權所有 未經授權禁止復制或鏡像

      CopyRight 2020-2025 www.hljhgw.com All rights reserved   滬ICP備2021005866號

      国产强伦姧在线观看,…中文天堂在线一区,亚洲欧洲精品污网站在线观看,在线视频综合站
      <tfoot id="ygvxt"><menuitem id="ygvxt"></menuitem></tfoot>
        • <kbd id="ygvxt"></kbd>
          <th id="ygvxt"><progress id="ygvxt"></progress></th>