-- 作者:chencong7308570981
-- 发布时间:5/23/2005 11:18:00 AM
--
<?xml version="1.0" encoding="gb2312"?> <?xml-stylesheet type="text/xsl" href="chip.xsl"?> <!DOCTYPE CHIP-LIST SYSTEM "chip.dtd"> <CHIP-LIST> <CHIP> <NAME>8253</NAME> <FUNCTION> <SUMMARIZE> <L L_ID="B1">8253是Intel 公司生产的可编程计数器/定时器,主要用于需要有定时信号的控制系统或计算机中,掌握其功能特点及在系统中的编程方法,对于实时控制系统中的计数/定时计数有很大帮助。 常见的定时和计数方法有:</L> <L L_ID="B2">软定时:它运用软件编写程序产生等待延时和定时,是一种常用的方法。</L> <L L_ID="B3">硬定时:在电路中应用单稳延时电路或计数电路来实现延时和定时。</L> </SUMMARIZE> <APPEARANCE source="pic1"/> </FUNCTION> <STRUC-PIN> <STRUC> <PIC source="pic2"/> <L L_ID="B4">8253由CPU接口,内部控制电路以及三个计算器通道所组成。</L> <L L_ID="B5">/CS /RD /WR A1 A2 寄存器选择及操作 </L> <L L_ID="B6"> 0 1 0 0 0 写入计数器0 </L> <L L_ID="B7"> 0 1 0 0 1 写入计数器1 </L> <L L_ID="B8"> 0 1 0 1 0 写入计数器2 </L> <L L_ID="B9"> 0 1 0 1 1 写控制字 </L> <L L_ID="B10"> 0 0 1 0 0 读计数器0 </L> <L L_ID="B11"> 0 0 1 0 1 读计数器1 </L> <L L_ID="B12"> 0 0 1 1 0 读计数器2 </L> <L L_ID="B13"> 0 0 1 1 1 无操作高阻态 </L> <L L_ID="B14"> 1 X X X X 禁止高阻态 </L> <L L_ID="B15"> 0 1 1 X X 无操作高阻态</L> </STRUC> <PIN> <L L_ID="B16">8253典型信号作用: </L> <L L_ID="B17"> CLK:时钟信号的作用是在8253进行计数或定时工作时,每输入一个CLK,便使定时或计数值减1,它是计量的基本时钟。 </L> <L L_ID="B18"> GATE:门选通信号,其作用是控制定时或计数工作的开始。对于六种不同的工作方式,GATE信号的有效方式不同。 </L> <L L_ID="B19">OUT:计数器输出信号,其作用是当计数器工作时,当定时或计数值减为0,则OUT就输出一信号用以指示定时或计数到。此信号可用于定时或计数控制,也可作为中断请求信号。 </L></PIN></STRUC-PIN> <WORKING> <L L_ID="A1">8253中有一个控制字寄存器接受CPU写入方式控制字,此方式控制字将控制相应的计数的工作方式。控制字寄存器只能写入,不能读出。控制字的格式及功能如下:</L> <L L_ID="A2"> D7 D6 D5 D4 D3 D2 D1 D0</L> <L L_ID="A3"> SC1 SC0 RL1 RL0 M2 M1 M0 BCD</L> <L L_ID="A4">其中的符号说明如下:</L> <L L_ID="A5"> (1)D7,D6(SC1,SC0):用于本方式控制字控制的计数定时器通道。8253有三个独立工作的通道,即:</L> <L L_ID="A6">SC1.SC0=00-------选择0号计数器;</L> <L L_ID="A7">SC1.SC0=01-------选择1号计数器;</L> <L L_ID="A8">SC1.SC0=10-------选择2号计数器;</L> <L L_ID="A9">SC1.SC0=11-------非法。</L> <L L_ID="A10">(2)D5,D4(RL1,RL0):用来控制向计数器读/写的字节数(1或2个字节)及读写高低字节的顺序,其中:</L> <L L_ID="A11">RL1.RL0=00------为一特殊命令,它把SC1.SC0指定的计数器的当前值锁定在锁定</L> <L L_ID="A12">寄存器中,以便随时去读取它;</L> <L L_ID="A13">RL1.RL0=00------仅读/写一个低字节;</L> <L L_ID="A14">RL1.RL0=00------仅读/写一个高字节;</L> <L L_ID="A15">RL1.RL0=00------读/写2个字节,先是地字节低字节,后高字节。</L> <L L_ID="A16">(3)D3~D1(M3~M0):用来选择计数器以下6种工作方式中的一种:</L> <L L_ID="A17">M2.M1.M0=000------方式0;</L> <L L_ID="A18">M2.M1.M0=001------方式1; </L> <L L_ID="A19">M2.M1.M0=010------方式2;</L> <L L_ID="A21">M2.M1.M0=100------方式4;</L> <L L_ID="A22">M2.M1.M0=101------方式5;</L> <L L_ID="A23">(4)D0(BCD):用来选择计数器写入数据时,是按二进制读写还是按十进制数读写。</L> <L L_ID="A24">BCD=0-------二进制;</L> <L L_ID="A25">BCD=0-------二进制;</L></WORKING> <INITIAL> <L L_ID="A26">8253的计数器有六种工作方式:方式0 方式1 方式2 方式3 方式4 方式5 </L> <L L_ID="A27">它们的区别三点: 1.输出波形的不同; 2.启动计数器的触发方式不同; 3.计数过程中门控信号对计数操作的影响不同区分。</L> <L L_ID="A28">方式0(计数结束中断) </L> <L L_ID="A29">写入方式命令字之后计数器的OUT引脚变成低电平,在保持GATE信号为高电平(即允许计数)的 情况下,选中的"计数初值"寄存器被加载后,下一个CLK脉冲下降沿开始以减法计数,此时计 数器OUT引脚为低电平,直至计数器的值减为0,OUT变为高电平,这样完成一次计数过程。要再 次计数需再次传送"方式0控制字"或进入新的计数初值,计数结束后OUT为高电平的上升沿可用 作中断申请。这种方式用于"事件"计数很不方便。此种方式的计数过程及输出波形如下图:</L> <L L_ID="A30">GATE为高时允许计数,低时禁止计数。若计数过程中GATE由高变低则使当时的计数值保 留在计数器中而暂停计数,直至GATE再次为高时继续计数,暂停时OUT为低。计数过程中 若写入新的计数初值,则写完新值后在下一CLK脉冲开始重新计数。</L> <L L_ID="A31">方式1(程序可控单稳) </L> <L L_ID="A32">写入方式命令字和加载计数初值后OUT为高电平,直接由门控信号GATE的上升沿触发使 OUT为低,在下一CLK的下降沿开始减法计数,OUT一直为低直到计数值减为0时才变为 高电平,这样完成一个不改动初值再送入GATE信号的上升沿则再次触发。OUT信号由低到高的跳变可用作中断 申请。 单脉冲输出过程,计数过程及输出波形如下图: </L> <L L_ID="A33">方式2(频率发生器)</L> <L L_ID="A34">写入方式命令之后OUT为高电平,若此时GATE为高则在加载计数初值寄存器后的一个CLK的 下降沿将计数初值置入计数器并开始减法计数。计数值减为一时OUT变为低,减至0时变为 高,同时自动将计数初值置入计数器继续进行减法计数形成循环计数,在OUT输出一系列周 期为N个时钟周期CLK,负脉冲宽度为一个CLK的信号,如下图所示: </L> <L L_ID="A35">方式2的功能是以计数初值N为分频因子的分频器,常用来产生实时的时钟。GATE为高时允许 计数,低时禁止计数,如GATE由低变高,则将计数初值置入计数器开始重新计数。方式2的功能是以计数初值N为分频因子的分频器,常用来产生实时的时钟。GATE为高时允许 计数,低时禁止计数,如GATE由低变高,则将计数初值置入计数器开始重新计数。</L> <L L_ID="A36">方式3(方波发生器)</L> <L L_ID="A37">与方式2相似,仅OUT输出波形不同,它输出的是一系列方波,其占空比可以相等也可不等,与 计数初值有关,常用作波特率发生器。计数初值N为偶数时输出对称的方波,如计数初值为奇 数且输出是高电平,则第一个时钟将计数减一,后面的时钟脉冲对计数减二,在停止后输出变 为低电平,并装入全量计数值,此时第一个时钟脉冲(继重输入之后)对计数器减3,以后的时 钟脉冲对计数器减2,直至结束,然后重复整个过程。波形如下图:</L> <L L_ID="A38">计数期间如果计数是奇数则在(N 1)/2的时间内输出为高电平,而在(N 1)/2的相同时间内输出为低电平。</L> <L L_ID="A39">方式4(软件触发脉冲)</L> <L L_ID="A40">写入方式命令后OUT为高电平,在GATE为高电平的情况下加载计数初值寄存器后,下一个CLK的 下降沿开始减法计数,计数值减为0时OUT变为低电平,经过一个CLK后又变为高电平,即在第 N 1个CLK周期上输出一个负脉冲,宽 度为一个CLK,如下图: </L> <L L_ID="A41">GATE为高时允许计数,低电平禁止计数,再次为高时,计数器从计数初值重新开始减法计数。 </L> <L L_ID="A42">方式5(硬件触发脉冲)</L> <L L_ID="A43">写入"方式控制字"和加载"计数初值"后,OUT变为高电平,直接由GATE的上升沿触发,在下 一个时钟CLK的下降沿开始减法计数,计数结束后OUT输出变为低电平,此后又变为高电平,即 在第N 1个CLK的周期上输出一个单时钟周期负脉冲,如下图:</L> <L L_ID="A44">GATE的上升沿作为触发,而低电平,高电平及下降沿对计数过程无影响。</L> </INITIAL> <APPLICATION> <L L_ID="A45">本例中利用8253的定时计数特性来控制扬声器的发声频率和发声长短,电路图如下:</L> <L L_ID="A46">OUT2发送600赫兹方波,定时长短由GATE2控制,滤波器前的与门由8255的PB1控制。PB0和PB1同时为高的时间来控制是发长音还是发短音。8253的地址为040H~043H。8255A的口地址为60H~63H。</L> <L L_ID="A47">程序如下:</L> <L L_ID="A48">SSP PROC NEAR</L> <L L_ID="A49">MOV AL,10110110B ;计数器2,初值为16位,方式3,二进制格式</L> <L L_ID="A50">OUT 43H,AL ;计数器2的方式控制寄存器地址</L> <L L_ID="A51">MOV AL,1983 ;1.19MHz/600Hz=1983,计数初值</L> <L L_ID="A52">OUT 42H,AL ;发送低字节</L> <L L_ID="A53">MOV AL,AH</L> <L L_ID="A54">OUT 42H,AL ;发送高字节</L> <L L_ID="A55">IN AL,61H ;读8255B口原输出值</L> <L L_ID="A56">MOV AH,AL ;输出值保存AH中</L> <L L_ID="A57">OR AL,03H ;使PB1 PB0均为1</L> <L L_ID="A58">OUT 61H,AL ;打开GATE2,输出方波</L> <L L_ID="A59">SUB CX,CX</L> <L L_ID="A60">L:LOOP L ;延时循环</L> <L L_ID="A61">DEC BL ;BL为子程序入口条件</L> <L L_ID="A62">JNZ L ;BL=6,发长声</L> <L L_ID="A63">BL=1,发短声</L> <L L_ID="A64">MOV AL,AH ;取回AH中的8255 B口的原输出值</L> <L L_ID="A65">OUT 61H,AL ;恢复8255 B口</L> <L L_ID="A66">RET ;返回</L> <L L_ID="A67">SSP ENDP</L></APPLICATION> </CHIP> <CHIP> <NAME>8259</NAME> <FUNCTION> <SUMMARIZE> <L L_ID="B1">8253是Intel 公司生产的可编程计数器/定时器,主要用于需要有定时信号的控制系统或计算机中,掌握其功能特点及在系统中的编程方法,对于实时控制系统中的计数/定时计数有很大帮助。 常见的定时和计数方法有:</L> <L L_ID="B2">软定时:它运用软件编写程序产生等待延时和定时,是一种常用的方法。</L> <L L_ID="B3">硬定时:在电路中应用单稳延时电路或计数电路来实现延时和定时。</L> </SUMMARIZE> <APPEARANCE source="pic1"/> </FUNCTION> <STRUC-PIN> <STRUC> <PIC source="pic2"/> <L L_ID="B4">8253由CPU接口,内部控制电路以及三个计算器通道所组成。</L> <L L_ID="B5">/CS /RD /WR A1 A2 寄存器选择及操作 </L> <L L_ID="B6"> 0 1 0 0 0 写入计数器0 </L> <L L_ID="B7"> 0 1 0 0 1 写入计数器1 </L> <L L_ID="B8"> 0 1 0 1 0 写入计数器2 </L> <L L_ID="B9"> 0 1 0 1 1 写控制字 </L> <L L_ID="B10"> 0 0 1 0 0 读计数器0 </L> <L L_ID="B11"> 0 0 1 0 1 读计数器1 </L> <L L_ID="B12"> 0 0 1 1 0 读计数器2 </L> <L L_ID="B13"> 0 0 1 1 1 无操作高阻态 </L> <L L_ID="B14"> 1 X X X X 禁止高阻态 </L> <L L_ID="B15"> 0 1 1 X X 无操作高阻态</L> </STRUC> <PIN> <L L_ID="B16">8253典型信号作用: </L> <L L_ID="B17"> CLK:时钟信号的作用是在8253进行计数或定时工作时,每输入一个CLK,便使定时或计数值减1,它是计量的基本时钟。 </L> <L L_ID="B18"> GATE:门选通信号,其作用是控制定时或计数工作的开始。对于六种不同的工作方式,GATE信号的有效方式不同。 </L> <L L_ID="B19">OUT:计数器输出信号,其作用是当计数器工作时,当定时或计数值减为0,则OUT就输出一信号用以指示定时或计数到。此信号可用于定时或计数控制,也可作为中断请求信号。 </L></PIN></STRUC-PIN> <WORKING> <L L_ID="A1">8253中有一个控制字寄存器接受CPU写入方式控制字,此方式控制字将控制相应的计数的工作方式。控制字寄存器只能写入,不能读出。控制字的格式及功能如下:</L> <L L_ID="A2"> D7 D6 D5 D4 D3 D2 D1 D0</L> <L L_ID="A3"> SC1 SC0 RL1 RL0 M2 M1 M0 BCD</L> <L L_ID="A4">其中的符号说明如下:</L> <L L_ID="A5"> (1)D7,D6(SC1,SC0):用于本方式控制字控制的计数定时器通道。8253有三个独立工作的通道,即:</L> <L L_ID="A6">SC1.SC0=00-------选择0号计数器;</L> <L L_ID="A7">SC1.SC0=01-------选择1号计数器;</L> <L L_ID="A8">SC1.SC0=10-------选择2号计数器;</L> <L L_ID="A9">SC1.SC0=11-------非法。</L> <L L_ID="A10">(2)D5,D4(RL1,RL0):用来控制向计数器读/写的字节数(1或2个字节)及读写高低字节的顺序,其中:</L> <L L_ID="A11">RL1.RL0=00------为一特殊命令,它把SC1.SC0指定的计数器的当前值锁定在锁定</L> <L L_ID="A12">寄存器中,以便随时去读取它;</L> <L L_ID="A13">RL1.RL0=00------仅读/写一个低字节;</L> <L L_ID="A14">RL1.RL0=00------仅读/写一个高字节;</L> <L L_ID="A15">RL1.RL0=00------读/写2个字节,先是地字节低字节,后高字节。</L> <L L_ID="A16">(3)D3~D1(M3~M0):用来选择计数器以下6种工作方式中的一种:</L> <L L_ID="A17">M2.M1.M0=000------方式0;</L> <L L_ID="A18">M2.M1.M0=001------方式1; </L> <L L_ID="A19">M2.M1.M0=010------方式2;</L> <L L_ID="A21">M2.M1.M0=100------方式4;</L> <L L_ID="A22">M2.M1.M0=101------方式5;</L> <L L_ID="A23">(4)D0(BCD):用来选择计数器写入数据时,是按二进制读写还是按十进制数读写。</L> <L L_ID="A24">BCD=0-------二进制;</L> <L L_ID="A25">BCD=0-------二进制;</L></WORKING> <INITIAL> <L L_ID="A26">8253的计数器有六种工作方式:方式0 方式1 方式2 方式3 方式4 方式5 </L> <L L_ID="A27">它们的区别三点: 1.输出波形的不同; 2.启动计数器的触发方式不同; 3.计数过程中门控信号对计数操作的影响不同区分。</L> <L L_ID="A28">方式0(计数结束中断) </L> <L L_ID="A29">写入方式命令字之后计数器的OUT引脚变成低电平,在保持GATE信号为高电平(即允许计数)的 情况下,选中的"计数初值"寄存器被加载后,下一个CLK脉冲下降沿开始以减法计数,此时计 数器OUT引脚为低电平,直至计数器的值减为0,OUT变为高电平,这样完成一次计数过程。要再 次计数需再次传送"方式0控制字"或进入新的计数初值,计数结束后OUT为高电平的上升沿可用 作中断申请。这种方式用于"事件"计数很不方便。此种方式的计数过程及输出波形如下图:</L> <L L_ID="A30">GATE为高时允许计数,低时禁止计数。若计数过程中GATE由高变低则使当时的计数值保 留在计数器中而暂停计数,直至GATE再次为高时继续计数,暂停时OUT为低。计数过程中 若写入新的计数初值,则写完新值后在下一CLK脉冲开始重新计数。</L> <L L_ID="A31">方式1(程序可控单稳) </L> <L L_ID="A32">写入方式命令字和加载计数初值后OUT为高电平,直接由门控信号GATE的上升沿触发使 OUT为低,在下一CLK的下降沿开始减法计数,OUT一直为低直到计数值减为0时才变为 高电平,这样完成一个不改动初值再送入GATE信号的上升沿则再次触发。OUT信号由低到高的跳变可用作中断 申请。 单脉冲输出过程,计数过程及输出波形如下图: </L> <L L_ID="A33">方式2(频率发生器)</L> <L L_ID="A34">写入方式命令之后OUT为高电平,若此时GATE为高则在加载计数初值寄存器后的一个CLK的 下降沿将计数初值置入计数器并开始减法计数。计数值减为一时OUT变为低,减至0时变为 高,同时自动将计数初值置入计数器继续进行减法计数形成循环计数,在OUT输出一系列周 期为N个时钟周期CLK,负脉冲宽度为一个CLK的信号,如下图所示: </L> <L L_ID="A35">方式2的功能是以计数初值N为分频因子的分频器,常用来产生实时的时钟。GATE为高时允许 计数,低时禁止计数,如GATE由低变高,则将计数初值置入计数器开始重新计数。方式2的功能是以计数初值N为分频因子的分频器,常用来产生实时的时钟。GATE为高时允许 计数,低时禁止计数,如GATE由低变高,则将计数初值置入计数器开始重新计数。</L> <L L_ID="A36">方式3(方波发生器)</L> <L L_ID="A37">与方式2相似,仅OUT输出波形不同,它输出的是一系列方波,其占空比可以相等也可不等,与 计数初值有关,常用作波特率发生器。计数初值N为偶数时输出对称的方波,如计数初值为奇 数且输出是高电平,则第一个时钟将计数减一,后面的时钟脉冲对计数减二,在停止后输出变 为低电平,并装入全量计数值,此时第一个时钟脉冲(继重输入之后)对计数器减3,以后的时 钟脉冲对计数器减2,直至结束,然后重复整个过程。波形如下图:</L> <L L_ID="A38">计数期间如果计数是奇数则在(N 1)/2的时间内输出为高电平,而在(N 1)/2的相同时间内输出为低电平。</L> <L L_ID="A39">方式4(软件触发脉冲)</L> <L L_ID="A40">写入方式命令后OUT为高电平,在GATE为高电平的情况下加载计数初值寄存器后,下一个CLK的 下降沿开始减法计数,计数值减为0时OUT变为低电平,经过一个CLK后又变为高电平,即在第 N 1个CLK周期上输出一个负脉冲,宽 度为一个CLK,如下图: </L> <L L_ID="A41">GATE为高时允许计数,低电平禁止计数,再次为高时,计数器从计数初值重新开始减法计数。 </L> <L L_ID="A42">方式5(硬件触发脉冲)</L> <L L_ID="A43">写入"方式控制字"和加载"计数初值"后,OUT变为高电平,直接由GATE的上升沿触发,在下 一个时钟CLK的下降沿开始减法计数,计数结束后OUT输出变为低电平,此后又变为高电平,即 在第N 1个CLK的周期上输出一个单时钟周期负脉冲,如下图:</L> <L L_ID="A44">GATE的上升沿作为触发,而低电平,高电平及下降沿对计数过程无影响。</L> </INITIAL> <APPLICATION> <L L_ID="A45">本例中利用8253的定时计数特性来控制扬声器的发声频率和发声长短,电路图如下:</L> <L L_ID="A46">OUT2发送600赫兹方波,定时长短由GATE2控制,滤波器前的与门由8255的PB1控制。PB0和PB1同时为高的时间来控制是发长音还是发短音。8253的地址为040H~043H。8255A的口地址为60H~63H。</L> <L L_ID="A47">程序如下:</L> <L L_ID="A48">SSP PROC NEAR</L> <L L_ID="A49">MOV AL,10110110B ;计数器2,初值为16位,方式3,二进制格式</L> <L L_ID="A50">OUT 43H,AL ;计数器2的方式控制寄存器地址</L> <L L_ID="A51">MOV AL,1983 ;1.19MHz/600Hz=1983,计数初值</L> <L L_ID="A52">OUT 42H,AL ;发送低字节</L> <L L_ID="A53">MOV AL,AH</L> <L L_ID="A54">OUT 42H,AL ;发送高字节</L> <L L_ID="A55">IN AL,61H ;读8255B口原输出值</L> <L L_ID="A56">MOV AH,AL ;输出值保存AH中</L> <L L_ID="A57">OR AL,03H ;使PB1 PB0均为1</L> <L L_ID="A58">OUT 61H,AL ;打开GATE2,输出方波</L> <L L_ID="A59">SUB CX,CX</L> <L L_ID="A60">L:LOOP L ;延时循环</L> <L L_ID="A61">DEC BL ;BL为子程序入口条件</L> <L L_ID="A62">JNZ L ;BL=6,发长声</L> <L L_ID="A63">BL=1,发短声</L> <L L_ID="A64">MOV AL,AH ;取回AH中的8255 B口的原输出值</L> <L L_ID="A65">OUT 61H,AL ;恢复8255 B口</L> <L L_ID="A66">RET ;返回</L> <L L_ID="A67">SSP ENDP</L></APPLICATION> </CHIP> </CHIP-LIST> 请问对以上的XML文档的查询该如何做?谢谢
|