定时中断问题

wenjun1130 2007-12-13 01:06:58
unsigned long Counter;

unsigned CounterInt8,fpI8;

void SetTimer(void interrupt(*Rout)(…),unsigned freq)

{//设置新频率的定时中断

int ICnt;

fpI8=(freq+9)/18;//新旧频率的倍数 //请问这个(freq+9)/18公式是怎么来的

asm cli

ICnt=1193180/freq;

outportb(0x43,0x36);

outportb(0x40,ICnt & 255);

outportb(0x40,ICnt》8);

setvect(OldTimerInt,getvect(


8));//保存旧定时中断

setvect(8,rout);//置新的定时中断

sam sti;

}

void RestoreTimer()

{

asm cli

outportb(0x43,0x36);

outportb(0x40,0);

outportb(0x40,0);

setvect(8,getvect(OldTimerInt));//恢复原定时中断

asm sti

}

void interrupt NewTimer(…)

{//新定时中断

REGPACK R;

Counter++;//给应用程序提供新频率的计数

if(--CounterInt8=0) //请问 整个过程没有设置CounterInt8初始值 怎么就可以使用啊

{

intr(OldTimerInt,&R);//按原频率走动时钟

CounterInt8=fpI8;//用新旧频率的倍数分频

}

else outportb(0x20,0x20);//退出中断

} 

...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjun1130 2007-12-18
  • 打赏
  • 举报
回复
对不起 Treazy

我点快了 加错分了

你到我其他帖中随便发点什么 我在给你分把
wenjun1130 2007-12-16
  • 打赏
  • 举报
回复
怎么结帖 总是说我密码错误啊
wenjun1130 2007-12-16
  • 打赏
  • 举报
回复
谢谢 各位帮忙
Treazy 2007-12-13
  • 打赏
  • 举报
回复
counter是全局变量,默认初始化应该为0
另外对于你的倍频公式
应该就是0-9不变,9-18为1倍频率,依次……
yinlang2004 2007-12-13
  • 打赏
  • 举报
回复
看不懂

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧