1、实验系统中8259的ICW1端口地址 MY8259_ICW2 EQU ioport +281H ;实验系统中8259的ICW2端口地址 MY8259_ICW3 EQU ioport +281H ;实验系统中8259的ICW3端口地址 MY8259_ICW4 EQU ioport +281H ;实验系统中8259的ICW4端口地址 MY8259_OCW1 EQU ioport +281H ;实验系统中8259的OCW1端口地址 MY8259_OCW2 EQU ioport +280H ;实验系统中8259的OCW2端口地址 MY8259_OCW3 EQU ioport +280H ;实验系统中8
2、259的OCW3端口地址 msg1 db 0dh,0ah,DVCC pci card Interrupt,0dh,0ah,$ msg2 db 0dh,0ah,Press any key to exit! msg3 db 0dh,0ah,IR1 ok and exit! msg4 db 0dh,0ah,IR3 ok and exit!data endsstacks segment db 100 dup (?)stacks endscode segment assume cs:code,ds:data,ss:stacks,es:datastart:Enable Local Interrupt In
3、put mov ax,data mov ds,ax mov es,ax mov ax,stacks mov ss,ax mov dx,offset msg1 mov ah,09h int 21h mov dx,offset msg2 MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1 MOV AL,13H ;边沿触发、单片8259、需要ICW4 OUT DX,AL MOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2 MOV AL,08H MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4 MOV AL,01H ;非自动结束
4、EOI MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1 MOV AL,0F5H ;打开IR1和IR3的屏蔽位QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令 MOV AL,0CH NOP MOV DX,MY8259_OCW3 IN AL,DX ;读出查询字 TEST AL,80H ;判断中断是否已响应 JZ QUERY ;没有响应则继续查询 AND AL,07H CMP AL,01H JE IR1ISR ;若为IR1请求,跳到IR1处理程序 CMP AL,03H JE IR3ISR ; JMP EOI IR1ISR: mov d
5、x,offset msg3 ;IR1处理,显示字符串IR1 ok and exit JMP EOIIR3ISR: mov dx,offset msg4 ;IR3 ok and exit int 21h EOI: MOV DX,MY8259_OCW2 ;向实验系统中8259发送中断结束命令 MOV AL,20H OUT DX,AL jmp start code ends end start3、汇编、编译、连接及运行五、实验程序六、实验结果当SP1脉冲中断源给一个脉冲时,屏幕上显示字符串;当SP2 脉冲中断源给一个脉冲时,屏幕上显示字符串。这样每当给不同的中断信号,就会有不同的输出结果。7、实验中
6、遇到的问题及解决方法当发现某个中断源坏了或者不能用的时候,及时调整到另外一个上面进行尝试,得出是器件原因而并非程序原因。实验二 8255及综合掌握8255方式0的工作原理及使用方法。实验电路如图,8255C口接逻辑电平开关K0K7,A口接LED显示电路L0L7。图2-1 11) 编程从8255C口输入数据,再从A口输出;2) 编程从8255A口输入数据,再从B口输出;3) 编程从8255B口输入数据,再从A口输出。2. 将8255与8259结合起来。 当程序响应IR1中断时候,发光二极管的高四位灭(或亮),同时屏幕显示“IR1 ok and exit”,当程序响应IR3中断时候,发光二极管的低
7、四位灭(或亮),同时屏幕显示“IR13ok and exit”。8255的D0D7跟PC/XT的D0D7连接,同时8255的D0D7跟PC/XT的D0D7连接,RD、WR分别与IOR、IOW连接,中断源SP1、SP2与8259的IR1、IR3连接,8255的CS片选信号与PC/XT的Y1相连。8255C口接逻辑电平开关K0K7,A口接LED显示电路L0L7。1、B口逻辑开关输入入,C口输出到LED灯显示效果io8255a equ ioport+288hio8255b equ ioport+289hio8255c equ ioport+28ahio8255 equ ioport+28bh mov
8、 ss,ax 若为IR1请求,跳到IR1处理程序 mov dx,io8255 ;设8255为B口输入,C口输出 mov al,82h out dx,alinout: mov dx,io8255b ;从B口输入一数据 in al,dx mov dx,io8255c ;从C口输出刚才自C口 out dx,al ;所输入的数据 mov dl,0ffh ;判断是否有按键 mov ah,06h jz inout ;若无,则继续自B口输入,C口输出 mov ah,4ch ;否则返回2、8255与8259的结合程序 mov ah,09h int 21h OUT DX,AL mov dx,io8255 ;设8
9、255为C口输入,A口输出 mov al,8bh mov al,0f0h mov dx,io8255a ;从A口输出刚才自C口所输入的数据 6、实验结果1)当程序运行时,可以通过控制逻辑开关控制LED灯的变化,因为逻辑开关是C口输入,所以当改变逻辑开关的选通或者截止的时候,LED灯显示亮或者灭。完成程序要求。2)理应实现:当程序响应IR1中断时候,发光二极管的高四位灭(或亮),同时屏幕显示“IR1 ok and exit”,当程序响应IR3中断时候,发光二极管的低四位灭(或亮),同时屏幕显示“IR13ok and exit”。因为自己做实验的IR1中断源有问题,所以这里程序只实现了当响应IR1
10、中断时候,发光二极管的高四位灭(或亮),同时屏幕显示“IR1 ok and exit”。七、实验中遇到的问题及解决方法实验三 8253掌握8253的基本工作原理和编程方法。二、实验原理及内容1图3-1是本实验程序的接线图,将计数器0设置为方式0,计数器初值为N(N0FH,本程序中为0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用L0或逻辑笔观察OUT0电平变化,初始时OUT0为高电平,当输入N个脉冲时,OUT0变为低电平,当输入N+1个脉冲后OUT0变高电平)。 2按图3-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用电平指示灯L0或逻辑笔观察OU
11、T1输出电平的变化,要求输出频率1HZ的分频信号。图 3-1图3-2三、实验步骤图3-1连接:在实验板上将8253的D0D7跟PC/XT的D0D7连接,将8253CS信号线与Y0连接,RD、WR分别与IOR、IOW连接,中断源SP1与8253的CLK0连接,同时将OUT0接到LED灯的L0上面。图3-2:在实验板上将8253的D0D7跟PC/XT的D0D7连接,将8253CS信号线与Y0连接,RD、WR分别与IOR、IOW连接,8253的CLK0接1MHZ的中断源,采用级联方式,将OUT0与CLK1连接,同时将OUT1输出接到LED灯的L0上面。四、参考程序1、ioport equ 0ff00
12、H-0280hio8253k equ ioport+283hio8253a equ ioport+280hcode mov al,10h ;设置8253通道0为工作方式0,二进制计数 mov dx,io8253k mov dx,io8253a ;送计数初值为08H mov al,08hlll: in al,dx ;读计数初值 call disp ;调显示子程序 push dx mov ah,06h mov dl,0ffh pop dx jz lll mov ah,4ch ;退出disp proc near ;显示子程序 push dx and al,0fh ;首先取低四位 mov dl,al
13、cmp dl,9 ;判断是否=9 jle num ;若是则为0-9,ASCII码加30H add dl,7 ;否则为AF,ASCII码加37Hnum: add dl,30h mov ah,02h ;显示 mov dl,0dh ;加回车符 mov dl,0ah ;加换行符 ret ;子程序返回 disp endp code endsend start2、ioport equ 0C400H-0280hio8253b equ ioport+281hmov dx,io8253k ;向8253写控制字 mov al,36h ;使0通道为工作方式3 mov ax,1000 ;写入循环计数初值1000 mo
14、v dx,io8253a out dx,al ;先写入低字节 mov al,ah后写入高字节 mov al,76h ;设8253通道1工作方式3 mov dx,io8253b先写低字节后写高字节 mov ah,4ch ;程序退出5、实验结果图3-1结果:手动逐个输入单脉冲,计数值在屏幕上显示,同时用L0或逻辑笔观察OUT0电平变化,初始时OUT0为高电平,当输入4个脉冲时,OUT0变为低电平,当输入5个脉冲后OUT0变高电平,如此循环。图3-2结果:采用级联方式,计数初值设为1000*1000,用电平指示灯L0或逻辑笔观察OUT1输出电平的变化,实验结果是每过一秒,LED灯的显示由亮到灭,由灭到亮,然后反复循环亮灭交替变化。六、实验中遇到的问题及解决方法
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1