查看: 8409|回復: 1
打印 上一主題 下一主題

[提問(wèn)] 讀取TH0,TL0的值的問(wèn)題

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2012-8-31 11:45:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: 定時(shí)器
我寫(xiě)的一個(gè)程序,需要讀取TH0,TL0的值,用time=256*TH0+TL0;可正確讀取,而用time|=TH0;   time<<=8;   time|=TL0;卻不能。具體情況如下。
外部中斷0和定時(shí)器0初始化:
P3=0;
TMOD=0x09;
TH0=0;
TL0=0;
IT0=1;
EA=1;
EX0=1;
TR0=1;
外部中斷0服務(wù)函數:
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,會(huì )輸出一個(gè)脈沖,我就是要計算這脈沖的高電平時(shí)間。
設定了定時(shí)器0的GATE位為1,當P32的高電平開(kāi)始時(shí),TH0,TL0開(kāi)始計數,當高電平結束時(shí),產(chǎn)生負跳變,進(jìn)入中斷服務(wù)函數,計算時(shí)間。
以上就是程序的思路。
問(wèn)題在于,如果用time=256*TH0+TL0;計算時(shí)間,得到的值符合實(shí)際,time的值為幾百;而如果用此語(yǔ)句的上面三句,或者下面五句(見(jiàn)上面中斷服務(wù)函數)來(lái)計算時(shí)間,得到的值不符合實(shí)際,time的值為幾萬(wàn)。
請各位前輩指點(diǎn)一下,為何會(huì )這樣?
沙發(fā)
發(fā)表于 2012-9-4 12:17:40 | 只看該作者
用time=256*TH0+TL0;可正確讀取,而用time|=TH0;   time<<=8;   time|=TL0;卻不能。具體情況如下。


純粹是C語(yǔ)言的問(wèn)題

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

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

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页