|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
S51指定時(shí)間內(nèi)判斷計(jì)數(shù)量量的問(wèn)題 |
| 作者:liuyeah 欄目:單片機(jī) |
最近在做一個(gè)實(shí)驗(yàn),思路是這樣的: 我們要判斷在規(guī)定時(shí)間內(nèi)的脈沖數(shù)量。用51單片機(jī)的T0和T1分別作為計(jì)數(shù)器和定時(shí)器,設(shè)定T1循環(huán)每一秒鐘中斷一次,這時(shí)候檢查經(jīng)過(guò)T1口的脈沖數(shù)量,在不同的次數(shù)段內(nèi)執(zhí)行不同的動(dòng)作。比如在1s鐘內(nèi)判斷脈沖是否達(dá)到100~500次,若是,則某個(gè)執(zhí)行動(dòng)作。 實(shí)驗(yàn)中判斷后的動(dòng)作是拿led簡(jiǎn)單的代替的,而脈沖是用功率函數(shù)發(fā)生器的方波假設(shè)的。 但是在實(shí)驗(yàn)中信號(hào)發(fā)生器不論調(diào)在那個(gè)頻率上都無(wú)法激發(fā)動(dòng)作。 請(qǐng)問(wèn),這種方法,尤其用功率發(fā)生器這種模擬是否可行? |
| 2樓: | >>參與討論 |
| 作者: liuyeah 于 2007/1/28 9:56:00 發(fā)布:
有解決辦法請(qǐng)加我qq 175978321 |
|
| 3樓: | >>參與討論 |
| 作者: zhaoyu2005 于 2007/1/28 10:49:00 發(fā)布:
方法是可行的 不能按你的意愿執(zhí)行是你的程序有問(wèn)題或者你的觸發(fā)信號(hào)有問(wèn)題,你應(yīng)該確認(rèn)(檢查)T1是否能正常計(jì)數(shù),然后再確認(rèn)觸發(fā)信號(hào)是否達(dá)到觸發(fā)條件(電平),本人孤陋寡聞,不知道什么是功率函數(shù)發(fā)生器,建議你用普通的信號(hào)發(fā)生器試一下 |
|
| 4樓: | >>參與討論 |
| 作者: liuyeah 于 2007/1/29 10:39:00 發(fā)布:
程序已經(jīng)運(yùn)行,但是還有誤差 程序目前已經(jīng)可以運(yùn)行,可以實(shí)時(shí)根據(jù)輸入脈沖頻率的不同改變動(dòng)作 但是試過(guò)不同頻率信號(hào),根據(jù)調(diào)改if語(yǔ)句中num的范圍值發(fā)現(xiàn)動(dòng)作誤差總在50左右(程序中有具體說(shuō)明) 程序如下 void main(void) { int num; //計(jì)數(shù)器TC0脈沖數(shù) int count; //定時(shí)器TC1溢出次數(shù) P2=0x08; TMOD=0x15; //設(shè)置TC0,TC1工作方式 TR0=1; TR1=1; for(;;) { num=0; count=0; for(;;) { TH1=(65536-18432)/256; TL1=(65536-18432)%256; //定時(shí)器TC1溢出時(shí)間,20ms(晶振頻率為11.0592M) while(!TF1) { TH0=0xff; TL0=0xff; do{} while(!TF0); num++; //每次T0腳有脈沖到,num自加 TF0=0; } count++; //定時(shí)器TC1溢出次數(shù)自加 TF1=0; if(count>=50) break; //若TC1溢出次數(shù)達(dá)50(表示定時(shí)器完成1s的計(jì)時(shí)),跳出 } if(num>=100&&num<=300) P2=0x01; if(num>300&&num<=500) P2=0x08; if(num>500&&num<=1000) P2=0x81; if(num>1000) P2=0x89; //判斷脈沖數(shù)量,作出不同動(dòng)作(這里用led燈代替動(dòng)作發(fā)生) } } 我們以 if(num>500&&num<=1000)P2=0x81;if(num>1000)P2=0x89;這兩個(gè)語(yǔ)句來(lái)判斷誤差次數(shù),發(fā)現(xiàn)改變信號(hào)頻率到1kHz會(huì)有誤動(dòng)作,執(zhí)行的效果為P2=0x89;。如若將兩句改為if(num>500&&num<=1050)P2=0x81;if(num>1050)P2=0x89;,則輸入信號(hào)頻率為1k時(shí),動(dòng)作才能按照預(yù)想的發(fā)生 |
|
| 5樓: | >>參與討論 |
| 作者: liuyeah 于 2007/1/29 11:05:00 發(fā)布:
解決了,呵呵 程序中的小問(wèn)題,:) 問(wèn)題出在這兒 if(count>=50) break; 要改為 if(count>=50)break; else num--; 因?yàn)槿缛魶](méi)有num自減,每次循環(huán)是要多加50的 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |