一、 实验主要内容
定时器(1)
1、 内容1:使用定时器
定时器十分重要,但其原理较为简单,定时器的原理是每隔一段时间就发送一个中断信号给CPU,我们就可以每隔一定时间进行一次某种处理。
我们可以设定PIT,让定时器每隔多少秒就产生一个中断。因为PIT连接着IRQ的0号。
我们将周期设为11392(0x2e9c),中断频率是100Hz,即每10ms发生一次中断。
我们编写IRQ0发生时所调用的中断处理程序,其与键盘的中断处理程序一样,只是中断号不一样。
将这个中断处理程序加入到IDT
2、 内容2:计量时间
既然我们已经编写了定时器中断处理程序,让我们添加一些功能实现。
对PIT初始化时,将计数变量设置为0.
每次发生定时器中断,计数变量就递增1.那么1秒钟就会增加100,因为中断频率是100Hz
我们将数值打印出来
运行结果:
3、 内容3:超时功能
超时功能就是我们用于对执行任务的一个计时,经过我们一段设定的时间之后来执行某个任务。
设置变量timeout,表示离超时还有多少时间,到达0的时候,我们往FIFOh缓冲区发送数据。
settimer函数,如果还没设定完成就有中断进来会产生混乱,需要先禁止中断,等待设置完成。
将timeout初始设置为1000(10秒钟),10秒钟后向timerfifo写入“1”这个数据
当timerfifo接收到数据时,就会在屏幕上显示”10[sec]”,运行结果