找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2521|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單總線通訊接口的單片機(jī)源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:299361 發(fā)表于 2018-3-30 12:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. /*********單總線通信脈沖時間定義**********/      
  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. 說明:
  12. */
  13. void SendBit(uchar databit)
  14. {
  15.         timeout=H_LVL;
  16.         START_T0();
  17.         ORDER=1;        //信號線高電平
  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;        //信號線低電平
  27.         while(timeout);
  28.         STOP_T0();
  29. }
  30. /*發(fā)送結(jié)束脈沖,用于標(biāo)記最后一個數(shù)據(jù)位的脈沖寬度,*/
  31. void SendEnd()
  32. {
  33.         timeout=5;
  34.         START_T0();
  35.         ORDER=1;        //信號線高電平
  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;        //信號線高電平
  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ù)說明: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ù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表