標(biāo)題: 單總線通訊接口的單片機(jī)源碼 [打印本頁(yè)]

作者: tendy    時(shí)間: 2018-3-30 12:05
標(biāo)題: 單總線通訊接口的單片機(jī)源碼
  1. /*********單總線通信脈沖時(shí)間定義**********/      
  2. #define H_LVL        5      
  3. #define L_LVL_0        5      
  4. #define L_LVL_1        10      

  5. #define S_H                10        //起始位高電平,起始位用于將期間從休眠中喚醒并做好接收數(shù)據(jù)的準(zhǔn)備,暫沒使用
  6. #define S_L                5        //起始位低電平

  7. #define START_T0()        {TMR0=158;T0IF=0;T0IE=1;}
  8. #define STOP_T0()        {T0IE=0;}

  9. /*
  10. 函數(shù)功能:數(shù)據(jù)位發(fā)送,數(shù)據(jù)位0或1都包括固定寬度的高電平脈沖和不同寬度的低電平
  11. 說(shuō)明:
  12. */
  13. void SendBit(uchar databit)
  14. {
  15.         timeout=H_LVL;
  16.         START_T0();
  17.         ORDER=1;        //信號(hào)線高電平
  18.         while(timeout);
  19.         STOP_T0();        //禁止T0中斷
  20.                
  21.         if(databit)
  22.                 timeout=L_LVL_1;        //數(shù)據(jù)位1
  23.         else
  24.                 timeout=L_LVL_0;        //數(shù)據(jù)位0
  25.         START_T0();      
  26.         ORDER=0;        //信號(hào)線低電平
  27.         while(timeout);
  28.         STOP_T0();
  29. }
  30. /*發(fā)送結(jié)束脈沖,用于標(biāo)記最后一個(gè)數(shù)據(jù)位的脈沖寬度,*/
  31. void SendEnd()
  32. {
  33.         timeout=5;
  34.         START_T0();
  35.         ORDER=1;        //信號(hào)線高電平
  36.         while(timeout);
  37.         STOP_T0();        //禁止T0中斷
  38.         timeout=20;
  39.         START_T0();
  40.         ORDER=0;
  41.         while(timeout);      
  42.         STOP_T0();      
  43. }
  44. void SendStart()
  45. {
  46.         timeout=S_H;
  47.         START_T0();
  48.         ORDER=1;        //信號(hào)線高電平
  49.         while(timeout);
  50.         STOP_T0();        //禁止T0中斷
  51.         timeout=S_L;
  52.         START_T0();
  53.         ORDER=0;
  54.         while(timeout);      
  55.         STOP_T0();      
  56. }      
  57. /*
  58. 函數(shù)功能:數(shù)據(jù)字節(jié)發(fā)送,低位在前
  59. 參數(shù)說(shuō)明:dat 要發(fā)送的數(shù)據(jù)字節(jié)
  60. */
  61. void SendData(uchar dat)
  62. {
  63.         uchar i,j;
  64.       
  65.         CCP1IE=0;        //關(guān)閉捕捉中斷
  66.         se_ccp1_int++;
  67.         TMR2IE=0;
  68.       
  69. //        SendStart();        //起始位高電平,起始位用于將期間從休眠中喚醒并做好接收數(shù)據(jù)的準(zhǔn)備      
  70.         for(i=0;i<8;i++)
  71.         {
  72.                 j=(dat>>i)&0x01;
  73.                 SendBit(j);                       
  74.         }
  75.         SendEnd();
  76.       
  77.         CTR_LED=1;
  78.         delay(200);
  79.         CTR_LED=0;
  80.         se_ccp1_int--;
  81.         if(se_ccp1_int==0)
  82.         {
  83.                 CCP1IF=0;
  84.                 CCP1IE=1;        //開捕捉中斷
  85.         }
  86.         TMR2IE=1;
  87.                
  88. }                        
復(fù)制代碼







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1