(仅供参考)微机原理实验三
微机原理实验报告册(3篇)

第1篇一、实验目的1. 理解和掌握微机的基本组成和工作原理;2. 熟悉微机硬件设备和实验仪器的使用方法;3. 提高动手实践能力,培养解决实际问题的能力;4. 深入理解微机原理课程内容,为后续课程学习奠定基础。
二、实验内容1. 微机系统认识实验2. 微机硬件组成实验3. 微机指令系统实验4. 微机寻址方式实验5. 微机程序设计实验6. 微机接口技术实验三、实验仪器与设备1. 微机原理实验箱2. 示波器3. 数字万用表4. 计算机一台5. 实验指导书四、实验步骤与内容1. 微机系统认识实验(1)观察实验箱的结构,了解各个模块的功能;(2)熟悉实验箱的电源、复位、运行等按钮的使用方法;(3)学习微机系统的工作流程,包括加电、复位、启动等过程;(4)观察微机系统启动后的运行状态,了解各个模块的协同工作。
2. 微机硬件组成实验(1)观察实验箱的CPU、内存、I/O接口等硬件模块;(2)学习CPU的内部结构,包括寄存器、控制单元、运算单元等;(3)学习内存的存储原理,了解ROM、RAM等存储器的特点;(4)学习I/O接口的工作原理,了解中断、DMA等传输方式。
3. 微机指令系统实验(1)学习微机指令系统的基本格式,包括操作码、地址码等;(2)掌握微机指令系统的寻址方式,包括立即寻址、直接寻址、间接寻址等;(3)编写简单的汇编语言程序,实现加、减、乘、除等运算;(4)学习微机中断处理过程,了解中断向量表、中断服务程序等概念。
4. 微机寻址方式实验(1)学习微机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等;(2)编写程序,实现不同寻址方式下的数据访问;(3)观察不同寻址方式对程序执行速度的影响。
5. 微机程序设计实验(1)学习汇编语言程序设计的基本方法,包括数据定义、指令编写、程序结构等;(2)编写简单的程序,实现数据交换、排序等操作;(3)学习微机程序的调试方法,包括单步执行、断点设置等。
6. 微机接口技术实验(1)学习微机接口技术的基本概念,包括并行接口、串行接口等;(2)观察实验箱中的并行接口、串行接口等模块,了解其工作原理;(3)编写程序,实现数据在并行接口、串行接口之间的传输;(4)学习微机中断处理在接口技术中的应用。
微机原理第三次实验报告

实验三DOS中断调用实验实验报告健行理工1402班陈丽红 201424450202一、实验目的掌握字符和数据的显示方法。
二、实验内容先显示信息“INPUTSTRING,THE END FLAG IS $”再接收字符。
如为0-9,则计数器加1,并显示计数,如为非数字,则直接显示,但不计数。
三、程序框图开始段寄存器和堆栈段初始化数字字符计数器清0回车换行显示提示信息接收键入字符并显示是$字符调用QUI,返回DOS结束是回车键是0-9计数器BX加1,保存计数器的值后将其转化为ASCII码回车换行显示计数结果回车换行调用DISP,显示字符YNYYNN四、程序说明本次实验重点在于了解中断调用的步骤:(1)准备入口参数;(2)功能号送AH;(3)执行INT n命令,熟练掌握向量号21H的部分常用功能调用。
程序设计时通过对输入的字符进行判断,根据判断结果进入不同的子程序段运行,显示运行结果。
五、源程序清单与执行结果5.1 源程序清单DATA SEGMENT ;定义数据段,DATA为D1 DB 'INPUTSTRING, THE LAST FLAG IS', 0DH, 0AH,'$' 段名,将信息存放在D2 DB 0DH, 0AH, '$' D1,D2中DATA ENDSSTACK SEGMENT STACK ;定义堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;说明代码段、数据段、堆栈段 ASSUME CS:CODE,DS:DATA,SS:STACKBG: MOV AX,DATAMOV DS, AX ;给DS赋段值MOV BX, 0 ;数字字符计数器BX清0JMP L1 ;跳转至L1QUI: MOV AH,4CH ;返回DOSINT 21HDISP: MOV DX,OFFSET D2 ;输出回车换行MOV AH,9HINT 21HMOV AH,2H ;显示AL中的字符内容MOV DL,ALINT 21HL1: MOV DX,OFFSET D2 ;输出回车换行MOV AH,9HINT 21HMOV DX,OFFSET D1 ;输出“INPUTSTRING,THE END FLAG IS” MOV AH,9HINT 21HMOV AH,1H ;键盘输入并显示INT 21HCMP AL,'$' ;判断输入字符是否为'$'JE QUI ;是则调用QUI,返回DOSCMP AL,0DH ;判断输入字符是否为回车,是则输出 JNE L2 回车换行,进入下一次L1循环,不是MOV DX,OFFSET D2 则跳转至L2MOV AH,9HINT 21HJMP L1L2: CMP AL,'9' ;判断输入字符是否为0-9,是则计数 JA DISP 器BX加1,不是则跳转至DISPCMP AL,'0'JB DISPINC BXPUSH BX ;将BX的内容压入堆栈,保存ADD BX,30H ;将BX中的数值转化为ASCII码MOV DX,OFFSET D2 ;输出换行MOV AH,9HINT 21HMOV AH,2H ;显示计数MOV DL,BLINT 21HPOP BX ;弹出BX的内容JMP L1CODE ENDSEND BG5.2 执行结果截图(1)接收字符为0-9,计数器加1,并显示计数。
微机原理实验三实验报告

实验3. 循环程序设计一、实验目的⒈掌握移位指令的使用方法。
⒉学会循环结构程序的编程方法。
⒊利用DEBUG调试程序查看循环程序循环过程中CS和IP的变化情况。
二、实验要求⒈编写程序并上机调试,记录运行结果。
⒉用DEBUG调试程序调试所编程序,查看并记录每条指令内存单元地址及执行结果(包括F标志寄存各位值。
)⒊注意观察并记录每条指令执行后CS和IP寄存器值变化情况,以加深对循环程序的概念的理解。
三、实验内容⒉编写统计15个学生数学学习成绩程序。
要求:分别统计出低于60分,60-69分,70-79分,80-89分,90-100分的人数,并存放到S5,S6,S7,S8,S9,S10对应内存单元中。
源程序代码;DATA SEGMENTDATA1 DB 55,60,65,88,67,70,75,80,77,85,90,66,95,53,100DATA2 DB 5 DUP(?)DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,15LEA SI,DATA1LEA DI,DATA2AGAIN:MOV AL,[SI]CMP AL,90JB NEXT1INC BYTE PTR[DI]JMP NEXT0NEXT1:CMP AL,80JB NEXT2INC BYTE PTR[DI+1]JMP NEXT0NEXT2:CMP AL,70JB NEXT3INC BYTE PTR[DI+2]JMP NEXT0NEXT3:CMP AL,60JB NEXT4INC BYTE PTR[DI+3]JMP NEXT0NEXT4:INC BYTE PTR[DI+4]NEXT0:INC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START程序运行结果截图:四、实验总结本次实验掌握移位指令的使用方法。
微机原理实验报告参考

实验一汇编语言程序上机过程练习1.实验目的掌握汇编语言程序上机的步骤,掌握汇编语言程序编辑、汇编、连接、运行、调试的方法。
2.实验内容:输入老师提供的汇编语言源程序,完成汇编、连接、运行、调试过程。
3.实验步骤:(1)、上机环境的准备在资源管理器中,在d盘上新建自己的文件夹zhangsan(备注:请把zhangsan替换成你自己的文件夹名,用英文字母命名,并且名字长度不超过8个字符)。
把机器上的masm.exe和link.exe等文件拷到该文件夹内。
(2)、上机过程①切换工作路径:打开命令提示符窗口、转到d盘、切换我的文件夹为当前路径②把老师提供的源程序用记事本(或者EDIT)输入到机器内,保存为扩展名为.asm的文本文件。
③用汇编程序MASM对源程序进行汇编,如果源程序有错误则修改,直到汇编通过,生成扩展名为OBJ的二进制的目标文件。
④用连接程序LINK对上面生成的二进制目标文件进行连接,有错误则修改源程序,重新进行汇编、连接,直到连接成功生成扩展名为EXE的可执行文件。
⑤在DOS提示符下运行可执行文件。
屏幕上显示“Hello Word!”⑥用DEBUG对可执行文件进行调试。
4.附源程序:DATA SEGMENTMSG DB 'HELLO WORLD!$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DX,MSGMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验二汇编语言程序设计练习1.实验目的(1)掌握汇编语言程序设计的基本步骤,分析问题,确立算法,画出程序流程图。
说明流程图中各功能的含义和表示法。
分配工作单元和存储空间。
根据程序算法流程选择合适的指令编制汇编语言源程序。
(2)掌握顺序程序的设计基本方法和技巧。
(3)掌握分支程序设计的方法,重点掌握各种分支程序中形成和判断条件而产生的程序段的设计方法和技巧。
微机原理与接口技术实验报告参考

微机原理与接口技术实验报告实验一显示程序实验一、实验目的1. 掌握在PC机上以十六进制形式显示数据的方法;2. 掌握部分DOS功能调用使用方法;3. 熟悉Tddebug调试环境和Turbo Debugger的使用。
二、实验所用设备1. PC微机一台。
三、实验内容一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT 21H)。
(1) 显示单个字符输出入口:AH=02H调用参数:DL=t出字符(2) 显示字符串入口:AH=09H调用参数:DS:DX串地址,’$'为结束字符(3) 键盘输入并回显入口:AH=01H返回参数:AL=t出字符(4) 返回DO系统入口:AH=4CH调用参数:AL=M回码四、实验步骤1. 运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;2. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;3. 使用Rmrun菜单中的Run,运行程序,观察运行结果;4. 使用Rmrun菜单中的Debug调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;5. 更改数据区中的数据,考察程序的正确性。
图1-1显示程序实验流程图五、程序清单DATA SEGMENTMES DB 'laoshihao:', 0AH,0DH,'$' SD DB 'b'DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET MESMOV AH, 09HINT21HMOV DI, OFFSET SDMOV AL, DS:[DI]AND AL, 0F0HSHR AL,4CMP AL, 0AHJB L1ADD AL, 07HL1: ADD AL, 30HMOV DL, ALMOV AH, 02HINT21HMOV AL, DS:[DI]AND AL, 0FHCMP AL, 0AHJB L2ADD AL, 07HL2: ADD AL, 30HMOV DL, ALMOV AH, 02HINT21HMOV AX, 4C00HINT21HCODE ENDSEND START六、实验调试过程调试过程中出现警告,显示没有使用堆栈段。
微机原理实验报告

微机原理实验报告实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加, 要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1.DATA2为首的5个内存单元中(低位在前), 结果送回DATA1处。
三、程序框图图3-1四、参考程序清单程序名: XIANGJ.ASMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END EQU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?) DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC N EARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP A D2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30H DEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五: 结果分析这次试验依次将相加数和被相加数存入AL, BL, 依次从低位向高位相加, 然后把结果放在内存中, 根据程序走向, 相加的结果依次放在内存地址DS:0000到DS:0004的位置上, 和我们实验预期结果一样。
微机原理实验报告

微机原理实验报告微机原理与接口技术实验报告学院:信息工程学院班级:学号:姓名:实验一:系统认识实验1 实验目的:掌握TD-PITE 80X86 微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
2 实验设备:PC机一台,TD-PITE 实验装置一套。
3 实验内容:编写实验程序,将00H~0FH 共16 个数写入内存3000H 开始的连续16 个存储单元中。
4 实验步骤:1. 运行Wmd86 软件,进入Wmd86 集成开发环境。
2. 环境调试,“设置”选项中选择汇编语言。
语言环境选择界面3. 新建文档,编写程序,程序如下:SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000HMOV CX, 16AA1: MOV [SI], ALINC SIINC ALLOOP AA1AA2: JMP AA2CODE ENDSEND START4. 编译连接,程序无误下载:信息界面5. 连接PC与实验系统的通讯电缆,打开实验系统电源。
6. 下载程序,查看内存3000H 开始的连续16 个存储单元中的内容,显示如下:8.由于该内存段原始数据与实验数据相同,便于区分观察,将该内存段初始化,然后查看:9.点击运行程序,在此查看该段内存:10.设置断点,执行程序:5 操作练习编写程序,将内存3500H 单元开始的8 个数据复制到3600H 单元开始的数据区中。
通过调试验证程序功能,使用E命令修改3500H 单元开始的数据,运行程序后使用D命令查看3600H 单元开始的数据。
1、编写程序如下:SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3500HMOV DI, 3600HMOV CX, 8AA1: MOV AL, [SI]MOV [DI], ALINC SIINC DILOOP AA1AA2: JMP AA2CODE ENDSEND START2、执行过程如上,内存变化如下:程序执行前程序执行后实验二:数制转换实验1、实验目的1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解;2. 熟悉程序调试的方法。
微机原理实验报告三

微型计算机原理与接口技术实验报告一、实验内容实验3 分支结构程序设计实验题目编程实现三分支的符号函数;编程实现将正数N 插入由正数组成的数组ARY 中。
内容提要掌握分支程序的设计,观察通用寄存器、标志寄存器的变化、监测分支点。
二、实验的源代码(.asm文件内容)第一部分——编程实现三分支的符号函数程序如下:DATAS SEGMENTX DB-3Y DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV AL,XCMP AL,0JGE BIGERMOV AL,0FFHMOV Y,ALJMP NEXTBIGER:JE EQULMOV AL,1MOV Y,ALJMP NEXTEQUL:MOV Y,ALNEXT: MOV AH,4CHINT 21HCODES ENDSEND START第二部分:编程实现将正数N 插入由正数组成的数组ARY中程序如下:DATAS SEGMENTX DW?ARY_HEAD DW 2,6,8,13,21,47,53,66,90ARY_END DW 125N DW 18DATAS ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATAS START: PUSH DSXOR AX,AXPUSH AXMOV AX,DATASMOV DS,AXMOV AX,NMOV ARY_HEAD-2,0FFFFHMOV SI,0 COMPARE:CMP ARY_END[SI],AXJLE INSERTMOV BX,ARY_END[SI]MOV ARY_END[SI+2],BXSUB SI,2JMP SHORT COMPARE INSERT: MOV ARY_END[SI+2],AX RETMAIN ENDPCODE ENDSEND START三、实验的(显示)结果Press any key to continue第一部分CV调试结果如下:第二部分CV调试结果如下:四、实验(调试)心得第一部分:调试中出现的问题及解决办法:本来程序中使用的返回DOS的方法是使用程序结束中断INT 20H 指令,但不能正确运行,可能是计算机也可能是软件的问题,然后又修改程序,改使用INT 21H 的4CH号功能调用,这样修改完成后程序便可以正确运行了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三使用8251A的串行接口应用实验一、实验目的1) 掌握串行通信原理及半双工和全双工的编程方法。
2) 掌握用8251A 接口芯片实现微机间的同步和异步通信。
3) 掌握8251A 芯片与微机的接口技术和编程方法。
二、实验原理和内容8251A 是一种可编程的同步/异步串行通信接口芯片,具有独立的接收器和发送器,能实现单工、半双工、双工通信。
1)8251A 内部结构8251A 通过引脚D0~D7 和系统数据总线直接接口,用于和CPU 传递命令、数据、状态信息。
读写控制逻辑用来接收CPU 的控制信号、控制数据传送方向。
CPU 对8251A 的读写操作控制表如表3-4 所示。
方式控制字确定8251A 的通信方式(同步/异步)、校验方式(奇校/偶校/不校)、字符长度及波特率等,格式如图3-10 所示。
命令控制字使8251A 处于规定的状态以准备收发数据,格式如图3-11 所示。
方式控制字和命令控制字无独立的端口地址,8251A 根据写入的次序来区分。
CPU 对8251A 初始化时先写方式控制字,后写命令控制字3)状态寄存器8251 状态寄存器用于寄存8251A 的状态信息,供CPU 查询,定义如图3-12 所示。
TXRDY位:当数据缓冲器空时置位,而TXRDY引脚只有当条件( 数据缓冲器空•/CTS•TXE)成立时才置位。
溢出错误:CPU 没读走前一个字符,下一个字符又接收到,称为溢出错误。
帧错误:在字符结尾没检测到停止位,称为帧错误。
4)PC 机寄存器的端口地址其中:线路控制寄存器第七位:DLAB=0;线路控制寄存器第七位:DLAB=1。
5)波特率和除数因子对照表232标准的机械、电气规范。
6)实验连接方法按图连接好电路,其中8254 计数器用于产生8251 的发送和接收时钟,TXD 和RXD 连在一起。
1) 8254/CLK0 连接时钟/1MHz;2) 8254/CS 连接I/O 译码/Y0(280H---287H);3) 8254/OUT0 连接8251/TX/RXCLK;4) 8254/GATE0 连接+5V;5) 8251/TXD 连接8251/RXD;6) 8251/CS 连接I/O 译码/Y7(2B8H---2BFH。
7)编程提示8251 的控制口地址为2B9H,数据口地址为2B8H。
8254 计数器的计数初值=时钟频率/(波特率X 波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子16,则计数器初值52。
基于8251 芯片实现异步串行通信一般有两种方式,一种是查询方式,另一种是中断方式,使用哪种方式取决于进行初始化时寄存器的设置。
8254 计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
本实验采用8251A 异步方式发送,利用8086 汇编语言实验计算机点到点的串口通信,设置:波特率为1200bps、数据位7 位、停止位1 位、偶校验方式,利用查询方式或中断方式实现双机通信,能够传输多个字符。
三、实验流程图四、实验代码(1)收发字符data segmentio8254a equ 280hio8254b equ 283hio8251a equ 2b8hio8251b equ 2b9hmes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8254b ;设置8254计数器0工作方式mov al,16hout dx,almov dx,io8254amov al,52 ;给8254计数器0送初值out dx,almov dx,io8251b ;初始化8251xor al,almov cx,03 ;向8251控制端口送3个0delay: call out1loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ; 1个停止位,8个数据位,波特率因子为16call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz waitimov ah,01 ;是,从键盘上读一字符int 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251aout dx,al ;发送mov cx,40hs51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz next ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,alpush cxmov cx,40hgg: loop gg ;延时pop cxretout1 endpcode endsend start(2)收发文件DATA SEGMENTFILE1 DB 'C:\1.txt',0FCODE1 DW 0BUF1 DB 2000H DUP(0)FILE2 DB 'C:\2.txt',0FCODE2 DW 0BUF2 DB 2000H DUP(0)IO8254A EQU280HIO8254B EQU 283HIO8251A EQU 2b8HIO8251B EQU 2b9HDATA ENDSSTACK SEGMENT PARA STACKDB 256 DUP(0)CODE SEGMENTASSUME CS: CODE,DS:DATA,SS:STACKSTART:MOV A X,DATAMOV D S,AXMOV AL,16hOUT DX,ALMOV DX,IO8254BMOV AL,52 ;给8254计数器0送初值OUT DX,ALMOV DX,IO8251B ;初始化8251XOR AL,ALMOV CX,03 ;向8251控制端口送3个0MOV DX,IO8251B ;传输线路控制寄存器LCR,最高位为DLAB=1MOV AX,80HOUT DX,ALMOV DX,IO8251B ; DLAB=1,除数锁存器(低字节)DLLMOV AX,60HOUT DX,ALMOV DX,IO8251B ;DLAB=1,除数锁存器(高字节)DLHMOV AX,0OUT DX,AL ;高字节DLH:00H,低字节:60H,设置波特率为1200MOV DX,IO8251B ;传输线路控制寄存器LCR,最高位为DLAB=0MOV AX,0AH ;DLAB=0,0=禁止中断,0=无附加奇偶标志位,0=奇校验,1=有奇偶校验,;0=1位停止位,10=7位OUT DX,ALMOV DX,IO8251B;MOV AX,03H;正常工作状态,rts引脚为低电平,DTR引脚低电平OUT DX,ALMOV DX,IO8251B ;DLAB =0,禁止中断MOV AX,0OUT DX,ALMOV AH,3CH ;文件新建LEA DX,FILE2MOV CX,0INT 21HMOV AH,3DH ;文件操作LEA DX,FILE2MOV AL,2INT 21HMOV FCODE2,AXMOV AH,3DH ;文件操作LEA DX,FILE1INT 21HMOV FCODE1,AXMOV SI,0MOV DI,0FOREVER:MOV DX,IO8251B ;从线路状态寄存器读状态IN AL,DXTEST AL,1EH ;检测是否为00011110,即BI=1,检测中断,FE=1,帧错,PE=1,奇偶错,OE=1,溢出错JNZ ERROR ;传输线状态寄存器全部都是0TEST AL,01H ;检测接受数据是否准备好了JNZ RECEIVE ;等于0则表示数据没有准备好TEST AL,20H ;数据没有准备好JNZ send ;没有,则跳转等待JMP FOREVERsend:MOV AH,3FH ;从文件中读取发送LEA DX,BUF1ADD DX,SIMOV BX,FCODE1MOV CX,1INT 21HCMP AX,0JE FOREVERMOV DX,IO8251AMOV AL,BUF1[SI]OUT DX,ALINC SIJMP FOREVERRECEIVE:MOV DX,IO8251A ;接收数据IN AL,DXAND AL,7FH ;最高位为停止位CMP AL,03H;JNZ CHARJMP DONECHAR:MOV DL,ALMOV AH,02HINT 21HCMP AL,0DHJNZ SAVE_FILEMOV DL,0AHINT 21HSAVE_FILE:MOV BUF2[DI],DLMOV AH,40H ;接收到的字符写入文件LEA DX,BUF2ADD DX,DIMOV BX,FCODE2MOV CX,1INT 21HINC DIJMP FOREVERERROR:MOV DX,IO8251AIN AL,DXMOV DL,0AHMOV AH,02HINT 21HJMP FOREVERDONE:MOV BX,FCODE1MOV AH,3EHINT 21HMOV BX,FCODE2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START五、实验结果(1)收发字符(2)收发文件六、实验心得通过本次实验,与课本知识相结合,我学会了串行通信及半双工和全双工的编程方法。
和组员一起编写代码让我对8251A芯片与微机接口的编程方法有了更清楚的认识,通过编写代码加深了课本中控制字、命令字等的认知,灵活应用,不再局限于课本的死记硬背。
通过对硬件电路的连接也让我对各个芯片之间的联系有了更深刻的认识。