<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 8441|回復: 1
    打印 上一主題 下一主題

    [提問] 讀取TH0,TL0的值的問題

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2012-8-31 11:45:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: 定時器
    我寫的一個程序,需要讀取TH0,TL0的值,用time=256*TH0+TL0;可正確讀取,而用time|=TH0;   time<<=8;   time|=TL0;卻不能。具體情況如下。
    外部中斷0和定時器0初始化:
    P3=0;
    TMOD=0x09;
    TH0=0;
    TL0=0;
    IT0=1;
    EA=1;
    EX0=1;
    TR0=1;
    外部中斷0服務函數:
    void int0() interrupt 0
    {
    // time|=TH0;
    // time<<=8;
    // time|=TL0;
    time=256*TH0+TL0;
    // time_l=TL0;
    // time_h=TH0;
    // time|=time_h;
    // time<<=8;
    // time|=time_l;
    TH0=0;
    TL0=0;
    }
    我是測試HC-SR04超聲波模塊,它的輸出腳接在P32,會輸出一個脈沖,我就是要計算這脈沖的高電平時間。
    設定了定時器0的GATE位為1,當P32的高電平開始時,TH0,TL0開始計數,當高電平結束時,產生負跳變,進入中斷服務函數,計算時間。
    以上就是程序的思路。
    問題在于,如果用time=256*TH0+TL0;計算時間,得到的值符合實際,time的值為幾百;而如果用此語句的上面三句,或者下面五句(見上面中斷服務函數)來計算時間,得到的值不符合實際,time的值為幾萬。
    請各位前輩指點一下,為何會這樣?
    沙發
    發表于 2012-9-4 12:17:40 | 只看該作者
    用time=256*TH0+TL0;可正確讀取,而用time|=TH0;   time<<=8;   time|=TL0;卻不能。具體情況如下。


    純粹是C語言的問題

    因為time在使用之前不為0
    那么你執行time|=TH0;語句就不能覆蓋原來的數值
    假如 time在使用之前是等于0x3
          TH0=0X50;
    你執行time|=TH0;
    那么time就等于0x53
    但是你實際上是想要time=0x50
    那么你就把time原來的數值攜帶了進來

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

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷