微机原理实验指导书(硬件实验).doc_第1页
微机原理实验指导书(硬件实验).doc_第2页
微机原理实验指导书(硬件实验).doc_第3页
微机原理实验指导书(硬件实验).doc_第4页
微机原理实验指导书(硬件实验).doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 8255输入、输出实验一、实验要求利用8255可编程并行口芯片,实现输入/输出实验,实验中用8255PA口作输出,PB口作输入。二、实验目的1、了解8255芯片结构及编程方法。2、了解8255输入/输出实验方法。三、实验电路及连线8255的CS/接地址译码/CS0,则命令字地址为8003H,PA口地址为8000H,PB口地址为8001H,PC口地址为8002H。PA0-PA7(PA口)接LED0-LED7(LED)PB0-PB7(PB口)接K0-K7(开关量)。数据线、读/写控制、地址线、复位信号板上已接好。连线连接孔1连接孔21CS08255CS2L08255-PA03L18255-PA14L28255-PA25L38255-PA36L48255-PA47L58255-PA58L68255-PA69L78255-PA710K08255-PB011K18255-PB112K28255-PB213K38255-PB314K48255-PB415K58255-PB516K68255-PB617K78255-PB7 四、实验说明 可编程通用接口芯片8255A有三个八位的并行I/O口,它有三种工作方式。本实验采用的是方式0:PA,PC口输出,PB口输入。很多I/O实验都可以通过8255来实现。开始延时置8255工作方式置8255PA口数据左移延时 五、实验参考程序、框图开始延时置8255工作方式读8255PB口置8255PA口 mode equ 082h ; 方式0,PA,PC输出,PB输入 PortA equ 8000h ; Port A PortB equ 8001h ; Port B PortC equ 8002h ; Port C CAddr equ 8003h ; 控制字地址code segment assume cs:codestart proc nearStart: mov al, mode mov dx, CAddr out dx, al ; 输出控制字 ; 实验1:PortA输出 mov al, 80H mov cx, 08HOutA: mov dx, PortA out dx, al ; 输出PortA mov dx, PortC out dx, al shr al, 1 ; 移位 mov ah,100 call delay ; 延时 loop OutA ; 实验2: PortB 输入 PortA 输出 mov dx, PortB in al, dx ; 读入PortB mov dx, PortC out dx, al mov dx, PortA out dx, al ; 输出到PortA mov ah, 200 call delay jmp Start endpdelay proc near push ax mov al,0 push cx mov cx,ax loop $ pop cx pop ax retdelay endpcode ends end start六、实验步骤(1) 在实验箱断电的情况下连好线。(2) 输入程序并检查,保存程序。(3) “编译”程序。(4) “全速执行”程序。(5) 记录实验结果及分析。实验四 8259外部中断实验一、实验要求用8088/86控制8259可编程中断控制器,实现对外部中断的响应和处理。要求程序中对每次中断进行计数,并将计数结果用8255的PA口输出到LED。二、实验目的1、 学习8088/86与8259的连接方法。2、 学习8088/86对8259的控制方法。三、实验电路及连线连线连接孔1连接孔21右8259_CSCS12右8259的IR0单脉冲3右8259的INT8088的INTR(在CPU板左侧)48255_CSCS05PA0L06PA1L17PA2L28PA3L39PA4L410PA5L511PA6L612PA7L7单脉冲四、实验说明8088/86需要外接中断控制器才能对外部中断进行处理。在编程时应注意: 1. 正确地设置可编程中断控制和工作方式。2. 必须正确地设置中断服务程序地址。8259可外接8个中断源,本实验只响应INT0中断,8259也可以多级连接以响应多个中断源。将单脉冲信号接到8259的INT0脚。每次中断时,可以看到LED显示会加1。五、实验参考程序、框图mode equ 82h ; 8255 工作方式PA8255 equ 8000h ; 8255 PA口输出地址CTL8255 equ 8003hICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 09000h ; 8259地址CS8259B equ 09001hdata segmentCNT db 0data endscode segment assume cs:code, ds: dataIEnter proc near push ax push dx mov dx, PA8255 inc CNT mov al, CNT out dx, al ; 输出计数值 mov dx, CS8259A mov al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iretIEnter endpIInit proc mov dx, CS8259A mov al, ICW1 out dx, al mov dx, CS8259B mov al, ICW2 out dx, al mov al, ICW4 out dx, al mov al, OCW1 out dx, al retIInit endpstart proc near mov dx, CTL8255 mov al, mode out dx, al cli mov ax, 0 mov ds, ax mov bx, 4*ICW2 ; 中断号 mov ax, code shl ax, 4 ; x 16 add ax, offset IEnter ; 中断入口地址(段地址为0) mov bx, ax mov ax, 0 inc bx inc bx mov bx, ax ; 代码段地址为0 call IInit mov ax, data mov ds, ax mov CNT, 0 ; 计数值初始为0 mov al, CNT mov dx, PA8255 out dx, al stiLP: ; 等待中断,并计数。 nop jmp LPstart endp end start开始设置中断服务程序地址设置中断控制器工作方式中断允许等待中断中断入口计数值加1输出计数值输出中断结束命令中断返回 主程序 中断服务程序六、实验步骤(1) 在实验箱断电的情况下连好线。(2) 输入程序并检查,保存程序。(3) “编译”程序。(4) “全速执行”程序。(5) 按“单脉冲”按键,观察LED的显示。实验五 8251A串行通讯实验一、实验要求利用8088/86 CPU控制8251A可编程串行通信控制器,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。二、实验目的1、掌握8088/86实验串行口通信的方法。2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。连线连接孔1连接孔21KEY/LED_CSCS028251_CSCS538251_TxCLKF/16 (250KHz)48251_RxCLKF/16 (250KHz)58251_CLKF/4 (1MHZ)64MHzFin7甲方8251_TXD乙方8251_RXD8甲方8251_RXD乙方8251_TXD9甲方GND乙方GND3、学习串行口通讯程序编写方法。三、实验电路四、实验说明1、8088/86CPU通过外接的8251可编程串行控制器实现串口通信。通过8251的控制口写入其工作方式或读入当前状态,通过数据口发送或接收串行口数据。本实验是通过查询方式读写状态和输入输出串行数据。2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD,这样按下的键就会在本机的LED上显示。3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。4、将分频器的Fin接到4MHz脉冲发生器,就可以得到1MHz和250KHz脉冲。发送子程序清出错标志发送缓冲为空?否是发送数据返回 串口发送子程序五、实验参考程序、框图开始设置串口通讯方式及波特率是收到数据?否无检测键盘输入LED显示读入键值转换成键码串口发送键码接收数据送显示缓冲 主程序有是接收子程序是否已收到数据?读入数据返回否串口接收子程序OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口CS8251D equ 09000h ; 串行通信控制器数据口地址CS8251C equ 09001h ; 串行通信控制器控制口地址data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)RBuf db 0TBuf db 0LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07hcode segment assume cs:code, ds:dataDelay proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,ax loop $ pop cx pop ax retDelay endpDisplayLED proc near mov bx, offset LEDBuf mov cl, 6 ; 共6个八段管 mov ah, 00100000b ; 从左边开始显示DLoop: mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 mov al, bx mov dx, OUTSEG out dx, al mov dx, OUTBIT mov al, ah out dx, al ; 显示一位八段管 push ax mov ah, 1 call Delay pop ax shr ah, 1 inc bx dec cl jnz DLoop mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 retDisplayLED endpTestKey proc near mov dx, OUTBIT mov al, 0 out dx, al ; 输出线置为0 mov dx, IN_KEY in al, dx ; 读入键状态 not al and al, 0fh ; 高四位不用 retTestKey endpGetKey proc near mov ch, 00100000b mov cl, 6KLoop: mov dx, OUTBIT mov al, ch ; 找出键所在列 not al out dx, al shr ch, 1 mov dx, IN_KEY in al, dx not al and al, 0fh jne Goon_ ; 该列有键入 dec cl jnz KLoop mov cl, 0ffh ; 没有键按下, 返回 0ffh jmp Exit1Goon_: dec cl shl cl, 2 ; 键值 = 列 X 4 + 行 mov ch, 4LoopC: test al, 1 jnz Exit1 shr al, 1 inc cl dec ch jnz LoopCExit1: mov dx, OUTBIT mov al, 0 out dx, al mov ch, 0 mov bx, offset KeyTable add bx, cx mov al, bx ; 取出键码 mov bl, alWaitRelease: mov dx, OUTBIT mov al, 0 out dx, al ; 等键释放 mov ah, 10 call Delay call TestKey jne WaitRelease mov al, bl retGetKey endpIInit proc near ; 8251初始化 mov dx, CS8251C mov al, 01001111b ; 1停止位,无校验,8数据位, x64 out dx, al mov al, 00010101b ; 清出错标志, 允许发送接收 out dx, al retIInit endpSend proc near ; 串口发送 mov dx, CS8251C mov al, 00010101b ; 清出错,允许发送接收 out dx, alWaitTXD: in al, dx test al, 1 ; 发送缓冲是否为空 jz WaitTXD mov al, TBuf ; 取要发送的字 mov dx, CS8251D out dx, al ; 发送 push cx mov cx,0ffffh loop $ pop cx retSend endpReceive proc near ; 串口接收 mov dx, CS8251CWaitRXD: in al, dx test al, 2 ; 是否已收到一个字 je WaitRXD mov dx, CS8251D in al, dx ; 读入 mov RBuf, al retReceive endpstart proc near mov ax, data mov ds, ax call IInit mov LEDBuf, 0ffh ; 显示 8.8.8.8. mov LEDBuf+1, 0ffh mov LEDBuf+2, 0ffh mov LEDBuf+3, 0ffh mov LEDBuf+4, 0 mov LEDBuf+5, 0MLoop: call DisplayLED ; 显示 mov dx, CS8251C in al, dx ; 是否接收到一个字 test al, 2 jnz RcvData call TestKey ; 有键入? je MLoop ; 无键入, 继续显示 call GetKey ; 读入键码 and al, 0fh ; 显示键码 mov TBuf, al call Send jmp MLoopRcvData: call Receive ; 读入接收到的字 mov al, RBuf and al, 0fh ; 只显示低四位 mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx ; 转换成显示码 mov LEDBuf+5, al jmp MLoopStart endpcode ends end start六、实验步骤(1) 在实验箱断电的情况下连好线。(2) 输入程序并检查,保存程序。(3) “编译”程序。(4) “全速执行”程序。(5) 记录实验结果及分析。实验六 8253计数器实验一、实验要求利用8088/86外接8253可编程定时器/计数器,可以实现对外部事件进行计数。设置断点读回计数器的值。二、实验目的1、学习8088/86与8253的连接方法。2、学习8088/86对8253的控制方法。连线连接孔1连接孔218253_CSCS028253_OUT0L038253_GATE0VCC48253_CLK0单脉冲三、实验电路及连线 四、实验说明本实验中计数器按方式0工作。即十六位二进制计数器。当计数设置好后,计数器就开始计数。如果要读入计数器的值,要先锁存计数值,才能读到计数值。本实验所设计数值为5,也就是外部5个脉冲,计数器值加1。同时OUT脚输出一个高电平。实验时,可以将OUT0接到LED上,观察计数器是否工作。五、 实验参考程序、框图CONTROL equ 08003hCOUNT0 equ 08000hCOUNT1 equ 08001hCOUNT2 equ 08002hcode segment assume cs:codestart proc near mov al, 30h ; 通道0,方式0 mov dx, CONTROL out dx, al mov al, 5 ; 计数器初始值。 mov dx, COUNT0 out dx, al ; 低八位 mov al, 0 out dx, al ; 高八位Again: mov al, 00000000B ; 锁存计数器值 mov dx, CONTROL out dx, al mov dx, COUNT0 in al, dx ; 读入计数值低八位 mov bl, al in al, dx ; 读入计数值高八位 mov ah, al mov al, bl jmp Againstart endpcode ends end start开始设置工作方式锁存计数值读回计数值六、实验步骤(1) 在实验箱断电的情况下连好线。(2) 输入程序并检查,保存程序。(3) “编译”程序。(4) “全速执行”程序。(5) 记录实验结果及分析。实验七 人机交互实验一、实验要求利用实验箱提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。实验程序可分成三个模块。 键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。 显示模块:将显示单元的内容在显示器上动态显示。 主程序:调用键输入模块和显示模块。二、实验目的1、掌握键盘和显示器的接口方法和编程方法。2、掌握键盘扫描和LED八段码显示器的工作原理。连线连接孔1连接孔21KEY/LED_CSCS0三、实验电路及连线四、实验说明本实验箱提供了一个64的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。地址中的X是由KEY/LED CS 决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如将KEY/LED CS信号接CS0上,则列扫描地址为08002H,行码地址为08001H。列扫描码还可以分时用作LED的位选通信号。五、实验参考程序、框图开始初始化地址参数显示缓冲区初始化开始输出列扫描信号 LED显示有键输入?列扫描信号移位 否读入行信号 是读取键值是该列有键输入?否键值转换为显示数据否6列扫描完?是 返回 主程序框图按照行列计算键值查表得键码等待按键释放返回 读键输入子程序框图OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07hdata endscode segment assume cs:code, ds:dataDelay proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,ax loop $ pop cx pop ax retDelay endpDisplayLED proc near mov bx, offset LEDBuf mov cl, 6 ; 共6个八段管 mov ah, 00100000b ; 从左边开始显示DLoop: mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 mov al, bx mov dx, OUTSEG out dx,al mov dx, OUTBIT mov al, ah out dx, al ; 显示一位八段管 push ax mov ah, 1 call Delay pop ax shr ah, 1 inc bx dec cl jnz DLoop mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 retDisplayLED endpTestKey proc near mov dx, OUTBIT mov al, 0 out dx, al ; 输出线置为0 mov dx, IN_KEY in al, dx ; 读入键状态 not al and al, 0fh ; 高四位不用 retTestKey endpGetKey proc near mov ch, 00100000b mov cl, 6KLoop: mov dx, OUTBIT mov al, ch ; 找出键所在列 not al out dx, al shr ch, 1 mov dx, IN_KEY in al, dx not al and al, 0fh jne Goon_ ; 该列有键入 dec cl jnz KLoop mov cl, 0ffh ; 没有键按下, 返回 0ffh jmp Exit1Goon_: dec cl shl cl, 2 ; 键值 = 列 X 4 + 行 mov ch, 4LoopC: test al, 1 jnz Exit1 shr al, 1 inc cl dec ch jnz LoopCExit1: mov dx, OUTBIT mov al, 0 out dx, al mov ch, 0 mov bx, offset KeyTable add bx, cx mov al, bx ; 取出键码 mov bl, alWaitRelease: mov dx, OUTBIT mov al, 0 out dx, al ; 等键释放 mov ah, 10 call Delay call TestKey jne WaitRelease mov al, bl retGetKey endpStart proc near mov ax, data mov ds, ax mov LEDBuf, 0ffh ; 显示 8.8.8.8. mov LEDBuf+1, 0ffh mov LEDBuf+2, 0ffh mov LEDBuf+3, 0ffh mov LEDBuf+4, 0 mov LEDBuf+5, 0MLoop: call DisplayLED ; 显示 call TestKey ; 有键入? je MLoop ; 无键入, 继续显示 call GetKey ; 读入键码 and al, 0fh ; 显示键码 mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+5, al jmp MLoopStart endpcode ends end start六、实验步骤(1) 在实验箱断电的情况下连好线。(2) 输入程序并检查,保存程序。(3) “编译”程序。(4) “全速执行”程序。(5) 记录实验结果及分析。实验八 电子钟实验一、实验要求利用8253定时器、8259中断控制器和实验箱上提供的数码显示电路,设计一个电子时钟。格式如下:XX XX XX 由左向右分别为:时、分、秒二、实验目的1、进一步掌握8253定时器的使用和编程方法。2、进一步掌握8259中断控制器的编程方法。3、进一步掌握数码显示电路的驱动方法。三、实验电路及连线连线连接孔1连接孔2连线连接孔1连接孔21KEY/LED_CSCS068253的OUT1右8259的IR028253_CSCS478259_CSCS538253的GATE1+5V8右8259的INT8088的INTR(在CPU的左侧)48253的CLK11MHZ9右8259的SP/EN+5V54MHZFin10四、实验说明定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。五、实验框图; 本实验利用8253做定时器,用定时器输出的脉冲控制8259产生中断; 在8259中断处理程序中,对时、分、秒进行计数,在等待中断的循; 环中用LED显示时间。; 8253用定时器/计数器1,8253片选接CS4,地址为0C000H。8253时钟; 源CLK1接分频电路的F/64输出。分频器的Fin接4MHz时钟。8253的; GATE1接VCC。; 8259中断INT0接8253的OUT1,片选接CS5,地址为0D000H。; 显示电路的KEY/LED CS 接CS0,地址为08000H。CONTROL equ 0c003hCOUNT0 equ 0c000hCOUNT1 equ 0c001hCOUNT2 equ 0c002hmd8255 equ 82h ; 8255 工作方式PA8255 equ 8000h ; 8255 PA口输出地址CTL8255 equ 8003h ; 8255 控制口地址OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 0d000h ; 8259地址CS8259B equ 0d001hdata segmentCNT db 0LEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)Hour db 0Minute db 0Second db 0LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论