<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                【125.1 “雙線”的肢體接觸通信。】 芯片之間通信,都離不開“數據信號”和“時鐘信號”,缺一不可。“數據信號”和“時鐘信號”是什么關系,它們是怎樣相互配合來實現通信的功能?其實原理也很簡單。打個比喻,甲乙兩個人,規定只能靠一只“手”和一只“腳”進行肢體接觸的通信,他們之間如何傳輸數據?“手”可以產生“兩種”狀態“握緊”和“松開”,“腳”可以產生“一種”狀態“踢一腳”。他們之間約定,甲發送數據給乙,乙每被甲“踢一腳”就去記錄一次手的狀態是“握緊”還是“松開”,“握緊”代表二進制的0,“松開”代表二進制的1,這樣,如果他們之間想傳輸一個字節的十六進制數據0x59,只需把十六進制的數據0x59展開成二進制01011001,從右到左(從低位到高位)以“位”為單位挨個發送,過程如下: 第一次“踢一腳”:手的狀態是“松開”,記錄1。 第二次“踢一腳”:手的狀態是“握緊”,記錄0。 第三次“踢一腳”:手的狀態是“握緊”,記錄0。 第四次“踢一腳”:手的狀態是“松開”,記錄1。 第五次“踢一腳”:手的狀態是“松開”,記錄1。 第六次“踢一腳”:手的狀態是“握緊”,記錄0。 第七次“踢一腳”:手的狀態是“松開”,記錄1。 第八次“踢一腳”:手的狀態是“握緊”,記錄0。 上述肢體接觸的通信過程,其實一只“手”就代表了一根“數據線”,可以產生高電平“1”和低電平“0”這兩種狀態,而一只“腳”代表了一根“時鐘線”,但是“踢一腳”代表了“時鐘線”上的一種什么狀態呢?注意,“踢一腳”既不是高電平“1”也不是低電平“0”,而是瞬間只產生一次的“上升沿”或者“下降沿”。何謂“上升沿”何謂“下降沿”?“上升沿”是代表“時鐘線從低電平跳變到高電平的瞬間”,“下升沿”是代表“時鐘線從高電平跳變到低電平的瞬間”。“踢一腳”、“上升沿”、“下降沿”此三者都可以統一理解成“節拍”。 芯片之間通信,“時鐘信號”只需1個足矣,而“數據信號”卻可以不止1個。1個“數據信號”往往叫“串行”通信,一個節拍只能傳輸1位數據。8個以上并列的“數據信號”往往叫“并行”通信,一個節拍能傳輸8位以上的數據。可見,并行的“數據信號”越多,傳輸的速率越快。 常見的系統中,串口,IIC,SPI,USB,CAN這類都是“串行”通信。而32位單片機與外部的nandflash,norflash,sdram,sram這些芯片通信往往是“并行”通信,并行的數據信號多達8個16個甚至32個。 本節標題之所以強調“雙線”,是因為“手”代表數據線,“腳”代表時鐘線,一共兩條線因此為“雙線”。現在把上述的肢體通信過程翻譯成C語言代碼,甲發送數據的代碼如下: sbit Hand\_DATA=P2^6; //手的數據線 sbit Foot\_CLK=P2^7; //腳的時鐘線 void SendByte(unsiged char u8Data) //甲發送數據的發送函數 { static unsigned char i; for(i=0;i<8;i++) //一個字節包含8個位數據,需要循環8次 { if(0==(u8Data&0x01)) //根據數據的每一位狀態,發送對應的位數據。 { Hand\_DATA=0; //0代表“握緊” } else { Hand\_DATA=1; //1代表“松開” } Foot\_CLK=1; Delay(); //為產生均勻的脈沖節拍,時鐘線的高電平先延時一會 Foot\_CLK=0; //從高電平跳變到低電平,產生瞬間的“下降沿”,代表“踢一腳” Delay(); //為產生均勻的脈沖節拍,時鐘線的低電平先延時一會 u8Data=u8Data>>1; //右移一位,為即將發送下一位做準備 } }
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看