typedef unsigned short WORD;
WORD wGlobal_SystemDivide = 2;
WORD wGlobal_SystemCounter = 0;
//函数原型:void ChangeSystemTimer(WORD wDivide)
//函数作用:改变系统定时器
//入口参数:WORD wDivide ---- 分频数,取值在1~16之间
// wDivide = 1时,每秒中断(18.2 * pow(2,1- 1)次,即54.94mS中断一次
// wDivide = X时,每秒中断(18.2 * pow(2,X-1))次
//出口参数:无
//返 回 值:无
//传递参数时用"wGlobal_SystemDivide"全局变量
void ChangeSystemTimer(WORD wDivide)
{
//时钟是1.1931817MHz
//计算计数值
WORD wTimer = (WORD)((65536L >> (wDivide - 1u)));
//选择计数器0, 先低后高读/写入,模式3,二进制数计数
asm mov al, 00110110B //36H
asm out 43H, al //选择模式
asm mov ax, wTimer
asm out 40H, Al //写入低字节
asm mov al, ah
asm out 40H, Al //写入高字节
return;
}
//中断0x1C需要修改
void far interrupt NewInt1C()
{
//在中断函数里面不要执行浮点运算,否则需要保护数学协处理器FCU,指令是FSave,FWait和frstor
asm mov ax, seg wGlobal_SystemCounter
asm mov ds, ax
if ((++wGlobal_SystemCounter) >= (1 << (wGlobal_SystemDivide - 1)))
{
wGlobal_SystemCounter = 0;
//这里调用老的中断1CH
}
//这里执行您自己的函数
//...
return;
}
//需要修改老的delay函数
void NewDelay(WORD wMilloSeconds)
{
for (int i = 0; i < (1 << (wGlobal_SystemDivide - 1)); i++)
{
//这里有错,以后修改
::delay(wMilloSeconds);
}
}
[ Last edited by firstsail on 2008-10-14 at 11:23 ]