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





