搜索
您的当前位置:首页正文

AC4071

来源:爱go旅游网
 AC4071 AC4073 使 用 手 册 wwlab ©2001.1. AC4071 AC4071 使用手册 1 AC4071 AC4071板简介 AC4071可以广泛地应用于计数、定时、测频、频率发生、数字量控制,特别是在计数、定时、测频等领域可以灵活、方便地组合,满足用户的多种不同需求。 主要特点、性能:  计数、定时: AC4071板上有9个计数/定时器,每个计数/定时器各自独立。9个计数/定时器的CLK,GATE,OUT全部外接,其中GATE上拉输出,CLK、OUT端满足标准TTL电气特性。计数器0提供OUT反向输出。  数字量IO: -AC4071板上有16个数字量输入,16个数字量输出。 -32个数字量端口满足标准TTL电气特性。  板上占用四条地址线(A0-A3),操作地址100H-3FFH由JP1-6位跳线器开关选择。   板上一路中断可由IRQ3,5,7任意选择一个,由JP2选择。 AC4071板上提供两个时钟源,一个0.5us,64us,由JP3选其中之一。 1 AC4071  9个计数/定时器的输入输出由40PIN扁平电缆插座P1输入、输出。  32个数字量输入输出由40PIN扁平电缆插座P2输入、输出。 2 AC4071 AC4071板控制地址选择及跳线说明 AC4071地址选择: 首先关掉PC机电源,选好AC4071的IO地址(跳线器JP1),然后打开机箱,将AC4071插入PC机的任意一个空插槽中,并固定好,联好电缆线,关好机箱。 PC的IO译码占用10条地址线A0-A9。AC4071占用4条地址(A0-A3)称为“偏移地址”-offset,其余6条(A4-A9)由跳线器JP1选择,称为“基地址”-base。 JP1: A4 当跳线器为短路时,表示此路对应地址选择为“0”,文中用“X”表示。 当跳线器为开路时,表示此路对应地址选择为“1”,文中用“-”表示。 1 A5 A6 A7 A8 A9 AC4071 地址选择方法如下:JP1跳线器的1-6为对应选择地址A4-A9共六条,所以基地址-BASE只能在100-3F0H中选择(低四位地址被AC4071占用)。因此: AC4071操作的实际地址(adr) = 基地址(base) + 偏移地址(offset) 例:欲选择操作基地址为:240H,JP1的设定方法如下: JP1: X A4 X A5 - A6 X A7 X A8 - A9 * 本卡出厂设置即为240H。 2 AC4071 A0-A3偏移地址(Offset)由AC4071板占用,分配如下: A0-A3 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H AH BH CH DH 读操作(RD) 读取计数器0数值 读取计数器1数值 读取计数器2数值 读取计数器3数值 读取计数器4数值 读取计数器5数值 读取计数器6数值 读取计数器7数值 读取计数器8数值 读取数字量输入0- 7 读取数字量输入8-15 写操作(WR) 装入计数器0数值 装入计数器1数值 装入计数器2数值 写控制字,0 - 2 装入计数器3数值 装入计数器4数值 装入计数器5数值 写控制字,3 - 5 装入计数器6数值 装入计数器7数值 装入计数器8数值 写控制字,6 - 8 装入数字量输出0-7 装入数字量输出8-15 例:如果我们已经设置段地址240H,要读数字量输入0-7,则最终地址为: 3 240H+CH读操作。 AC4071 AC4071中断选择: AC4071提供一路中断选择,可由IRQ3,5,7之中通过跳线器JP2任选其一,接线连到端口P1。 AC4071时钟源选择: AC4071提供0.5us和64us两路时钟,通过跳线器JP3可由用户任选其一,接线连到端口P1。 AC4071的中断及时钟全部接到板上接口P1,由用户选接控制。 4 AC4071 AC4071硬件及编程 AC4071分两大部分:计数器和数字IO。下面我们就这两部分详细讨论AC4071的使用和编程方法。 一、计数器部分: AC4071板上有三片8253,每片8253含有三个计数器,共九个计数器。首先让我们讨论一下8253的使用方法。 8253的主要技术特性:     8253除选通信号外,还有两条地址线(A0,A1),用选通地址加有三个独立的十六位计数器; 计数频率范围是0~2Mhz; 可编程计数器方式; 二进制或二-十进制计数; 上A0A1产生的偏移来选通内部三个独立的计数器。三个8253选通的偏移地址分别是0x0, 0x4, 0x8。 8253在片选通时,A0A1的作用如下: 5 AC4071 A1 0 0 1 1 使用说明: 8253的全部功能都是通过系统软件编程确定的。CPU必须A0 0 1 0 1 读操作 读计数器0 读计数器1 读计数器2 无操作三态 写操作 写计数器0 写计数器1 写计数器2 写方式控制字 送出一组控制字,将8253的每一个计数器预置成要求的工作方式和数值。预置之前,任何计数器的工作方式、计数值和输出都是不确定的。 1。控制字格式: D7 SC1 D6 SC0 D5 D4 D3 D2 M1 D1 M0 D0 BCD RL1 RL0 M2 6 AC4071 控制字说明: SC --选择计数器 SC1 0 0 1 1 RL--读/装入 RL1 0 0 1 1 M--方式 M2 0 0 M1 0 0 M0 0 1 方式0 方式1 7 RL0 0 1 0 1 计数器锁存操作 只是读/装入高字节 只是读/装入低字节 先读/装入低字节,后读/装入高字节 SC0 0 1 0 1 选择计数器0 选择计数器1 选择计数器2 非法 AC4071 × × 1 1 BCD 0 1 2。8253的程序编制 每个计数器的所有方式都是由系统软件通过简单的IO操作十六位二进制计数器 二-十计数器(4个十进位) 1 1 0 0 0 1 0 1 方式2 方式3 方式4 方式5 来设定的。8253每个计数器的编程是通过向控制字寄存器写入控制字而分别实现的。 3。装入计数器 只有当计数值(一个或两个字节,取决于RL位的状态)写入8253,并经过一个时钟上升沿和一个下降沿之后,数值才装入计数寄存器。 4。方式定义 方式0:计数结束中断 8 AC4071 方式设定操作以后,输出变为低电平。当计数值装入选定的计数寄存器以后,输出将保持低电平,计数器开始计数。当计数结束时,输出变为高电平,并且一直保持到该计数寄存器装入新的工作方式或计数值为止。计数结束之前计数器将不断进行减计数。 在计数期间重新对计数寄存器进行装入,将出现以下情况: (1) 写入第一字节停止计数过程。 (2) 写入第二字节开始新的计数过程。 当GATE输入端处于高电平时,允许计数,处于低电平便禁止计数。 方式1:可编程单稳 在GATE输入信号上升沿以后的计数过程中,输出将变为低电平。计数结束时输出将变为高电平。若输出为低电平时装入一个新计数值,则在下一次触发之前将不影响单稳脉冲。单稳是重触发性的。因而,在任何GATE输入信号上升沿以后,输出端将在足够的计数周期内保持低电平。 方式2:频率发生器 N分频计数器。输出变为低电平的时间是一个输入时钟周期。从一个输出脉冲到下一个输出脉冲之间的时间等于输入至计数寄存器的计数值。如果在两个输出脉冲之间对计数寄存器重新进行 9 AC4071 装入,则现行计数过程不受影响,但是下一周期将反映新数值。当GATE输入端为低电平时,将迫使输出为高电平。当GATE输入端为高电平时,计数器从预置的计数值开始计数。这样,GATE输入信号就能用来对计数器进行同步。若设定这个方式,则在计数寄存器重新进行装入之前输出将保持高电平。所以,输出信号也能用软件来同步。 方式3:方波频率方式器 方式3类似于方式2,只是在计数完成一半(对偶数而言)之前输出保持高电平,对另一半计数时输出将变为低电平。如果计数值是奇数,对N+1/2进行奇数时输出是高电平,而对N-1/2进行计数时输出则是低电平。如果计数寄存器在计数期间重新装入新值,这个新值将在计数输出跳变以后立即反映出来。 方式4:软件触发的选通信号 在设定该方式以后,输出将是高电平。装入计数值时,计数器开始计数。在计数结束时,输出将变低一个输入时钟周期,然后再次变为高电平。如果计数寄存器在两个输出脉冲之间重新装入新值,则现行周期不受影响,但是下一个周期将反映新值。GATE输入端是低电平是将禁止计数。重新装入计数寄存器将再次从新值开始启动计数。 10 AC4071 方式5:硬件触发的选通信号 在触发输入信号的上升沿之后,计数器将开始计数。当计数结束时,计数器的输出将变低一个时钟周期。计数器可重触发。在任何触发脉冲上升沿之后,经过足够数目的计数时钟周期输出才变为低电平。 GATE 使用一览表 方式 低电平 或 变低电平 0 1 禁止计数 -- 升 高 -- 1)开始计数 2)下一个时钟后输出复位 2 1)禁止计数 1)计数器重新装入 允许计数 高 电 平 允许计数 -- 2)立即置输出为高电平 2)开始计数 3 1)禁止计数 2)立即置输出为高电平 4 5 每一个计数/定时器,都可以独立进行计数或定时,二个或二禁止计数 -- -- 开始计数 允许计数 -- 开始计数 允许计数 个以上组合使用就可以完成测频、脉冲调宽等功能,由于GATE控制是高电平或上升沿有效,而OUT输出是在计数期间为低,所 11 AC4071 以我们提供计数器0反向输出,这样我们就可以用计数器0的反向输出来控制其它计数器的GATE来完成测频、脉冲调宽等功能。 8253 读/写过程  写操作 系统软件必须根据所要求的工作方式和计数值对8253每个计数器进行编程(见下表) LSB MSB 方式控制字(计数器n) 计数寄存器字节(计数器n) 计数寄存器字节(计数器n) 另一种编程格式 No.1 No.2 No.3 No.4 No.5 No.6 No.7 No.8 No.9 LSB MSB LSB MSB LSB MSB 方式控制字(计数器0) 方式控制字(计数器1) 方式控制字(计数器2) 计数寄存器字节(计数器1) 计数寄存器字节(计数器1) 计数寄存器字节(计数器2) 计数寄存器字节(计数器2) 计数寄存器字节(计数器0) 计数寄存器字节(计数器0) 12 A1 1 1 1 0 0 1 1 0 0 A0 1 1 1 1 1 0 0 0 0 AC4071 在实际使用所选定的计数器之前,程序员必须向8253写入方式控制字和规定数目的计数寄存器字节(一个或两个字节)。 编程的实际顺序相当灵活,可按任何顺序选择计数器,写出方式控制字。例如,计数器0不一定非得是第一个,而计数器2也不一定是最后一个。每个计数器的方式控制字寄存器各有独立的地址,所以它的装入过程是完全无关的(SC0, SC1)。可是,将实际的计数值装入计数寄存器时,必须严格按照方式控制字(RL0, RL1)中规定的顺序。计数器的计数寄存器装入过程则仍然与顺序无关。但是,要将计数值装入选定的计数寄存器时必须严格按方式控制字(RL0, RL1)中规定的字节数。要装入计数寄存器的一个或两个字节不必跟在有关的方式控制字后。可以在装入方式控制字后任何时间装入它们,只要顺序装入规定个数的字节值就行了。 所有的计数器都是减法计数器。因此,装入计数寄存器的值实际上是递减的。计数寄存器全部装入“0”将产生最大的计数值(对于二进制而言为2,对于二-十进制而言为10)。在0方式中,装入完成之前不会开始新的计数过程。将根据方式控制字(RL0,RL1)如何设定而确定接收两个字节中的一个,然后进行再启动操作。  读操作 13 164AC4071 8253所包含的逻辑电路将使程序员能在不干扰实际计数过程的情况下很容易地读出计数器的值。一是对选定的计数器执行简单的IO读操作。通过控制接至8253的A0 A1输入信号,程序员就能够选择要读的计数器(记住:不允许对方式寄存器执行读操作,A0 A1=11)。使用这种方法时的唯一要求是,为了保证读出稳定的计数值,所选计数器的实际操作必须能被GATE输入禁止或者能被禁止时钟输入的外部逻辑所禁止。选中的计数器可提供的内容如下: 第一次IO读出的是低字节(LSB); 第二次IO读出的是高字节(MSB); 出于8253的内部逻辑的安排,完成全部读出过程是绝对必要的。如果规定要读出两个字节,那么必须读出两个字节后才能向该计数器发出写命令。 读操作: A1 0 0 1 1  计数过程中的读出 为了使程序员能够读出任一计数器的内容而不干扰计数操14 A0 0 1 0 1 RD 0 0 0 0 读计数器0 读计数器1 读计数器2 非法 AC4071 作,8253包含有专门的内部逻辑。该内部逻辑电路能提供对方式寄存器执行简单的写命令来进行访问。当程序员想读出选定的计数器内容时,可以将一个专用的代码装入方式寄存器。该代码能把当前计数值锁存到一个储存寄存器,所有它的内容是一个准确而稳定的量。然后,程序员向所选计数器发出一个普通的读命令,于是就可得到锁存的寄存器内容 用于锁存计数值的方式寄存器 A0A1=11 D7 D6 D5 D4 D3 0 × D2 D1 D0 × × × SC1 SC0 0 SC1 SC0--要锁存的计数器号 D5D4--00表示计数器锁存操作 ×--任意 对这种计数器读出方式的限制条件与前一种方法相同。即应完成所规定的整个读出操作。这个命令对计数器的工作方式无影响。 小结:用以上两种方法检测计数器当前值的要求是,用读操作来完成需控制外部逻辑使计数器禁止或等待,以达到计数器值稳定再完成操作;用内部逻辑则是先锁定再读出。 8253实际操作程序举例: 15 AC4071 #include #include void no0_mode( void ) ; void mode0( void ) ; /* 定义中断函数 */ void _interrupt _far check_inter() ; void ( _interrupt _far *old_inter ) (void) ; /* 定义三个8253的控制字地址 */ int timen[3] = { 0x243, 0x247, 0x24b } ; /* 定义九个计数器地址 */ int timer[9] = { 0x240, 0x241, 0x242, /* 定义计数值的低8位numl, 高8位numh */ int numl = 0xff ; int numh = 0x80 ; 16 0x244, 0x245, 0x246, 0x248, 0x249, 0x24a } ; AC4071 /* 设置全局变量 i,j,k,l */ unsigned int i ; unsigned int j ; unsigned int k ; unsigned int l ; /* 定义2倍脉冲个数 */ unsigned int S_num = 50000 ; main() { /* 测试计数器1-8的方式0 */ /* 测试计数器0 */ printf( \"Now test N0.0\\n\" ) ; 17 printf( \"Testing mode0\\n\" ) ; printf( \"Press any key to continue:\\n\" ) ; getch() ; mode0() ; int iq_s ; AC4071 /* 设置中断(IRQ5)的服务程序 */ /* 打开中断 */ /* 测试计数器0及中断、时钟 */ /* 恢复中断 */ } 18 outp( 0x21, iq_s ) ; _dos_setvect( 13, old_inter ) ; printf( \"Testing mode0\\n\" ) ; no0_mode() ; iq_s = inp( 0x21 ) ; outp( 0x21, iq_s&0xdf ) ; old_inter = _dos_getvect( 13 ) ; _dos_setvect( 13, check_inter ) ; l = 0 ; printf( \"Press any key to continue:\\n\" ) ; getch() ; AC4071 void mode0( void ) { /* 计算计数值为十进制 */ 19 k = numh*256 + numl ; /* Set No1-8 init number 设置计数器1-8的计数值 */ for( i=1; i<9; i++ ) { } outp( timer[i], numl ) ; outp( timer[i], numh ) ; /* Set No0-8 mode0 设置计数器0-8为方式0 */ for( i=0; i<3; i++ ) { } outp( timen[i], 0x30 ) ; outp( timen[i], 0x70 ) ; outp( timen[i], 0xb0 ) ; int n, m ; AC4071 /* 给时钟信号,其中 /* 读1-8通道结果,并计算计数结果 */ /* Read timer No1-8's result */ for( n=1; n<9; n++ ) { } 20 i = inp( timer[n] ) ; j = i ; i = inp( timer[n] ) ; j = j + 256 *i ; l = k - j ; printf( \"%d\%u\%u\\\n\1通道25000,2通道12500,3通道6250 4通道3125。。。 */ /* Give Signal number */ for( i=0; i0xfff0 ) { } printf(\"%d\\outp( timer[0], numl ) ; outp( timer[0], numh ) ; AC4071 同样接线用BASIC可以编程 10 PRINT \"Testing...\" 20 PRINT 设置计数器1,从H243口送70H 40 OUT &H243, 112 设置计数器1,分两次从H241口送34,17即17×256+34 50 OUT &H241, 34 60 OUT &H241, 17 70 K = 17 * 256 + 2 * 16 + 2 80 PRINT K 给计数器1,1000次脉冲 23 1。OUT 1-8接 DI 0-7 2。CLK 1-8接 DO 0-7 3。GATE 1-8 接 DO 8-15 4。CLK0 接INCLK 5。OUT0 接 IRQ 6。中断选择IRQ5 AC4071 90 FOR I = 0 TO 1000 100 OUT &H24C, 255 105 OUT &H24C, 0 110 NEXT I 读计数器1的值 120 I = INP(&H241) 130 J = INP(&H241) 135 PRINT I, J 计算并打印计数器1的值 140 L = J * 256 + I 150 PRINT L 打印记录个数 160 PRINT K - L 24 AC4071 二、IO部分: AC4071含有16个数字输入和16个数字输出端口,共分为4组,每组8个端口,偏移地址为CH,DH。 实际地址为:基地址+偏移地址,具体操作是简单的IO读写。 现以出厂地址240H为例: #include main() { int i, j ; int k ; /* 作1000次循环,以检测IO是否准确 */ for( k=0; k<1000; k++ ) { /* 每次循环为分别用0-FFH进行检测 */ for( j=0; j<256; j++ ) { /* 往0-7口送数据同时返读 */ outp( 0x24c, j ) ; i = inp( 0x24c ) ; /* 判断是否准确 */ 25 AC4071 if( i != j ) printf(\"\\n***********\\n\\a\" ) ; /* 往8-15口送数据同时返读 */ } outp( 0x24d, j ) ; i = inp( 0x24d ) ; /* 判断是否准确 */ if( i != j ) printf(\"\\n***********\\n\\a\" ) ; /* 注明循环次数 */ } 注:本例程需O0接I0,O1接I1,O2接I2,,,O15接I15。 printf( \"%d\\ ; } 26 AC4071 外围接线定义 40PIN扁平电缆插座示意: 1 2 3 4 缺口 37 38 39 40 P1: 1-8:CLK1-8 9,10:地线 27 AC4071 11-18:OUT1-8 19,20:地线 21-28:GATE1-8 29,30:地线 31:CLK0;32:GATE0;33:OUT0;34:NOUT0; 35:INCLK;36:IRQ; 37,38:电源 39,40:地线 P2: 1-8:输入0-7 9,10:地线 11-18:输入8-15 19,20:地线 21-28:输出0-7 29,30:地线 31-38:输出8-15 39,40:地线 28 AC4073 多功能I/O、脉冲板     适用于IBM PC 及兼容机 48路可编程数字I/O 3 路可编程定时、计时器 I/O 中断及定时器中断 AC4073 AC4073板简介 AC4073可广泛应用于各种数字量、脉冲量的接口、控制及输入/输出, 当将I/O与定时、计数器混合应用时几乎可以数字接口操作, 如: 数字I/O, 定时, 计数, 脉冲及频率发生、测量等功能。 主要特点、性能: ● 所有操作(译码地址选择除外)均可由软件设定 ● 48路(6个8位口)数字可编程I/O (两个INTEL 8255) - TTL电平输入/输出 - 输出驱动<2mA ● 3路独立六模式可编程计时器(INTEL 8253) - TTL输入电平(时钟及计数控制输入) - 输出可驱动一个TTL负载 - 最大输入频率<2MHz - 每路具有16BIT可编程: 定时, 计数, 方波发生, 内/外触发脉冲发生, 频率发生及可编程单稳态触发器. ● 一路TTL电平外部数字(上升沿有效), 三路内部计时器中断 1 AC4073 输入, 占用一个 PC总线中断并可由IRQ 3,5,7中由软件选择 ● 板上占用四条地址线(A0-A3), 操作地址200H-2FFH 由S2 4位跳线开关 选择。 2 AC4073 目录: <1> AC4073简介 <2> AC4073操作地址设定 <3> AC4073编程及硬件 . I/O 接口 . 定时计数器 . 中断 <4> AC4073电缆接口说明 <5> 附录 . AC4073各电缆联接器及地址选择跳线器位置 . AC4073电路框图 3 AC4073 AC4073板控制地址选择说明 板上占用四条地址线A0-A3, 称为\"基地址\" base, 余下的六条I/O译码地址(A4-A9), 称为\"段地址\" seg , 由S2 四位跳线开关选择A4-A7, A9A8-AC4073已经定义为:2H,因此AC4073的地址选择范围是:200H-2FFH,S2定义如下: S2 1 2 3 4 A4 A5 A6 A7 当跳线器为短路环短路时表示此路为: 0 : 文中以\"X\"表示 当跳线器开路时表示此路为: 1 : 文中以\"-\"表示 地址选择方法如下: S2 4跳线器的 1 - 4 位选择地址A4-A7共四位, 高二位地址A8,A9=01 (2H), 所以段地址 seg 只能在 4 AC4073 200-2F0H中选择(低四位地址被AC4073占用)。因此: AC4073操作的实际地址 (adr) = 基地址 (base) + 段地址 (seg) 例: 欲选择操作段地址 seg 为:210H, S2的设定方法如下: 1 2 3 - X X 4 X A4 A5 A6 A7 * 本卡出厂前即设为此地址 (210H) 。 A0 - A3基地址 base 由AC4073板占用, 分配如下: A0-A3 读操作(RD) 写操作(WR)  0 h 8255-1 I/O PA 口操作 1 h 8255-1 I/O PB 口操作 2 h 8255-1 I/O PC 口操作 3 h 8255-1 I/O 的控制寄存器操作 4 h 8255-2 I/O 的 PA 口操作 5 h 8255-2 I/O 的 PB 口操作 5 AC4073 6 h 8255-2 I/O 的 PC 口操作 7 h 8255-2 I/O 的控制寄存器操作 8 h 8253 TIMER 0 的数据I/O 9 h 8253 TIMER 1 的数据I/O A h 8253 TIMER 0 的数据I/O B h 8253 的控制寄存器操作 C h 中段状态寄存器 中断操作模式  注: * 板上的二片8255数字I/O控制器分别称为: 8255-1 8255-2 每片有A B C三个口, 分别称为: PA1 PB1 PC1、 PA2 PB2 PC2 * 计时器的三道称为: TIMER 0 , TIMER 1 , TIMER 3 . 例: 如果我们已设定段地址为: 210H , 要对8253 TIMER 0 操作, 则地址 为: 210H + 8H = 218H 详细说明: ▲ A0-A3=CH 写操作 6 AC4073 功能: 中断控制及中断寄存器清零 D7 D6 D5 D4 D3 D2 D1 D0 ┗━━━━━┛ ┗━━━━━━━┛ 没用 PC中断级别选择 板内四路中断选择 IRQ 3,5,7 * PC 机上电后此寄存器为: \" 0 \". D4 D5 D6: 只可有一个可为\" 1 \" , 分别选择PC总线的IRQ3 IRQ5 IRQ7中断请求.如果置成\" 0 \" 则相应的对PC总线的中断请求被屏蔽掉. 全设置为\" 0 \" 时不选中任何PC中断. D3 D2 D1 D0: 对应于板内的中断寄存器控制端: INT3 INT2 INT2 INT1 INT0 INTX (X=0..3) = 0 : 屏蔽相应的板内中断请求及状态读出 并将相应的板内中断请求及状态请零 INTX (X=0..3) = 1 : 开放相应的板内中断请求及状态读出 INT0: TIMER 0 输出请求, 由上升沿置有效 ( 为: 0 ) 7 AC4073 INT1: TIMER 1 输出请求, 由上升沿置有效 ( 为: 0 ) INT2: TIMER 2 输出请求, 由上升沿置有效 ( 为: 0 ) INT3: 外部I/O中断请求, 由上升沿置有效 ( 为: 0 ) 注: (1) INTX = 0 时相应位的中断及状态读出无效(为 \" 1 \"). (2) 对 CH 号寄存器的任何写操作都将复位状态及内部中断请求寄存器。因此在中断服务程序中必须在同时读出保留所由的寄存器状态后才能写CH号寄存器(同时清零内部中断请求寄存器). ▲ A0-A3=CH 读操作 功能: 读内部中断请求寄存器的数值(内部状态请求寄存器) D7 D6 D5 D4 D3 D2 D1 D0 ┗━━━━━━━┛ ┗━━━━━━━┛ 没用 板内四路内部中断请求寄存器 (内部状态请求寄存器) ┃ ┃ ┃ ┃ ┃ INT2 ┃ INT0 INT3 INT1 8 AC4073 D0 INT0 = 0 : TIMER 0 有中断请求 D1 INT1 = 0 : TIMER 1 有中断请求 D2 INT2 = 0 : TIMER 2 有中断请求 D3 INT3 = 0 : 有外部I/O中断请求 注: 如果相应的INTX(X=0 1 2 3)被屏蔽, 相应的INTX读出为\" 1 \"。 9 AC4073 AC4073的编程及硬件 <一>数字I/O: AC4073具有六个8BIT可编程I/O口, 分属于二片INTEL 8255, 8255-1 及8255-2 (P1 P2)。每片有三个8BIT I/O 口, 分别名为: PA, PB, PC. 电气性能: - 输入TTL , CMOS 兼容, 有效高电平>2V; 有效低电平<0.5V; - 输出TTL电平, 高电平>3V 2mA MAX ; 低电平<0.3V 2mA MAX; 最大负载能力2K 纯电阻负载. - 输入电压最大不超过5V, 否则将烧毁8255. P1 , P2的基控制地址为: 地址 WR 写操作 RD 写操作 P1: 3H ----- P1 口控制字 X PA1: 0H ----- PA1口数据输出 PA1口数据输入 10 AC4073 PB1: 1H ----- PB1口数据输出 PB1口数据输入 PC1: 2H ----- PC1口数据输出 PC1口数据输入 P2: 7H ----- P2 口控制字 X PA2: 4H ----- PA2口数据输出 PA2口数据输入 PB2: 5H ----- PB2口数据输出 PB2口数据输入 PC2: 6H ----- PC2口数据输出 PC2口数据输入 8255控制字格式入下: D7 : = 1 D6 : = 0 D5 : = 0 D4 : = 0 口 A 输出, = 1 口 A 输出 D3 : = 0 口 C 高4位输出, = 1 口 C 高4位输入 D2 : = 0 D1 : = 0 口 B 输出, = 1 口 B 输出 D0 : = 0 口 C 低4位输出, = 1 口 C 低4位输入 * 8255 还有许多的操作模式 * 关于8255的编程读者可参阅有关手册. 11 AC4073 例: 设定8255-1的: A,B 口输入; C口输出; SEG=210H, 向C口输出一个数为 55H, 并读A B的数据到变量ia,ib, C 程序为: #include int ia,ib; int ic=0x55; int p1=0x213; P1 控制字地址 int pa1=0x210,pb1=0x211,pc1=0x212; PA PB PC 地址 main() outp(p1,0x92); P1 控制字 outp(pc1,ic); PC1 数值 ia=inp(pa1); PA PB 数值读入 ib=inp(pb1); <二>数字计时器 8253 AC4073的一片INTEL 8253 提供了3路可编程定时、计数器, 其时钟输入(CLK: CLK0, CLK1, CLK2 下降沿触发), 脉冲输出 12 AC4073 (OUT: OUT0, OUT1, OUT2) 及控制线(GATE: GATE0, GATE1, GATE2 高电平有效) 板上S4 40PIN 扁平电缆接口提供了一个8分频后的14.318MHZ信号, 约为: 1.790MHZ 的方波(TTL电平输出, I MAX < 4 MA ). 电气性能: - CLK输入TTL电平, 最大频率 < 2MHz (1:1 方波时) - GATE TTL 电平兼容, 内部有上拉电阻(2K). - OUT TTL 电平, 输出电流 < 0.5 MA 8253编程: 地址 写 WR 读 RD ━━━━━━━━━━━━━━━━━━━━━━━━━━━ BH 8253控制字 X 8H 第一次: TIMER 0 低8位数据 X 第二次: TIMER 0 高8位数据 9H 第一次: TIMER 0 低8位数据 X 13 AC4073 第二次: TIMER 0 高8位数据 AH 第一次: TIMER 0 低8位数据 X 第二次: TIMER 0 高8位数据 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 控制字格式: D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD - SC1 SC0 0 0 选择 TIMER 0 0 1 选择 TIMER 1 1 0 选择 TIMER 2 1 1 非 法 - RL1 = 1, RL0 = 0 - M2 M1 M0 TIMER 工作方式 14 AC4073 0 0 0 MODE 0 0 0 1 MODE 1 0 1 0 MODE 2 0 1 1 MODE 3 1 0 0 MODE 4 1 0 1 MODE 5 非 法 - BCD = 0 16进制计数方式 BCD = 1 BCD计数方式 MODE 0: 计数器方式: GATE升高后, 开始按设入的16BIT数据做减法计数并OUT=0, 到零时耦OUT=1. MODE 1: 可编程单稳: 16BIT数据设入后, GATE由0变为1时, OUT=0; 当计数结束时, OUT=1, 并可由GATE重新触发. MODE 2: 频率发生器: GATE=1 时开使减法计数, OUT=1 直到计为0时, OUT=0 一个CLK周期, 然后OUT=1重复上述过程. 15 AC4073 MODE 3: 方波发生器: 同 MODE 2 , 但输出是方波而不是脉冲. MODE 4: 软件触发选通信号: GATE=1 并16BIT数据设定后, 做减法计数 OUT=1, 等于0时OUT=0 一个CLK周期, 此后OUT=1. MODE 5: 硬件触发选通信号: 同MODE 4, 但由GATE控制, 当GATE有一个低电平脉冲时 (GATE=1 0 1,即一个负脉冲) TIMER 开始工作, 并可重新触发. * 关于8253的编程读者可参阅有关手册. 8253的编程顺序是: 1. 写入TIMER的控制字 2. 连续写入TIMER的二个计数数值(低位在前) * TIMER 需写入二个计数值后才能工作. 例: 设定TIMER 0 工作在方波发生器状态, SEG = 210H, 频率 = 10KHZ, 应用板上 1.790MHZ 时钟. 16 AC4073 计数值 = 1.790*1000/10 = 179 = 00B3H C 程序如下: #include int cntl; TIMER 0 低8位数值 int cnth; TIMER 0 高8位数值 int timer=0x21b; TIMER 控制字地址 int timer0=0x218; TIMER 0 地址 main() outp(timer,0x36); TIMER 0 控制字 outp(timer0,cntl); TIMER 0 低8位数值 outp(timer0,cnth); TIMER 0 高8位数值 讨论: 1. 在上面的讨论中TIMER的GATE需要控制, 这可以应用板上的 17 AC4073 I/O口解决, 并可组合出许多功能出来. 2. TIMER 的OUT的状态可由AC4073的中断寄存器读出, 但对应的INTX(INT0-- -OUT0, ...., INT2---OUT2) 必须置于工作态, 即为: \"1\每一个OUT的上升沿输出将产生一个置位信号, 将对应的INTX置为\"0\同时产生中断申请(如果外部中断置成许可态), 在完成相应的状态读出后, 应对中断寄存器 进行一次写操作, 复位中断寄存器. <三>中断 AC4073有四个板内中断请求INT0...INT3对应于: TIMER OUT0; TIMEROUT1; TIMER OUT2; 外部I/O中断请求. 并可以被中断选择寄存器屏蔽或打开(见\"AC4073板控制地址选择说明\"一章. 注意: 中断由上升沿触发, 对应的INTX为\"0\"读出有效. 下面是一段MS C程序, 对TIMER 0 的OUT0 中断计数, (TIMER 0 = 36.6 MS 周期) 并打印显示当前的计数值. 令: I/O 地址: 210H 18 AC4073 应用PC中断IRQ7 (对应为: BIOS 15 号调用) #include #include #include #include #include viod _interrupt _far AC4073(); /* interrupt service program */ viod (_interrupt _far *oldint)(); /*old irq adress od DOS */ int irq_sgn; /* irq require sign data */ int irq_old; /* old irq level of 8259 */ int t_counter; /* interrupt counter */ int timer=0x21b; /* 8253 control latch adress */ int timer0=0x218; /* 8253 timer 0 data latch adress */ int state_io=0x21c; /*AC4073IRQoperationbuffer adress 19 AC4073 */ main() int i; _clearscreen(_GCLEARSCREEN); /* get the old irq pointer */ oldint=_dos_getvect(15); /* set the new irq pointer to AC4073() */ _dos_setvect(15,AC4073); /* 8259 irq7 enable */ i=inp(0x21); /* rd irq mask data */ irq_old=i; i=i&0x07f; outp(0x21,i); /* irq7 enable */ outp(state_io,0); /* all AC$)&#'s irq set to disable */ 20 AC4073 outp(timer,0x36); /* set timer 0 to a square wave mode */ outp(timer0,0); /* send the timer 0's data of low 8bit */ outp(timer0,0); /* send the timer 0's data of high 8bit */ /* irq level 7 is enable and timer 0interrupt is enable */ outp(state_io,0x41); irq_sgn=0; do if(irq_sgn==1) _settextposition(15,30); printf(\"conuting=%d\ /* out to screen the irq counting */ 21 AC4073 irq_sgn=0; /* irq sign reset */ outp(state_io,0x41); /* reset the AC4073's irq latch */ while(!kbhit()); /* press any key to exit */ outp(state_io,0); /* disable all AC4073's int. rq. */ outp(0x21,irq_old); /* recover the PC's 8259 data */ _dos_setvect(15,oldint); /* recover the old irq point */ /* the irq service program */ viod _interrupt _far AC4073() /* set the irq sign */ irq_sgn=1; t_counter++; /* reset the PC's irq chip 8259's inner sign */ 22 AC4073 outp(0x20,0x20); 23 AC4073 外部I/O联接插座接线图 S4: 40脚联接器, 位于AC4073板前端 2 4 „„„„„„„„„„„„„„„„„„ 38 40 1 3 „„„„„„„„„„„„„„„„„„ 37 39 缺 口 定义: 脚:1,2,3,4,5,6,7,8对应8255-1的PA0-PA7 脚:9,10,11,12,13,14,15,16对应8255-1的PB0-PB7 脚:17,18,19,20,21,22,23,24对应8255-1的PC0-PC7 脚:25,26-地线 脚:27-外部中断输入 脚:28-1.790Mhz时钟输出 脚:29,30,31对应8253通道0的CLK0、GATE0、OUT0。 脚:32,33,34对应8253通道1的CLK1、GATE1、OUT1。 24 AC4073 脚:35,36,37对应8253通道2的CLK2、GATE2、OUT2。 脚:39 +5V输出(最大200毫安) 脚:40 地线 脚:38 空 S3 26脚扁平电缆连接器(位于AC4073板的上端, 见附录)是8255-2 I/O 的24路 输入, 输出接口, 定义: 2 4 6 8 10 12 14 16 18 20 22 24 26 1 3 5 7 9 11 13 15 17 19 21 23 25 缺 口 脚:1,2,3,4,5,6,7,8对应8255-2的PA0-PA7 脚:9,10,11,12,13,14,15,16对应8255-2的PB0-PB7 脚:17,18,19,20,21,22,23,24对应8255-2的PC0-PC7 脚:25,25 地线 AC4073位置示意: 25 AC4073 1 21S3S4AC4073S2 26

因篇幅问题不能全部显示,请点此查看更多更全内容

Top