久久人妻精品人妻视频五月天一区二区三区,,自慰午夜喷水久久久av国产成人a视频高在线,,欧美日韩免费专区在线97精品国产手机

  • <cite id="cwywg"></cite>
    <button id="cwywg"></button>
  • <button id="cwywg"><source id="cwywg"></source></button>
    <button id="cwywg"><tbody id="cwywg"></tbody></button>
  • <button id="cwywg"></button>
  • 
    
  • logo logo
    • BANNER
    • BANNER
    • BANNER
    您的位置 : 首頁 > 新聞資訊 > 技術(shù)支持
    51單片機(jī) (6)串口中斷通信+定時器2串口中斷
    發(fā)布者:江蘇瑞易通電子科技有限公司 人氣:723 發(fā)布日期:2021-04-23 10:10:40

    51單片機(jī)默認(rèn)使用定時器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. //單片機(jī)時鐘周期:11.0592MHz   以時鐘1作為波特率發(fā)生器 

    18. void SerialInit(){ 

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

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

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

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

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

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

    25.  SM1=1;   

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

    27.  

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

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

    30. */  

    31. //單片機(jī)時鐘周期:11.0592MHz       以時鐘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; //總中斷打開,采用查詢法時不用打開中斷   

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

    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ā)送一個字節(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ā)送一個字符串:  

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

    76. {  

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

    78.      {  

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

    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.     }  


    返回新聞列表