当前位置:文档之家› 微机原理硬件实验报告

微机原理硬件实验报告

微机原理课程实验报告实验题目简易微型计算机控制系统的设计与接口芯片的使用,8259A、8254、8255A、8251A 的联合编程。

实验目的掌握简易微型计算机控制系统的设计和搭建的步骤和方法,理解并使用8259A、8254、8255A、8251A接口芯片进行联合编程,实现双机通讯、基本输入输出、计数\定时、中断响应的基本功能,在此基础上,达到实验设计构想。

设计思路1. 使用两台实验装置,一台为发送机,一台为接收机,进行两机间的串行通讯。

2. 运行各自对应程序后,发送机在DOS界面下显示开始信息“START”,接收机显示程序启动、等待接受的信息“BEGUN,RECEIVING INFO”。

3. 输入控制指令“TURN”(8路LED灯轮流闪动,每次灯闪0.5s),或“BLINK”(8路LED灯一同闪动,每次灯闪0.5s),或“FORWARD”(8路LED从两边向中间闪动,每次灯闪0.5s),回车后则接收机上8路LED灯出现各自对应效果,屏幕上显示“IT’S SHOW TIME”。

4. 显示15次(1min)后,演示结束,接收机LED灯出现OVER状态(每隔一灯亮),屏幕上显示“SHOW OVER”,并将结果传回发送机,发送机屏幕上显示同样内容。

5. 按ESC键退出程序。

程序思路分为发送机程序和接收机程序两大部分发送机程序思路(SENDER.ASM)1. 程序启动时显示提示信息。

指令字符串、提示信息的输入、显示、存储操作采用INT 21H的DOS中断功能调用。

2. 得到指令字符串后,判断其类型后,向发送机发送指令类型,功能实现通过8251A的双机通信,S/R(发送机、接收机,下同)设置相同的波特率、数据格式(1个停止位、偶检验、字符长度8位),均允许收发数据。

3. 发送完指令类型后,开始等待接收演示结束的指令。

4. 程序结束。

综上,发送机端主要用到8255的基本输入输出、8251A的双机串行异步通信、DOS功能调用等主要功能。

接收机程序思路(RECEIVER.ASM)接收机程序中需要用到中断处理,因此设计思路分为主程序和中断处理子程序两部分。

接收机主程序1. 程序启动后,完成对8251A、8253、8255的初始化编程,其中,8251的方式字波特率系数64,8个数据位,1个停止位,偶校验;命令字允许接收发送数据,清错误标志。

8253的通道0为方式0,先写低字节,后写高字节,二进制计数。

8255的初始化中A口、B口均为方式0,基本输入输出,A口输入、B口输出,C口暂时不用;2. 设置中断向量,包括关中断、保存原中断向量和中断屏蔽寄存器的屏蔽字等;3. 提示程序开始后,接收指令类型,功能实现通过8251的双机串行通信;4. 接收到指令信息后,开中断,对8253装入初值9000H,CLK为18.432MHz,方式0时,每0.5s产生一次中断;5. 设置效果演示次数,此时主程序进入循环,当次数没有减为0是,一直处于循环;6. 次数CX=0后,跳出WAIT1,关中断,结束提示信息和LED灯显示OVER状态;7. RECOVER程序段用来恢复原来的中断向量和屏蔽字;8. 程序结束,返回DOS系统中断处理子程序1. 寄存器内容入栈保护;2. 判别指令类型,执行对应效果程序段,使用OUT指令将LED灯对应的二进制状态通过8255的B口输入,使其出现相应效果;3. 演示次数计数器减1;4. 重装8253的通道0计数初值,方式不变,以便触发下次中断;5. 向8259发中断结束命令,清除相应ISR置位;6. 寄存器保护内容弹栈;7. IRET返回命令8. 中断处理子程序结束综上,接收机端使用到了8251、8253、8255、8259基本上全部功能,8253用来产生计数中断,8259响应中断和中断服务,8255对外设(LED灯)输出,8251与发送机的串行通信。

硬件连线图图一:双机通讯连线图图二:接收机LED灯显示连线图图三:接收机计数中断连线图程序设计发送机程序(SENDER.ASM)CS0 EQU 3000H ;8255片选CS0 对应的端口始地址PA EQU CS0+00H ;8255 的A 口地址PB EQU CS0+01H ;8255 的B 口地址PC EQU CS0+02H ;8255 的C 口地址CP EQU CS0+03H ;8255 的控制寄存器地址CS1 EQU 3020H ;8251片选CS1对应的端口地址PD EQU CS1+00H ;8251 数据寄存器PM EQU CS1+01H ;8251 方式控制寄存器DATA SEGMENTSET DB "------ START------",0AH,0DH,'$' ;提示信息OVE DB "------SHOW IS OVER------",0AH,0DH,'$' ;结束信息提示BUFF DB 20 ;指令字符串输入缓冲区DB ?DB 20 DUP(?)DATA ENDSMSTACK SEGMENT STACKSA DW 20 DUP(?)TOP_STAC LABEL WORDMSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:MSTACK,ES:DATASTART:MOV AX,MSTACKMOV SS,AXLEA SP,TOP_STACMOV AX,DATAMOV DS,AX;8255A的初始化编程,方式0,A口输入,B口输出;MOV DX,CPMOV AL,10010000BOUT DX,ALMOV AX,DATA ;显示提示信息MOV DS,AXLEA DX,SETMOV AH,9INT 21HMOV DX,PM ;8251初始化编程MOV AL,00HOUT DX,ALCALL DELAYOUT DX,ALCALL DELAYOUT DX,ALCALL DELAYMOV AL,40HOUT DX,ALCALL DELAYMOV AL,01111110B ;方式字,波特率系数64,8个数据位,1个停止位,偶校验OUT DX,ALCALL DELAYMOV AL,00110111B ;命令字,允许接收发送数据,清错误标志OUT DX,ALMOV AX,DATA ;将输入的指令存入输入缓冲区MOV DS,AXLEA DX,BUFFMOV AH,0AHINT 21HMOV BX,DXMOV CX,0MOV CL,[BX+1]ADD DX,2MOV SI,DX;发送指令类型MOV DX,PDMOV AL,CLOUT DX,ALSEND: ;指令发送MOV DX,PMD: IN AL,DXTEST AL,01HJZ DMOV DX,PDMOV AL,[SI]INC SIOUT DX,ALMOV DX,PMLOOP D;等待接收程序结束的信号,显示结束信息MOV DX,PMWAIT_OVER:IN AL,DXTEST AL,02HJZ WAIT_OVERMOV AX,DATAMOV DS,AXLEA DX,OVEMOV AH,9INT 21HMOV AH,4CHINT 21HDELAY:MOV BL,2D0:DEC BLJNZ D0RETCODE ENDSEND START接收机程序(RECEIVE.ASM)CS0 EQU 3000H ;片选CS0 对应的端口始地址PA EQU CS0+00H ;8255 的A 口地址PB EQU CS0+01H ;8255 的B 口地址PC EQU CS0+02H ;8255 的C 口地址CP EQU CS0+03H ;8255 的控制寄存器地址CS1 EQU 3020H ;片选CS1对应的端口地址PD EQU CS1+00H ;8251 数据寄存器PM EQU CS1+01H ;8251 方式控制寄存器CS2 EQU 3040H ;片选CS2 对应的端口始地址PC0 EQU CS2+00H ;8254 计数器0 端口地址PME EQU CS2+03H ;8254 控制寄存器端口地址IRQ_IVADD EQU 01C8H ;IRQ10对应的中断矢量地址IRQ_OCW1 EQU 0A1H ;IRQ10对应PC 机内部8259 的OCW1 地址IRQ_OCW2 EQU 0A0H ;IRQ10对应PC 机内部8259 的OCW2 地址IRQ_IM EQU 0FBH ;IRQ10对应的中断屏蔽字DATA SEGMENTFD DB 81H,42H,24H,18H,18H,24H,42H,81H ;FORWORD对应LED灯状态的码表BK DB 00H ;BLINK对应LED灯状态的码表TN DB 01H ;TURN对应LED灯起始状态OVER DB 55H ;灯闪状态结束后OVER的LED状态CS_BAK DW ? ;保存IRQ10 原中断处理程序入口段地址的变量IP_BAK DW ? ;保存IRQ10 原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存IRQ10 原中断屏蔽字的变量STATE DB 1 DUP(?) ;保存指令类型NUMBER DB 1 DUP(?)FDN DB 0 ;FORWARD状态归零需要的变量START DB "------BEGUN,RECEIVING INFO------",0AH,0DH,'$' ;开始提示信息OVE DB "------SHOW IS OVER------",0AH,0DH,'$' ;结束提示信息ERRO DB "------COMMAND ERROR-------",0AH,0DH,'$' ;错误提示信息DATA ENDSMSTACK SEGMENT STACK ;堆栈用来中断处理子程序中的保护寄存器内容SA DW 20 DUP(?)TOP_STAC LABEL WORDMSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:MSTACK,ES:DATAMAIN PROC ;主程序START:MOV AX,MSTACKMOV SS,AXLEA SP,TOP_STACMOV AX,DATAMOV DS,AXMOV DX,PM ;8251初始化编程MOV AL,00HOUT DX,ALCALL DELAYOUT DX,ALCALL DELAYOUT DX,ALCALL DELAYMOV AL,40HOUT DX,ALCALL DELAYMOV AL,01111110B ;方式字,波特率系数64,8个数据位,1个停止位,偶校验OUT DX,ALCALL DELAYMOV AL,00110111B ;命令字,允许接收发送数据,清错误标志OUT DX,ALMOV DX,PME ;8253初始化编程MOV AL,00110000B ;通道0,方式0,先写低字节,后写高字节,二进制计数OUT DX,AL;8255A的初始化编程,方式0,A口输入,B口输出;MOV DX,CPMOV AL,10010000BOUT DX,ALCLI ;关中断,设置中断向量MOV AX,0000H ;替换IRQ10 的中断矢量MOV ES,AXMOV DI,IRQ_IVADDMOV AX,ES:[DI]MOV IP_BAK,AX ;保存IRQ10 原中断处理程序入口偏移地址MOV AX,OFFSET INTRADMOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址ADD DI,2MOV AX,ES:[DI]MOV CS_BAK,AX ;保存IRQ10 原中断处理程序入口段地址MOV AX,SEG INTRADMOV ES:[DI],AX ;设置当前中断处理程序入口段地址MOV DX,IRQ_OCW1 ;设置中断屏蔽寄存器,打开IRQ10 的屏蔽位IN AL,DXMOV IM_BAK,AL ;保存IRQ10 原中断屏蔽字AND AL,IRQ_IMOUT DX,ALMOV AX,DATA ;程序开始提示信息MOV DS,AXLEA DX,STARTMOV AH,9INT 21HRECEIVE_COMMAND: ;接收指令类型MOV DX,PMIN AL,DXTEST AL,02HJZ RECEIVE_COMMANDTEST AL,38HJNZ ERRORMOV DX,PDIN AL,DXMOV STATE,ALSTI ;已接收指令,开中断DISP:MOV DX,PC0 ;装入计数初值MOV AL,00HOUT DX,ALMOV AL,90HOUT DX,ALMOV CX,10 ;装入效果显示次数WAIT1:CMP CX,0JNZ WAIT1CLI ;演示结束,关中断MOV AX,DATA ;结束提示信息MOV DS,AXLEA DX,OVEMOV AH,9INT 21HMOV DX,PB ;OVER状态LED灯MOV AL,OVEROUT DX,ALJMP RECOVERERROR:MOV AX,DATAMOV DS,AXLEA DX,ERROMOV AH,9INT 21HJMP RECEIVE_COMMANDRECOVER:MOV AX,0000H ;恢复IRQ10 原中断矢量MOV ES,AXMOV DI,IRQ_IVADDMOV AX,IP_BAK ;恢复IRQ10 原中断处理程序入口偏移地址MOV ES:[DI],AXADD DI,2MOV AX,CS_BAK ;恢复IRQ10 原中断处理程序入口段地址MOV ES:[DI],AXMOV DX,IRQ_OCW1 ;恢复IRQ10 原中断屏蔽寄存器的屏蔽字MOV AL,IM_BAKOUT DX,ALMOV AH,4CHINT 21HDELAY:PUSH BXMOV BL,2D0:DEC BLJNZ D0POP BXRETMAIN ENDPINTRAD PROC NERR ;中断处理子程序PUSH AXPUSH BXPUSH DXMOV DX,PB ;DX指向8255的B口输出MOV AH,STATE ;指令类型判别CMP AH,4JZ ITURNCMP AH,5JZ IBLINKCMP AH,7JZ IFORWARDJMP EXITIFORWARD: ;FORWARD指令对应效果LEA BX,FDMOV AL,[BX+FDN]INC FDNCMP FDN,8JAE BACK_ZEROOUT1:OUT DX,ALJMP RELOADBACK_ZERO:MOV FDN,0JMP OUT1IBLINK: ;BLINK指令对应效果MOV AL,BKNOT BKOUT DX,ALJMP RELOADITURN: ;TURN指令对应效果MOV AL,TNOUT DX,ALROL TN,1RELOAD: ;重装计数初值,以触发下次中断MOV DX,PC0MOV AL,00HOUT DX,ALMOV AL,90HOUT DX,ALDEC CX ;演示次数减1EXIT:MOV DX,IRQ_OCW2 ;向8259发中断结束命令,清除相应ISR置位MOV AL,20HOUT DX,ALMOV AL,20HOUT 20H,ALPOP DXPOP BXPOP AXIRETINTRAD ENDPCODE ENDSEND START实验结论及心得体会通过本次实验,我们进一步掌握了8251、8253、8255、8259这几种芯片的应用,对于硬件实验中程序的编写更加熟练了。

相关主题