<dl id="xausj"></dl>
    1. <ul id="xausj"><th id="xausj"></th></ul>

      <b id="xausj"></b>
      <cite id="xausj"></cite>
      <b id="xausj"><meter id="xausj"></meter></b>
      <dl id="xausj"><noframes id="xausj"></noframes></dl>
    2. 您好,歡迎訪問上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁(yè) ->  新聞資訊 -> 單片機(jī)

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

      文章出處:?jiǎn)纹瑱C(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
      2018
      05-19

      51單片機(jī)默認(rèn)使用定時(shí)器1作為串口通信的波特率發(fā)生器、定時(shí)器1中斷通信,串口與定時(shí)器1沖突,在遇到定時(shí)器不夠用的時(shí)候可以用定時(shí)器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. //單片機(jī)時(shí)鐘周期:11.0592MHz   以時(shí)鐘1作為波特率發(fā)生器 

      18. void SerialInit(){ 

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

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

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

      22.  TR1=1;  //開定時(shí)器 

      23.              //以上是設(shè)置波特率 

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

      25.  SM1=1;   

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

      27.  

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

      29.  ES=1; //串口中斷開關(guān),采用查詢法時(shí)不用打開中斷 

      30. */  

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

      32. void SerialInit(){  

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

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

      35.      T2CON  = 0x34;     

      36.      RCAP2H = 0xFF;      

      37.      RCAP2L = 0xDC;    

      38.      TH2    = 0xFF;    

      39.      TL2    = 0xDC;  

      40.          

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

      42.      ES = 1;          //串口中斷開關(guān),采用查詢法時(shí)不用打開中斷  

      43.   

      44. }  

      45.   

      46.   

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

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

      49. {  

      50.      unsigned char rbyte;  

      51.      if(RI){     //RI=1,判定為串口接收到了數(shù)據(jù),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ā)送一個(gè)字節(jié):  

      67. void SendByte(unsigned char sbyte)  

      68. {   

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

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

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

      72. }  

      73.    

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

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

      76. {  

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

      78.      {  

      79.          SendByte(*pstr);//發(fā)送字符串?dāng)?shù)據(jù)  

      80.          pstr++; //指向下一個(gè)字符  

      81.      }  

      82. }  

      83.   

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

      85. {  

      86.     unsigned int j;  

      87.     while(i--)  

      88.     {  

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

      90.     }  


      上海意泓電子科技有限責(zé)任公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

      CopyRight 2020-2025 www.pendragonrpg.com All rights reserved   滬ICP備2021005866號(hào)

      国产中文欧美日韩,色播在线永久免费视频,另类专区亚洲无码,亚洲中文字无码av

      <dl id="xausj"></dl>
      1. <ul id="xausj"><th id="xausj"></th></ul>

        <b id="xausj"></b>
        <cite id="xausj"></cite>
        <b id="xausj"><meter id="xausj"></meter></b>
        <dl id="xausj"><noframes id="xausj"></noframes></dl>