
8253、8255A、8259A初始化程序.docx
15页8253 的初始化程序1. 确定端口地址:0310H、0312H、0314H、0316H2. 确定工作方式(假设工作方式为):通道 0,方式3通道 1,方式1通道 2,方式53. 确定计数值:通道 0: N0=1MHz/2KHz=500通道 1: N1=480us/(1/1mhz)=480通道 2: N2=264 确定控制字:通道 0: 00110111B通道 1: 01110011B通道 2: 10011011B对 3 个通道的初始化程序如下:;通道 0 初始化程序MOV DX, 316HMOV AL,00110111BOUT DX,ALMOV DX,310HMOV AL,00HOUT DX, ALMOV AL,05HOUT DX,AL;通道 1 的初始化程序MOV DX, 316HMOV AL, 001110011BOUT DX, ALMOV DX, 312HMOV AL, 80HOUT DX, ALMOV AL, 04HOUT DX, AL;通道 2 初始化程序MOV DX, 316HMOV AL, 10011011BOUT DX, ALMOV DX, 314HMOV AL, 26HOUT DX, AL;MOV AL, 00H;OUT DX, AL8255A 初始化程序对 8255A 进行初始化,要求端口 A 工作于方式 1 ,输入;端口 B 工 作于方式 0,输出;端口 C 的高 4 位配合端口 A 工作,低 4 位为输入。
1. 确定控制字端口地址:006CH2. 确定工作方式:端口 A,工作方式1,输入端口 B,工作方式0,输出端口 C, C0为输入,C4为配合工作3. 确定方式选择控制字:1011 100 1H(B9H)对 3 个端口的初始化程序如下MOV AL,B9HMOV DX,006CHOUT DX,AL另一个 8255A 初始化程序已知某 8255A 在系统中占用 88~8BH 号端口地址,现欲安排其 PA,PB, PC 口全部为输出, PA, PB 口均工作于方式 0 模式,并将 PC66置位,使PC3复位,试编写出相应的初始化程序:1. 确定端口地址控制字以及PC 口置位复位端口,8BH2. 确定工作方式3. 确定方式选择控制字MOVAL,80HOUT8BH,ALMOVAL,ODHOUT8BH,ALMOVAL,06HOUT8BH,AL在8259A内部有两组寄存器:一组为命令寄存器,用于存放CPU写入的初始化命令字ICW1〜ICW4 (initialization comma nd words );另一组为操作命令寄存器,用于存放CPU写入的操作命令字OCW1〜0CW3 (operation comma nd words )□1初始化命令字ICW的格式当地址线A0为1时,8259A提供了 4个(ICW1〜ICW4)初始化命令字,并规定了严格 的初始化步骤。
8259A是中断系统的核心器件,对它的初始化编程要涉及中断系统的软、硬件的许多问题, 而且一旦完成初始化,所有硬件中断源和中断处理程序都必须受其制约1) ICW1的格式ICW1的格式如图6.12所示/1/]LTIMADISNGL1口Dt % 6 Dj D: Di Dd标志伐1=电■恤发0:边沿触笈I—[:写入 ICWj0:不^Mcw4 —"方式0:级联方式——U调用间隔为£D;调川间隔为&图HU IC\%的路式图6.12 TCW1的格式IC4 (ICW4 needed /no ICW4 needed):指示在初始化时是否需要写入命令字ICW4 在80x86 CPU系统中需要定义ICW4,设IC4=1SNGL (single/cascade mode):指示8259A在系统中使用单片还是多片级联SNGL =1为单片,SNGL-0为多片级联ADI (call address interval):设置调用时间间隔,在80486 CPU中无效LTIM (level/edge triggered mode):定义IRi的中断请求触发方式LTIM = 1为电平 触发,LTIM = 0为边沿触发D4: ICW1的标志位,恒为1。
D5〜D7:未用,通常设置为02) ICW2的格式ICW2用于设置中断类型号,格式如图6.13所示6656t7T&t514Tj16g10oJV000 ——【陽川丿"足义00iIR|00 ——0il ——冋i00 —一 !R401 一—辰iI0 ——叭I\1 -一图 6.13ICW2的格式图6.13 ICW2的格式ICW2中的低3位ID2〜IDO由中断请求输入端IRi (i = 0〜7)的编码自动引入,高5位 T7〜T3由用户编程写入若ICW2写入40H时,则IR0〜IR7对应的中断类型号为40H〜47H3)ICW3的格式ICW3是级联命令字,在级联方式下才需要写入主片和从片所对应的ICW3的格式不同, 主片ICW3的格式如图6.14所示,从片ICW3的格式如图6.15所示图6.14 主片ICW3的格式图6.15从片ICW3的格式S7〜S0与IR7〜IR0相对应,若主片IRi (i = 0〜7)引脚上连接从片,则Si = 1,否则 Si = 0ID2〜ID0是从片接到主片IRi上的标识码例如,当从片的中断请求信号INT与主片的 IR2连接时,ID2〜ID0应设置为010, D7〜D3未用,通常设置为0。
在中断响应时,主片通过级联信号线CAS2〜CAS0送出被允许中断的从片的标识码,各从 片用自己的ICW3和CAS2〜CAS0进行比较,二者一致的从片被确定为当前中断源,可以发 送该从片的中断类型码4) ICW4的格式ICW4用于设定8259A的工作方式,其格式如图6.16所示.000SFNMBUFM底AEO15非自动錯朿山非特厩完全議套」Dx;井缓冲[ 10:缓冲/从*■ 111缀冲/上片」h 模式r 1: Pl动站虑图6.16 ICW4的格式mP (microprocessor):设置 CPU 模式mP=1 为 80x86 模式,mP=0 为 8080/8085 模式AEOI (auto end of interrupt):设置8259A的中断结束方式AEOI=1为自动结束 方式,AEOI-0为非自动结束方式皿用(master/slave):选择缓冲级联方式下的主片与从片皿"=1为主 片,BUF (buffer):设置缓冲方式BUF=1为缓冲方式,BUF=0为非缓冲方式SFNM (special fully nested mode):设置特殊完全嵌套方式SFNM = 1为特殊完全 嵌套方式,SFNM = 0为非特殊完全嵌套方式D7〜D5:未定义,通常设置为0。
需要注意:当多片8259A级联时,若在8259A的数据线与系统总线之间加入总线驱动器,SP/EN 引脚作为总线驱动器的控制信号,D3位BUF应设置为1,此时主片和从片的区分不能依靠沖跆引脚,而是由拠用来选择,当=0时为从片;当1 =1时为主片如果BUF=0,则呂定义无意义2.操作命令字OCW的格式操作命令字有OCW1, OCW2和OCW31) OCW1的格式0WC1为中断屏蔽字,写入中断屏蔽寄存器(IMR)中,对外部中断请求信号IRi实行屏蔽,格式如图6.17所示图6.17 OCW1的格式当某位Mi (interrupt mask)为1时,则对应的IRi请求被禁止;当Mi为0时,则对应 的IRi请求被允许在工作期间可根据需要随时写入或读出2)0CW2的格式0WC2用于设置中断优先级方式和中断结束方式,其格式如图6.18所示标 忐J0 [R打001——irl0]0 [Rj011—IRi100——ir4I01 [R乍11V——[陽11\—- TRjOCW2的格式D? D* Dj D,* D: □] DqSLEOI005L,LnMl「普通 EOI 7/A !OIL特殊FQ方式LOIt门动循环再通EOI A ill:门动循坏特眛旳]方戌100:设置优先级自动擔环命令 noot消除讥光级门动狐环命令H(h址置忧化权命令010:无操粹图 6.18图6.18 OCW2的格式L2〜L0 (IR level to be acted upor) : 8个中断请求输入端IR7〜IR0的标志位,用来 指定中断级别。
L2〜L0指定的中断级别是否有效,由SL (specific level)位控制当SL=1 时,L2〜L0定义有效;当SL=0时,L2〜L0定义无效EOI (end of interrupt):中断结束命令若EOI=1时,在中断服务子程序结束时向 8259A回送中断结束命令EOI,以便使中断服务寄存器(ISR)中当前最高优先权位复位(普 通EOI方式),或由L2〜L0表示的优先权位复位(特殊EOI方式)R (rotation):设置优先权循环方式位R=1为优先权自动循环方式;R=0为优先权固 定方式D4, D3为OCW2标志位3) OCW3的格式OCW3用于设置或清除特殊屏蔽方式和读取寄存器的状态,格式如图6.19所示RR (read register comma nd):读 ISR 和 IRR 命令位,RIS (read in terrupt register select)读寄存器选择位当RR=1, RIS = 0时,读取IRR命令;当RR=1, RIS=1时, 读取ISR命令在进行读ISR或IRR操作时,先写入读命令OCW3,然后紧接着执行读ISR 或IRR的指令图6.19 OCW3的格式例如,设8259A的两个端口地址为20H和21H,OCW3, ISR和IRR共用一个地址20H。
读取ISR内容的程序段为MOV AL, 00001011BOUT 20H, AL ;读 ISR 命令写入 OCW3IN AL, 20H ;读ISR内容至AL中读取IRR内容的程序段为MOV AL, 00001010BOUT 20H, AL ;读 IRR 命令写入 OCW3IN AL, 20H ;读IRR内容至AL中P (poll comma nd):为中断状态查询位当P=1时,可通过读入状态寄存器的内容,查 询是否有中断请求正在被处理,如有则给出当前处理中断的最高优先级中断状态寄存器如图 6.20所示IR / 。












