![]() |
發(fā)布時間: 2019-3-18 13:26
正文摘要:本帖最后由 wtm_lxy 于 2019-3-19 08:35 編輯 我做采集模擬電壓控制指示燈的效果: temp是采集到的模擬電壓值,tv是保存的臨時值。 我想實現(xiàn)的效果是: 當(dāng)temp<=800時打開計數(shù)器1,同時保留當(dāng)前的temp值;當(dāng) ... |
T0設(shè)置錯誤:定時器模式2是8位自動重載,最大定時時間256us,超過255部分溢出無效。也有可能是軟件模擬的問題。 |
.不會2.因為在默認(rèn)情況下(即每次單片機復(fù)位時),中斷優(yōu)先級寄存器ip為xxx0 0000b,未設(shè)置ip時,所有中斷都是同等級的! |
不一定 protues仿真軟件 本身也存在一些問題 建議用最新版本 |
把 if(count==3000)改成 if(count>=3000)試試,主循環(huán)怎么能那么巧判斷到3000,如果你正在送顯示時中斷計數(shù)可能超過3000了 |
7358655 發(fā)表于 2019-3-18 22:14 TMOD=0x02; TH0=0x14; TL0=0x00; IE=0x82; TR0=1; 應(yīng)該不是T0的問題吧?我改成這樣了。 我的問題是T1沒有生效?T0是正常的。 |
wulin 發(fā)表于 2019-3-18 20:53 我不是很明白,這里T0是給ADC0808做時鐘脈沖輸入端的,從檢測結(jié)果來看,是可以檢測到模擬值的。 問題是T1好像沒有生效。 我用T1來控制報警指示和保存臨時電壓值。這個if(count==3000)總是不能成立。 |
不是優(yōu)先級導(dǎo)致 TMOD=0x02; 模式0000 0010 你選模式2 八位自動裝載你看你賦值還不一樣 TH0=(65536-3500)/256; //0x14; TL0=(65536-3500)%256; //0x00; 再看你中斷,又給賦值 void Time1() interrupt 3 using 0 //“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù) //其后的3為定時器T1的中斷編號;0表示使用第0組工作寄存器 { count++; //自加1 每次1ms TH1=(65536-1000)/256; //定時器T1的高8位重新賦初值 TL1=(65536-1000)%256; //定時器T1的高8位重新賦初值 } 估計問題出在此處 |
T0設(shè)置錯誤:定時器模式2是8位自動重載,最大定時時間256us,超過255部分溢出無效,你這樣設(shè)置的結(jié)果是定時14us。 |
Powered by 單片機教程網(wǎng)