DWORD dwStart = 0;
DWORD dwStop = 0;
int nLoopSeed = 100000;
do{
m_dwLoopCounter1 = 0;
dwStart = GetTickCount;
for(int i=0;i< nLoopSeed;i++)
{
m_dwLoopCounter1++;
_asmnop;
}
dwStop = GetTickCount();
nLoopSeed += 100000;
}while ( dwStop - dwStart < 50 );
m_dwLoopCounter1 = 0;
dwStart=GetTickCount;
for(int i=0; i<nLoopSeed;i++)
{
m_dwLoopCounter1++;
_asm{nop}
}
dwStop = GetTickCount();
//每毫秒的循環(huán)數(shù)
m_dwLoopCounter1=m_dwLoopCounter1/dwStop-
dwStart;
//每微秒的循環(huán)數(shù)
m_nLoopCountPerMicroSecond=intm_dwLoop
Counter 1/1000;
}
實現(xiàn)固定時間的延時:
void CMicroSecond::MicroDelay( int uSec )
{
n=0;
for(int i=0;i<uSec*m_nLoopCountPerMicroSecond;i++)
{
n++;
_asm{nop}
}
}
由于賦值語句、for語句、函數(shù)的調(diào)用等要消耗時間,因此所得到的時間也并不是非常精確的時間。但對于一般的PC機來說完全可以達到幾十微妙的精度,而對于一般的控制系統(tǒng)來說,這個精度是足以達到控制要求的。
2 外圍接口特性
在本系統(tǒng)中我們通過計算機的并口來實現(xiàn)對步進電機驅(qū)動器的控制。我們知道并行口適配器的具體形式是多種多樣的,但是在PC系列微機中分配給它的最多有四個口,常用的是三個口,其地址為:03BCH - 03BEH:并口一(LPT1),0378H - 037AH:并口二(LPT2),0278H - 027AH:并口三(LPT3)。這里可以看到每個并口包括了三個口地址其中第一個為基地址,是因為一個并口具有數(shù)據(jù)口狀態(tài)口和控制口的緣故。不過值得注意的是,最好不要直接用上述口的地址去讀寫并口,因為在實際應(yīng)用中很少有三個并行口都同時有效的,而且多功能卡和單色顯示卡上的并行口地址是有差別的。單色顯示卡上的并口地址一般是03BCH,而多功能卡上的并口基地址一般可以在0378H和0278H之間進行選擇。因此如果直接對某一并口地址進行操作,萬一PC機上的并口適配器用的不是這個口地址那就要出錯了。
熟悉PC機的讀者都知道,PC機內(nèi)存最低端BIOS數(shù)據(jù)區(qū)的40:08H,40:0AH,40:0CH三個字是被設(shè)計用來存放上述三個并行口的基地址的,40:08H - 09H LPT1基地址;40:0AH - 0BH LPT2基地址;40:0CH - 0DH LPT3基地址。這三個字中的基地址是在PC機啟動過程中根據(jù)實際存在的并行口地址存放的,使用它們來讀寫并行口就不會出錯,所以在使用時一定要通過檢查這三個字來得到并行口的基地址。在對并口的讀寫操作用到的語句為_outp(并口地址,數(shù)據(jù))和 _inp( 并口地址 )(_inp返回值為讀到的數(shù)據(jù))。
3 系統(tǒng)特點及結(jié)果分析
在本文所述的激光雕刻機系統(tǒng)中,我們通過動態(tài)連接庫的方式對系統(tǒng)進行控制,我們將對基本矢量元素的控制都封裝在了一個動態(tài)連接庫中,這樣使系統(tǒng)的控制軟件具有一定可移植性。而這種通過PC機并口實現(xiàn)對激光雕刻機控制的方法簡單而且易于實現(xiàn),可以大大的縮短開發(fā)周期。如果我們配上相應(yīng)的激光雕刻機作圖軟件,就可以成為一個商用化的產(chǎn)品了。





