📄 std_xdelay.c
字号:
/***
*void xdelay(unsigned int ms)
*
*Purpose:
* Make an exactly millisecond delay
*
*Entry:
* unsigned int ms - The delay time (millisecond)
*
*Exit:
* void
*
*Exceptions:
* Note:
* .This function was created by Denny at Jun/26/2008
* .Dongguan Siliten Electronics CO., LTD.
* .The timer frequency is 1193180Hz
* .The timer counter is 16bits, so only elapsed 55ms for\
* counter a circle.
*
*******************************************************************************/
void xdelay(unsigned int ms)
{
unsigned int base_counter;
unsigned int circle;
unsigned int counter;
unsigned int last_counter;
unsigned long end;
unsigned long cur;
_disable();
//outportb(0x43, 0x30);
base_counter = inportb(0x40);
base_counter += inportb(0x40)<<8;
_enable();
circle = 0;
last_counter = 0;
end = (unsigned long)ms*1193;
cur = 0;
while (end > cur)
{
_disable();
counter = inportb(0x40);
counter += inportb(0x40)<<8;
_enable();
counter = base_counter - counter;
if (counter-last_counter > 50) // Illegal data
{
last_counter = counter;
continue;
}
if ( (counter < last_counter) && (last_counter > 65000) && (counter < (65536-65000)) )
circle++;
cur = ((unsigned long)circle<<16) + counter;
//printf("base:%u|cir:%u|cnt:%u|last:%u|end:%lu|cur:%lu\n", base_counter, circle, counter, last_counter, end, cur);
last_counter = counter;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -