上一部分已经简单的说了基本的实例化:http://my.oschina.net/u/1185580/blog/187255
1. 如下图:对应的是8259a中的中断描述
既然是可编程,那就是对端口的操作了
其实是对:http://wenku.baidu.com/view/dcbef6140b4e767f5acfcef3.html 的抄写
2.下面是整个流程以及对应的图解:
;设置8259A中断控制器 mov al, 011h out 020h, al ; 主8259, ICW1. out 0A0h, al ; 从8259, ICW1
mov al, 004h ; IR2 对应从8259 out 021h, al ; 主8259, ICW3. mov al, 002h ; 对应主8259的 IR2 out 0A1h, al ; 从8259, ICW3.
mov al, 001h out 021h, al ; 主8259, ICW4. out 0A1h, al ; 从8259, ICW4.
mov al, 11111110b ; 仅仅开启定时器中断 ;mov al, 11111111b ; 屏蔽主8259所有中断 out 021h, al ; 主8259, OCW1. mov al, 11111111b ; 屏蔽从8259所有中断 out 0A1h, al ; 从8259, OCW1.
mov al,0x20 ;中断结束命令EOI out 0xa0,al ;向8259A从片发送 out 0x20,al ;向8259A主片发送
1.概念
定时器:计数对象是内部标准的时钟信号,那么计数就可以是一段时间
计数器:计数对象如果是外部对应的脉冲信号,则周期不定则为计数
2.定时、计数方法
硬件法 废材料;
软件法 CPU利用率
所以软硬结合
3.芯片介绍
一个芯片有三个计数器,和六种方式
直奔主题:#0 计数器 法3 是8259A的IR0(明白说这个跟上面的关系,不设置这个时钟中断默认照样工作的)
#1 计数器 法2 是8237A-5DMA控制通道0的DMA请求DREQ0
#2 计数器 法3 是8255的PB0 声音的
控制端口 计数端口
#0 0X43 0X40
#2 0X43 0X41
#3 0X43 0X42
;速度如飞啊,当al初始值0才是最大值 MOV AL,36H OUT 43H,AL ;送控制字到8253的控制寄存器 mov ax,0xff01 OUT 40h,al ;送时间常数到2号通道 out 40h,al
书上第九章《X86汇编语言:实模式到保护模式》
这个触发的是IRQ7实时中断,还有这里可以得到当前的时间
操作端口: 0x70 或者 0x74 是索引端口,0x71 或者 0x75 是数据端口,用来读写相应单元里的内容。
;星期几 mov al,0x06 out 0x70,al in al,0x71
2.
;设置和时钟中断相关的硬件 mov al,0x0b ;RTC寄存器B 0000_1011 or al,0x80 ;阻断NMI 1000_0000 out 0x70,al mov al,0x12 ;设置寄存器B,禁止周期性中断,开放更 out 0x71,al ;新结束后中断,BCD码,24小时制 mov al,0x0c out 0x70,al in al,0x71 ;读RTC寄存器C,复位未决的中断状态;中断态要重新设置mov al,0x0c ;寄存器C的索引。且开放NMI out 0x70,al in al,0x71 ;读一下RTC的寄存器C,否则只发生一次中断
接下来把键盘中断搞定来。^_^