实验七8254定时/计数器基本功能•定时时间到——OUT端输出信号•计数个数(次数)到——OUT端输出信号CSCLK0GATE0+5V外部脉冲OUT0计数工作方式CS1?CSCLK1GATE1+5V系统时钟OUT1定时工作方式CS18259ACPUIRQ0INT1INTR中断服务程序82548259ACPUCLKOUTIRQ0INT1INTR中断服务程序A2A3•8254地址输入端A0接至系统地址线A2;•8254地址输入端A1接至系统地址线A3;•地址输出端CS1接至8254的片选CS;•当A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0•00000011000xxxxxCS1=0•00000011000x00xx300H•00000011000x01xx304H•00000011000x10xx308H•00000011000x11xx30CH•x:表示可以取任意值,这里取“0”口地址分配•8253控制端口30CH•计数器0口的地址300H•计数器1口的地址304H•计数器2口的地址308H•D7D6D5D4D3D2D1D0•计数器选择•D7D6=00选择0号计数器;D7D6=01选择1号计数器;•D7D6=10选择2号计数器;D7D6=11控制字的标志之一;•读/写方式选择:•D5D4=00,锁存计数器的当前值,以便读出检查;•D5D4=01,写入时,只写低8位计数初值,高8位置0;读出时,只读出低8位的当前计数值;•D5D4=10,写入时,只写高8位计数初值,低8位置0;读出时,只读出高8位的当前计数值;•D5D4=11,先读/写低8位计数值,后读/写高8位的当前计数值;•工作方式选择:•D3D2D1=000,计数器工作在方式0;D3D2D1=001,计数器工作在方式1;•D3D2D1=X10,计数器工作在方式2;D3D2D1=X11,计数器工作在方式3;•D3D2D1=100,计数器工作在方式4;D3D2D1=101,计数器工作在方式5;•数制选择:•D0=0,计数初值二进制数•D0=1,计数初值十进制数计数器选择读/写方式选择工作方式选择数制选择关键指令MOVDX,30CH;设置控制字MOVAL,00010001BOUTDX,ALMOVDX,300H;设置0口计数值MOVAL,03OUTDX,AL实验内容•(1)8254计数工作方式•CLK0外部脉冲•GATE0+5V•OUT0IRQ0•8254地址输入端A0接至系统地址线A2;•8254地址输入端A1接至系统地址线A3•8254设置为计数方式,记录外部触发脉冲个数;•计数达到5次,OUT0输出信号给8259AIRQ0•利用8259A实验程序,使得CX-1主程序CPU关中断8259初始化设置中断向量8254初始化(计数5次)CPU开中断循环等待(注意标号)中断服务子程序CPU关中断CX-1CPU开中断中断返回(2)8254定时工作方式•CLK1接时钟•GATE1接+5V•OUT1接8259A•8254地址输入端A0接至系统地址线A2•8254地址输入端A1接至系统地址线A3•定时20毫秒,自启动方式,达到20毫秒则OUT1输出脉冲信号给8259AIRQ0•利用8259A实验程序,每1秒改变一次CX-1程序调试方法•8259A工作正常•关闭电源•改变连线OUT0——IRQ0•CLK0——外部脉冲•8254地址A0——系统地址线A2•8254地址A1——系统地址线A3•在主程序中,增加8254初始化