1、微机原理实验讲解第四章 微机实验部分(汇编)实验一 I/O地址译码一、实验目的 掌握I/O地址译码电路的工作原理。二、实验原理和内容 实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H287H,Y1:288H28FH, 当CPU执行I/O指令且地址在280H2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两
2、条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。图1-1利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、),时间间隔通过软件延时实现。三、编程提示1、实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。2、参考程序: YMQ.ASMioport equ 0cc00h-0280houtport1 equ ioport+2a0houtport2 equ ioport+2a8hcode segment assume cs:codestart: mov dx,outport1 out dx,al call delay
3、 ;调延时子程序 mov dx,outport2 out dx,al call delay ;调延时子程序 mov ah,1 int 16h je start mov ah,4ch int 21hdelay proc near ;延时子程序 mov bx,2000lll: mov cx,0ll: loop ll dec bx jne lll retdelay endpcode endsend start实验二 简单并行接口一、实验目的 掌握简单并行接口的工作原理及使用方法。二、实验内容1、按下面图2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)
4、。74LS273为八D触发器,8个D输入端分别接数据总线D0D7,8个Q输出端接LED显示电路L0L7。2、编程从键盘输入一个字符或数字,将其ASC码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。3、按下面图2-2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0K7,8个数据输出端分别接数据总线D0D7。4、用逻辑电平开关预置某个字母的ASC码,编程输入这个ASC码,并将其对应字母在屏幕上显示出来。图2-1 图2-2三、编程提示1、上述并行输出接口的地址为2A8H,并行
5、输入接口的地址为2A0H,通过上述并行接口电路输出数据需要3条指令: MOV AL,数据 MOV DX,2A8H OUT DX,AL 通过上述并行接口输入数据需要2条指令: MOV DX,2ADH IN AL,DX2、参考流程图图2-3 参考程序1 图2-4 参考程序23、参考程序1: E273.ASMioport equ 0cc00h-0280hls273 equ ioport+2a8hcode segment assume cs:codestart: mov ah,2 ;回车符 mov dl,0dh int 21h mov ah,1 ;等待键盘输入 int 21h cmp al,27 ;判
6、断是否为ESC键 je exit ;若是则退出 mov dx,ls273 ;若不是,从2A8H输出其ASCII码 out dx,al jmp start ;转startexit: mov ah,4ch ;返回 int 21hcode endsend start4、参考程序2: E244.ASMioport equ 0cc00h-0280hls244 equ ioport+2a0hcode segment assume cs:codestart:mov dx,ls244 ;从2A0输入一数据 in al,dx mov dl,al ;将所读数据保存在DL中 mov ah,02 int 21h mo
7、v dl,0dh ;显示回车符 int 21h mov dl,0ah ;显示换行符 int 21h mov ah,06 ;是否有键按下 mov dl,0ffh int 21h jnz exit je start ;若无,则转startexit: mov ah,4ch ;返回 int 21hcode endsend start实验三 可编程定时器计数器(8253)一、实验目的 掌握8253的基本工作原理和编程方法。二、实验内容1、 按图3-1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入
8、N+1个脉冲后OUT0变高电平)。图3-12、 按图3-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。图3-2三、编程提示1、8253控制寄存器地址 283H 计数器0地址 280H 计数器1地址 281H CLK0连接时钟 1MHZ2、参考流程图(见图3-3、图3-4): 图3-3 图3-43、参考程序1: E8253_1.ASMioport equ 0cc00h-0280hio8253a equ ioport+283hio8253b equ ioport+280hcode segment assume cs:cod
9、estart: mov al,14h ;设置8253通道0为工作方式2,二进制计数 mov dx,io8253a out dx,al mov dx,io8253b ;送计数初值为0FH mov al,0fh out dx,allll: in al,dx ;读计数初值 call disp ;调显示子程序 push dx mov ah,06h mov dl,0ffh int 21h pop dx jz lll mov ah,4ch ;退出 int 21hdisp proc near ;显示子程序 push dx and al,0fh ;首先取低四位 mov dl,al cmp dl,9 ;判断是否
10、=9 jle num ;若是则为0-9,ASCII码加30H add dl,7 ;否则为A-F,ASCII码加37Hnum: add dl,30h mov ah,02h ;显示 int 21h mov dl,0dh ;加回车符 int 21h mov dl,0ah ;加换行符 int 21h pop dx ret ;子程序返回disp endpcode endsend start4、参考程序2: E8253_2.ASMioport equ 0cc00h-0280hio8253a equ ioport+280hio8253b equ ioport+281hio8253c equ ioport+2
11、83hcode segment assume cs:codestart:mov dx,io8253c ;向8253写控制字 mov al,36h ;使0通道为工作方式3 out dx,al mov ax,1000 ;写入循环计数初值1000 mov dx,io8253a out dx,al ;先写入低字节 mov al,ah out dx,al ;后写入高字节 mov dx,io8253c mov al,76h ;设8253通道1工作方式2 out dx,al mov ax,1000 ;写入循环计数初值1000 mov dx,io8253b out dx,al ;先写低字节 mov al,ah
12、 out dx,al ;后写高字节 mov ah,4ch ;程序退出 int 21h code ends end start实验四 可编程并行接口(一)(8255方式0)一、实验目的 掌握8255方式0的工作原理及使用方法。二、实验内容 、实验电路如图4-1,8255C口接逻辑电平开关K0K7,A口接LED显示电路L0L7。、编程从8255C口输入数据,再从A口输出。 图4-1 图4-2三、编程提示 1、8255控制寄存器端口地址 28BHA口的地址 288H C口的地址 28AH 2、参考流程图(见图4-2):3、参考程序: E8255.ASMioport equ 0cc00h-0280hi
13、o8255a equ ioport+288hio8255b equ ioport+28bhio8255c equ ioport+28ahcode segmentassume cs:codestart: mov dx,io8255b ;设8255为C口输入,A口输出 mov al,8bh out dx,alinout: mov dx,io8255c ;从C口输入一数据 in al,dx mov dx,io8255a ;从A口输出刚才自C口 out dx,al ;所输入的数据 mov dl,0ffh ;判断是否有按键 mov ah,06h int 21h jz inout ;若无,则继续自C口输入
14、,A口输出 mov ah,4ch ;否则返回 int 21hcode endsend start实验五 七段数码管一、实验目的 掌握数码管显示数字的原理二、实验内容1、 静态显示:按图5-1连接好电路,将8255的A口PA0PA6分别与七段数码管的段码驱动输入端a相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。编程从键盘输入一位十进制数字(09),在七段数码管上显示出来。 图5-1 图5-2三、编程提示1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。 2、七段数码管的字型代码表如下表:显示字形gefd
15、cba段码001111113fh1000011006h21010115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh3、参考流程图(见图5-3、图5-4) 图5-3 图5-44、参考程序1: LED1.ASMdata segmentioport equ 0cc00h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,
16、0ah,Input a num (0-9),other key is exit:,0dh,0ah,$data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,io8255b ;使8255的A口为输出方式 mov ax,80h out dx,alsss: mov dx,offset mesg1 ;显示提示信息 mov ah,09h int 21h mov ah,01 ;从键盘接收字符 int 21h cmp al,0 ;是否小于0 jl exit ;若是则退出 cmp al,9 ;是否大于9 jg exit ;若是则退出 sub al,30h ;将所得字符的ASCII码减30H mov bx,offset led ;bx为数码表的起始地址 xlat ;求出相应的段码 mov dx,io8255a ;从8255的A口输出 out dx,al jmp sss ;转SSSexit: mov ah,4ch ;返回 int 21hcode ends end start