微机原理综合实验报告.doc_第1页
微机原理综合实验报告.doc_第2页
微机原理综合实验报告.doc_第3页
微机原理综合实验报告.doc_第4页
微机原理综合实验报告.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

微机原理综合实验报告目录一 8255并行口实验二 8259中断实验(一)三 8253定时/计数器实验四 A/D转换实验五 步进电机实验六 综合实验:十字路口交通灯实验七 实验体会 四8255并行口实验1.实验目的:(1)学习利用并行接口芯片8255构成并行接口电路的基本方法(2)熟悉掌握并行接口芯片8255的基本性能及在时间应用中的硬件连接、初始化编程方法2.实验内容:编写程序,使8255的PB口为输出口,PA口为输入口,从PA口将K0K7作为一个字节读入,在从PB口输出这一反码字节。3.实验程序:CODE SEGMENTASSUME CS:CODESTART: MOV DX,21BH ;8255初始化命令字 MOV AL,90H OUT DX,ALBG: MOV DX,218H ;从PA口读入数据 IN AL,DX XOR AL,FFH ;求反 MOV DX,219H OUT DX,AL ;从PB口输出 JMP BGCODE ENDSEND START4.实验框图5. 实验电路图6.实验方法说明通过8255控制字设定PA口为输入口,PB口为数据输出口,读取PA口的数值并通过求反指令将数据取反后,经由PB口输出。8259中断实验(一)1.实验目的:(1)了解PC机的中断结构及8259中断控制器的初始化(2)熟悉8259中断控制器的工作原理和硬件连线方法(3)了解8259的应用和硬件编程方法了解8259中断屏蔽2.实验内容:编写中断实验程序,主程序使8255的口为输出口,输出0FFH,L0L7指示灯全亮,中断服务程序从PB口输出0FFH,L0L3亮,L4L7灭,并延时一段时间后返回主程序。3.实验程序INT0 EQU 220hINT1 EQU 221hP8255BEQU219HP8255KEQU21BHSTACK SEGMENTSTA DB 50 DUP(?)TOPEQULENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART: CLI MOV AX,TOP MOV SP,AX PUSH DS MOV AX,0000H;定义IRQ0中断 MOV DS,AX MOV AX,OFFSET IRQ0 ADD AX,0000H MOV SI,20H MOV SI,AX MOV AX,CS MOV SI,22H MOV SI,AX POP DS MOV AL,13H ;对8259进行初始化ICW1 MOV DX,INT0 OUT DX,AL MOV AL,8 ;对8259进行初始化ICW2 MOV DX,INT1 OUT DX,AL MOV CX,0FFFFH LOOP $ MOV AL,9 ;对8259进行初始化ICW4 MOV DX,INT1 OUT DX,AL MOV CX,0FFFFH LOOP $ MOV DX,INT1 MOV AL,0FEH ;对8259进行初始化OCW1 OUT DX,AL MOV CX,0FFFFH LOOP $ MOV DX,INT0 ;对8259进行初始化OCW2,普通EOI返回 MOV AL,20H OUT DX,AL MOV CX,0FFFFH LOOP $ STI MOV DX,P8255K ;对8255进行初始化 MOV AL,90H OUT DX,ALDSP:MOV AL,0FFHMOV DX,P8255BOUT DX,AL JMP DSPIRQ0: STIMOV CX,0FFFFH LOOP $MOV AL,0FHMOV DX,P8255BOUT DX,AL MOV DX,INT0 MOV AL,20H OUT DX,ALMOV CX,0FFFFH LOOP $MOV CX,0FFFFH LOOP $ IRET CODE ENDSEND START4.实验框图5. 实验电路图6. 实验方法说明主程序使8255输出高电平,实现L0L7指示灯全亮。设置中断IRQ0,实现L0L3亮,L4L7灭,并延时一段时间后返回主程序。将中断向量的入口地址写入后,通过对8259初始化命令字的写入,实现中断的调用。六8259中断实验(二)1. 实验目的(1)了解PC机的中断结构及8259中断控制器的初始化(2)熟悉8259中断控制器的工作原理和硬件连线方法(3)了解8259的应用和硬件编程方法(4)了解8259中断屏蔽,以及优先级的判别等特性2.实验内容:编写中断实验程序,主程序使8255的PB口为输出口,输出0FFH,L0L7指示灯全亮,IR0中断服务程序从PB口输出0FH,L0L3灯亮,L4L7灯灭,并延时一段时间后返回主程序。IR1中断服务程序从PB口输出0F0H,L0L3灭,L4L7亮,并延时一段时间后返回主程序。3.实验程序INT0 EQU 220hINT1 EQU 221hP8255BEQU219HP8255KEQU21BHSTACK SEGMENTSTA DB 50 DUP(?)TOPEQULENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART: CLI MOV AX,TOP MOV SP,AX PUSH DS MOV AX,0000H;设置中断向量IRQ0 MOV DS,AX MOV AX,OFFSET IRQ0 ADD AX,0000H MOV SI,20H MOV SI,AX MOV AX,CS MOV SI,22H MOV SI,AX MOV AX,0000H;设置中断向量IRQ1 MOV DS,AX MOV AX,OFFSET IRQ1 ADD AX,0000H MOV SI,24H MOV SI,AX MOV AX,CS MOV SI,26H MOV SI,AX POP DS MOV AL,13H ;对8259进行初始化ICW1 MOV DX,INT0 OUT DX,AL MOV AL,8 ;对8259进行初始化ICW2 MOV DX,INT1 OUT DX,AL mov cx,0fffhloop $ MOV AL,9 ;对8259进行初始化ICW4 MOV DX,INT1 OUT DX,AL mov cx,0fffhloop $ MOV DX,INT1 MOV AL,0FCH ;对8259进行初始化OCW1 OUT DX,AL mov cx,0fffhloop $ MOV DX,INT0 MOV AL,20H ; 普通EOI返回 OUT DX,AL mov cx,0fffhloop $ STI MOV DX,P8255K;对8255进行初始化MOV AL,90HOUT DX,ALDSP:MOV AL,0FFHMOV DX,P8255BOUT DX,AL JMP DSP IRQ0: STIMOV CX,0FFFFHLOOP $MOV AL,0FHMOV DX,P8255BOUT DX,AL MOV DX,INT0 MOV AL,20H OUT DX,ALmov cx,0FFFFHLOOP $mov cx,0FFFFHLOOP $ IRET IRQ1: STImov cx,0FFFFHLOOP $MOV AL,0F0HMOV DXP8255BOUT DX,AL MOV DX,INT0 MOV AL,20H OUT DX,ALmov cx,0FFFFHLOOP $mov cx,0FFFFHLOOP $ IRET code endsend start4.实验框图5. 实验电路图6. 实验方法说明主程序使8255输出高电平,实现L0L7指示灯全亮。设置中断IRQ0,实现L0L3亮,L4L7灭,并延时一段时间后返回主程序。设置中断IRQ1,实现L0L3灭,L4L7亮,并延时一段时间后返回主程序。将中断向量的入口地址写入后,通过对8259初始化命令字的写入,使8259工作在全嵌套方式下,中断优先级IRQ0大于IRQ1,这样通过8259对中断的判断来实现中断的响应。七8253定时/计数器实验1.实验目的:(1)了解定时器8253的初始化及用法(2)会用逻辑笔或示波器观察8253的工作状态2实验内容:编写程序,使8253工作的定时/计时器2工作在方式3下3.实验程序:TIM_CTL EQU 203HTIMER0 EQU 200HTIMER1 EQU 201HTIMER2 EQU 202HMODE23 EQU 0B6HMODE13 EQU 76HCODE SEGMENTASSUME CS:CODESTART:TT: CLI MOV DX,TIM_CTL ;初始化8253MOV AL,MODE23OUT DX,ALMOV DX,TIMER2 ;先写低8位MOV AL,0FFh OUT DX,AL MOV AL,0FFh ;后写低8位OUT DX,ALWT: JMP WTCODE ENDSEND START4.实验框图5.实验电路6.实验方法说明设置8253计时器工作在方式2实现分频器功能,将实验箱上的频率Q0经行65535分频,再由OUT口输出接到逻辑笔,观察逻辑笔的变化。八A/D转换实验1.实验目的:(1)了解模/数转换的工作原理(2)掌握0809的使用方法2.实验内容:编写程序,用0809的IN0通道采集数据并在数码管上显示3.实验程序B8279 EQU 212HD8279 EQU 210HLED0 EQU 00 LED1 EQU 38H DATA SEGMENTLED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39HDB 5EH,79H,71HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV DX,B8279 ;对8279进行初始化MOV AL,0D0HOUT DX,AL MOV CX,0FFFFH LOOP $MOV DX,B8279 MOV AL,LED0OUT DX,ALMOV AL,LED1OUT DX,AL MOV DX,B8279MOV AL,95H OUT DX,AL MOV DX,D8279 ;数码管显示 MOV AL,40H OUT DX,AL MOV DX,D8279 MOV AL,5eHOUT DX,AL MOV DX,D8279MOV AL,77HOUT DX,AL TT: MOV DX,230H ;选通IN0通道OUT DX,AL MOV CX,0FFFFHLOOP $ MOV DX,B8279MOV AL,83H OUT DX,AL MOV DX,230HIN AL,DX AND AL,0FH LEA BX,LEDXLATMOV DX,D8279 OUT DX,ALMOV DX,B8279 MOV AL,84HOUT DX,ALMOV DX,230HIN AL,DXMOV CL,4H ROR AL,CLAND AL,0FHLEA BX,LEDXLATMOV DX,D8279 OUT DX,ALJMP TT CODE ENDSEND START 4.实验框图5.实验电路图6实验方法说明通过A/D转换接口芯片0809实现模拟量到数据量的转变,并通过键盘显示芯片8279将转换后的数据量显示出来。步进电机实验1.实验目的:(1)了解步进电机的工作原理,以及脉冲分配概念(2)掌握计算机控制步进电机的方法2.实验内容编写程序,通过8255控制步进电机的旋转3.实验程序CODE SEGMENTASSUME CS:CODESTART:MOV DX,21BH ;8255初始化MOV AL,90HOUT DX,ALBG: MOV DX,218HIN AL,DXCMP AL,01HJNZC2MOV BX,0FFFFHJMP WORKC2:CMP AL,02HJNZC4MOV BX,07FFFHJMP WORKC4:CMP AL,04HJNZC8MOV BX,0FFFHJMP WORKC8:CMP AL,08HJNZCCMOV BX,07FFHJMP WORKCC: MOV AL,00HMOV DX,219HOUT DX,ALJMP BGWORK: MOV AL,01HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $ MOV AL,03HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $MOV AL,02HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $ MOV AL,06HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $MOV AL,04HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $ MOV AL,0CHMOV DX,219HOUT DX,ALMOV CX,BXLOOP $MOV AL,08HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $ MOV AL,09HMOV DX,219HOUT DX,ALMOV CX,BXLOOP $JMP BGCODE ENDSEND START4.实验框图5.实验电路图6.实验方法说明初始化8255使PA口为输入口,PB口为输出口,通过判别PA口的数据来使步进电机工作在不同的状态。步进电机的旋转由OUT指令控制,实现步进电机按照预定指令旋转。十综合实验:十字路口交通灯实验1.实验要求:(1)正常情况下,红灯、绿灯510秒定时变化(2)分别设置南北行人中断按钮和东西行人中断按钮,当行人过马路是绿灯亮并延时5秒(3)设置紧急开关,当按下开关时所以路口的信号灯全为红色2.发挥部分:(1)红灯和绿灯转换之间设置黄灯,并且黄灯闪烁3次(2)紧急红灯按下时发出警报声3.实验电路图4.实验框图5.实验程序P8255A EQU 218H ;8255连接端口定义P8255B EQU 219HP8255C EQU 21AHP8255K EQU 21BHTIM_CTL EQU 203H ;8253连接端口定义TIMER0 EQU 200HTIMER1 EQU 201HINT0 EQU 220H ;8259连接端口定义INT1 EQU 221HMDAC EQU 228H ;0832连接端口定义;STACK SEGMENT STACKSTA DB 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART: CLI MOV AX,TOP MOV SP,AX PUSH DS MOV AX,0000H ;定义中断向量IRQ0 MOV DS,AX MOV AX,OFFSET IRQ0 ADD AX,0000H MOV SI,20H MOV SI,AX MOV AX,CS MOV SI,22H MOV SI,AX; MOV AX,0000H ;定义中断向量IRQ1 MOV DS,AX MOV AX,OFFSET IRQ1 ADD AX,0000H MOV SI,24H MOV SI,AX MOV AX,CS MOV SI,26H MOV SI,AX;. MOV AX,0000H ;定义中断向量IRQ2 MOV DS,AX MOV AX,OFFSET IRQ2 ADD AX,0000H MOV SI,28H MOV SI,AX MOV AX,CS MOV SI,2AH MOV SI,AX POP DS;. MOV DX,TIM_CTL ;计数器0工作在方式1构成单稳态触发器 MOV AL,00100010B OUT DX,AL MOV DX,TIMER0 MOV AL,0F0H ;只写低8位 OUT DX,AL MOV DX,TIM_CTL MOV AL,01110110B ;计数器1工作在方式3构成方波发生器 OUT DX,AL MOV DX,TIMER1 MOV AL,0FFH ;写低8位 OUT DX,AL MOV AL,0FFH ;写高8位 OUT DX,AL;. MOV AL,13H ;初始化ICW1,沿触发且需要ICW4 MOV DX,INT0 OUT DX,AL MOV CX,0FFFH LOOP $ MOV AL,8 ;初始化ICW2,自定义8号中断 MOV DX,INT1 OUT DX,AL MOV CX,0FFFH LOOP $ MOV AL,9 ;初始化ICW3,自定义9号中断 MOV DX,INT1 OUT DX,AL MOV CX,0FFFH LOOP $ MOV AL,10 ;初始化ICW2,自定义10号中断 MOV DX,INT1 OUT DX,AL MOV CX,0FFFH LOOP $ MOV DX,INT1 ;设置命令字OCW1,只响应IR0、IR1、IR2引脚中断请求 MOV AL,0F8H OUT DX,AL MOV CX,0FFFH LOOP $ MOV DX,INT0 ;设置命令字OCW2,普通EOI命令 MOV AL,20H OUT DX,AL MOV CX,0FFFH LOOP $ STI; MOV DX,P8255K ;8255初始化, B口输出接LS240 MOV AL,10000001B OUT DX,AL;STATE1: MOV DX,P8255B ;东西红,南北绿 MOV AL,01011010B OUT DX,AL MOV CX,10 ;计时10秒S1: CALL DELAY LOOP S1STATE2: MOV DX,P8255B ;东西绿,南北黄 MOV AL,00000101B OUT DX,AL CALL SHANSHUO STATE3: MOV DX,P8255B ;东西绿,南北红 MOV AL,10100101B OUT DX,AL MOV CX,10 ;计时10秒S3: CALL DELAY LOOP S3STATE4: MOV DX,P8255B ;东西黄,南北绿 MOV AL,00001010B OUT DX,AL MOV CX,3 CALL SHANSHUO JMP STATE1 ;循环到状态STATE1,即东西红,南北绿;*-*DELAY PROC ;延时子程序1,交通灯持续时间 PUSH CX PUSH DX MOV DX,20DL500: MOV CX,2801DL10ms: LOOP DL10ms DEC DX JNZ DL500 POP DX POP CX RETDELAY ENDP;*-*HALF_DELAY PROC ;延时子程序2,黄灯闪烁时间 PUSH AX PUSH CX MOV AX,2DELAY1: MOV CX,50000DELAY2: LOOP DELAY2 DEC AX JNZ DELAY1 POP CX POP AX RETHALF_DELAY ENDP ;*-*SHANSHUO PROC ;黄灯闪烁子程序 PUSH AX PUSH DX PUSH CX MOV CX,6ZAIYICI: MOV DX,P8255B IN AL,DX CMP AL,00000101B JZ FLITTER1 CMP AL,10101111B JZ FLITTER1 CMP AL,00001010B JZ FLITTER2 CMP AL,01011111B JZ FLITTER2FLITTER1: CMP AL,00000101B JZ MIE1 MOV AL,00000101B OUT DX,AL CALL HALF_DELAY JMP HUI1MIE1: MOV AL,10101111B OUT DX,AL CALL HALF_DELAYHUI1: DEC CX JNZ ZAIYICI JMP FANHUIFLITTER2: CMP AL,00001010B JZ MIE2 MOV AL,00001010B OUT DX,AL CALL HALF_DELAY JMP HUI2MIE2: MOV AL,01011111B OUT DX,AL CALL HALF_DELAY JMP HUI2HUI2: DEC CX JNZ ZAIYICI JMP FANHUIFANHUI: POP CX POP DX POP AX RETSHANSHUO ENDP;*-*WAVE PROC ;紧急事件呼叫子程序 PUSH AX PUSH DX PUSH CX MOV DX,MDAC MOV AL,00H MOV CX,1000NEXT: OUT DX,AL DEC AL LOOP NEXTJIESHU: MOV DX,MDAC MOV AL,00H OUT DX,AL POP CX POP DX POP AX RETWAVE ENDP;*-* IRQ0: PUSH AX ;紧急事件中断请求 PUSH DX PUSH CX STI MOV CX,0FFFFH LOOP $ CALL WAVE MOV AL,11110000B MOV CX,5OOO: CALL DELAY LOOP OOO MOV DX,INT0 MOV AL,20H OUT DX,AL MOV CX,0FFFFH LOOP $ MOV CX,0FFFFH LOOP $ POP CX POP DX POP AX IRET;*-*IRQ1: PUSH AX ;南北路口行人中断请求 PUSH DX PUSH CX STI MOV CX,0FFFFH LOOP $ MOV DX,P8255B IN AL,DX TEST AL,01011010B JNZ WUXIAO1 CALL DELAY ;若南北红灯、东西绿灯,则延时1s后变为南北绿灯、东西红灯并持续4s MOV AL,01011010B MOV DX,P8255B OUT DX,AL MOV CX,4 PPP: CALL DELAY LOOP PPP WUXIAO1: MOV DX,INT0 MOV AL,20H OUT DX,AL MOV CX,0FFFFH LOOP $ MOV CX,0FFFFH LOOP $ POP CX POP DX POP AX IRET;*-*IRQ2: PUSH AX ;东西路口行人中断请求 PUSH DX PUSH CX STI MOV CX,0FFFFH LOOP $ MOV DX,P8255B IN AL,DX TEST AL,10100101B JNZ WUXIAO2 CALL DELAY ;若南北绿灯、东西红灯,则延时3s后变为南北红灯、东西绿灯并持续5s MOV AL,10100101B MOV DX,P8255B OUT DX,AL MOV CX,4QQQ: CALL DELAY LOOP QQQWUXIAO2: MOV DX,INT0 MOV AL,20H OUT DX,AL MOV CX,0FFFFH LOOP $ MOV CX,0FFFFH LOOP POP CX POP DX POP AX IRET;*-*CODE ENDS END START6.实验设计思想说明根据设计要求,主程序中循环执行交通灯的正常工作状态,设置8255为B口输出驱动LM240。采用软件延时,红绿灯持续时间为10秒种,黄灯为过渡信号灯,并每隔0.5秒闪烁,闪烁4次,共持续2秒。设置三个中断源,分别为紧急事件中断,南北行人中断和东西行人中断,优先级依次递减。三个中断采用8259控制,其中紧急事件中断由计时器8253产生,南北行人中断和东西行人中断由单脉冲触发按键产生。当出现紧急事件时,通过0832进行D/A变换产生锯齿波驱动喇叭发出警报。7.设计过程中遇到的问题及解决方案(1)紧急事件中断进不去我在设计过程中是从易到难来设计的,就是说先设计一些基本功能,然后在逐渐添加新的功能。在开始设置的两个行人中断工作以后,我又加入了紧急事件中断,但是在调试过程中,无法进入行人中断。我反复地检查中断服务程序和硬件电路的连接没有发现任何问题。最后当我检查8259的初始化程序部分发现控制命令字OCW1我没有改动,而在之前的设计中,我设定其只响应IR0和IR1引脚上的中断请求,这样的话就无论如何也不能响应我设定在IR2引脚上的中断请求了,因此我重新改写一下OCW1控制命令字,问题就解决了。(2)8253产生的方波频率过快,导致信号灯不能持续发光在初始设计阶段,我打算用8253来对信号灯的发光时间进行计时,但无论我怎样设置分频数值,8253的输出频率还是太高,导致LM240不能够持续发光。因此,我选择了用软件延时的方式来控制信号的灯的放光时间,而用8253来执行紧急红灯中断的延时。设置8253的计数器1工作在方式3,计数器0工作在方式1单稳态触发器,并用按键来控制门控端,通过采用计时计数级联的方式解决了触发延时的问题。(3)中断请求按键连续按下系统出现死机在所有程序都检查无误,硬件电路也连接正确后,电路正常工作。当我让同学来测试的时候,他开玩笑地连续按下行人中断按键后,系统死机。我分析了很长时间也百思不得其解。后来,当我通过查找资料和询问老师后,原理我在中断程序设计过程中没有添加延时指令,这样系统在执行过程中,一遇到中断便要求必须马上对外设进行操作,而我们知道外设的操作与指令执行时间相比还需要一段时间,如果这段时

温馨提示

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

评论

0/150

提交评论