以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  DOM与ASP的接口问题?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=7542)


--  作者:cmy8132
--  发布时间:5/15/2004 7:37:00 PM

--  DOM与ASP的接口问题?
我做的一个小问题是知识查询与疑难问题系统,用的是asp和xml做的,其中的查询模块如下实现,如果用C,C++如何实现?
<html>t="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>查询结果</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body bgcolor="#000000">
<div align="center">
  <center>
  <table border="0" width="611" cellspacing="0" cellpadding="0" height="528" background="images/i-3-1.gif">
    <!--DWLayoutTable-->
    <tr>
      <td width="609" height="539" valign="top" background="images/t-02.gif">
        <div align="right">
          <table border="0" width="91%" cellspacing="5" cellpadding="5" height="477">
            <!--DWLayoutTable-->
            <tr>
              <td width="1" height="80"></td>
              <td width="100%"> <p align="center"><font color="#FF3366" size="4" face="仿宋_GB2312"><em><strong>我
                   们 一 直 在 努 力</strong></em></font></td>
            </tr>
            <tr bgcolor="#006666">
              <td height="61" colspan="2" valign="top"><div align="center"><font color="#00FF00" size="6"><strong>问题答案是</strong></font></div></td>
            </tr>
            <tr>
              <td height="349" colspan="2" valign="middle" bgcolor="#006460">
                <div align="left">
                  <form name="form1" method="post" action="">
                    <p>

              <%
      question=request.form("std_question")
      question=trim(question)
      length=len(question)
      question=left(question,length-4)
      keywords=SPLIT(question,"的")
     keyword_num=ubound(keywords)+1
     Set DomXML=Server.CreateObject("MSXML.DOMDocument")
     DomXML.Load "d:/知识查询与疑难问题系统/ds.XML"
     Set root=DomXML.documentElement
     set childNodes=root.selectNodes("//"&keywords(0)) '查找符合第一个关键字的所有节点
     if childNodes.length=0 then response.Write "<font color='#FF3366'>"&"对不起,找不到你要的问题的答案!" &"</font>"

     dim stack()
     redim stack(100,1)
     top=0
     for i=0 to childNodes.length-1
         set child=childNodes.item(i)
         set stack(top,0)=child
         stack(top,1)=0
         top=top+1
     next

     answer_order=1
     while top>0
         top=top-1
         set parent=stack(top,0)
         key_i=stack(top,1)
         if key_i+1=keyword_num then  '关键字匹配完毕
                   answer=question
                   answer=CStr(answer_order)&"."&answer
                   answer_order=answer_order+1
                   set answerNodes=parent.childNodes
                   if answerNodes.length>1 then
                      answer=answer&"可分为:"
                   else
                      answer=answer&"是:"
                   end if
                   for m=0 to answerNodes.length-2
                        set child=answerNodes.item(m)
                        if child.nodeType=1 or child.nodetype=2 then         'Current node is element node
                          answer=answer&child.nodename&"、"
                        elseif child.nodeType=3 or child.nodeType=4 then
                          answer=answer&"<br>"&child.text&"<br>"
                        end if
                   next
                   set child=answerNodes.item(m)
                   if m>0 then
                     if child.nodeType=1 then
                        answer=answer&"和"&child.nodeName&"。<hr>"
                     elseif child.nodeType=3 or child.nodeType=4 then
                       answer=answer&"和"&child.text&"。<hr>"
                     end if
                   else
                      if child.nodeType=1 then
                        answer=answer&child.nodeName&"。<hr>"
                      elseif child.nodeType=3 or child.nodeType=4 then
                        answer=answer&child.text&"。<hr>"
                      end if
                   end if
                   response.Write "<font color='#FF3366'>"&answer&"</font>"
         else
         set childSet=parent.childNodes
         finded=FALSE
         for j=0 to childSet.length-1
            set child=childSet.item(j)
            childName=child.nodeName
            if strcomp(childName,keywords(key_i+1))=0 then
               set stack(top,0)=child
               stack(top,1)=key_i+1
               top=top+1
               finded=TRUE
            end if
         next
         if finded=FALSE then
            for k=0 to childSet.length-1
               set child=childSet.item(k)
               set stack(top,0)=child
               stack(top,1)=key_i
               top=top+1
            next
         end if
        end if
     wend
     %>


                         </p>
                    </form>
                  <p>
                    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="144" height="39">
                      <param name="movie" value="button3.swf">
                      <param name="quality" value="high">
                      <param name="base" value=".">
                      <param name="bgcolor" value="#006666">
                      <embed src="button3.swf" width="144" height="39" base="."  quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" bgcolor="#006666"></embed>
                    </object>
                  </p>
                </div></td>
                
            </tr>
            <tr>
              <td height="36" colspan="2" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0">
                  <!--DWLayoutTable-->
                  <tr>
                    <td width="383" height="26" valign="top">   <font color="#66FFFF" size="4">      </font></td>
                    <td width="151" valign="top"><div align="center"><a href="main.htm"><font color="#33FFFF">返回</font></a></div></td>
                  </tr>
                </table></td>
            </tr>
          </table>
        </div></td>
      <td width="2">&nbsp;</td>
    </tr>
  </TABLE>
<CENTER>
  </DIV>
</CENTER></BODY></HTML>


--  作者:cmy8132
--  发布时间:5/15/2004 7:38:00 PM

--  
希望大家多多指教?
--  作者:Eve
--  发布时间:5/20/2004 9:44:00 PM

--  

--  作者:hyandlsz
--  发布时间:5/28/2004 9:43:00 AM

--  
关键是c,c++中有无这样的接口,DOM
--  作者:chencong7308570981
--  发布时间:5/23/2005 9:37:00 AM

--  
能否把XML文档和界面的源代码给看看!
--  作者: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文档的查询该如何做?谢谢


--  作者:613613
--  发布时间:5/23/2005 9:39:00 PM

--  
你们真强,我清不明白啊.
--  作者:chencong7308570981
--  发布时间:5/25/2005 10:13:00 AM

--  
那些XML文档是微机接口的芯片说明,如8253,8259,我还没写完,用8253的内容代替了8259的内容,但格式都是一样。请各位大虾帮帮该怎么查询,像楼主那样查询,谢谢!
--  作者:chencong7308570981
--  发布时间:5/26/2005 9:24:00 AM

--  
有点不懂啊!把关键的地方给讲讲,加点注释
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
156.250ms