微机原理实验四实验报告

合集下载

微机原理实验报告册(3篇)

微机原理实验报告册(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)学习微机中断处理在接口技术中的应用。

微机原理实验四实验报告

微机原理实验四实验报告

实验报告实验四 8251可编程串行口与PC机通信实验一、实验要求利用实验箱内的8251A芯片,实现与PC机的通信。

二、实验目的1.掌握8251A芯片结构和编程方法;2.了解实现串行通信的硬件环境,数据格式和数据交换协议;3.了解PC机通信的基本要求。

三、实验原理(一)8251A芯片工作方式配置:1. 8个数据位;2.无奇偶校验位;3.1个停止位;4.波特率因子设为16;5. 波特率设为9600。

(二)8251A主要寄存器说明图4-1 模式字图4-2 命令字CO MMAN D I NSTR UCT ION FO RMA T图4-3 状态字(三)8251编程对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。

(1)方式控制字方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。

图4-4 方式控制字说明(2)命令控制字命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。

图4-5 所示的是8251 命令控制字各位的定义。

图4-5命令控制字说明(3)状态字CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如图4-6所示。

图4-6 状态字说明四、实验电路连接:1.CS8251接228H,CS8279已固定接至238H;2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。

注意:RS232通信口必须在设备断电状态下插拔!图4-7 连线图五、实验内容及要求1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。

使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。

将结果截图保存,贴入实验报告。

微机原理实验报告4

微机原理实验报告4

实验报告课程名称:《微机原理》实验第 3次实验实验名称:宏命令与子程序的区别实验时间: 2015 年 10 月 13 日实验地点: XXXXXX组号__________学号: XXXX姓名: XXX指导老师: XX评定成绩:___________微机原理实验4南京大学工程管理学院一、实验设备:计算机二、实验用时:4小时三、实验内容:1.单步运行实例函数 NO3_Mpy_8 ,了解单字节无符号数乘法的实现方法。

2.编写子程序 Mpy_16 ,实现双字节无符号数乘法。

自行定义变量,其中:ACCALO ; 存放乘数低8 位ACCAHI ; 存放乘数高8 位ACCBLO ; 存放被乘数低 8 位和乘积第16~ 23位ACCBHI ; 存放被乘数高8 位和乘积第24~31位ACCCLO ; 存放乘积第0~7位ACCCHI ; 存放乘积第8~ 15位编写 Main 主程序,使用乘数0x4015 和被乘数 0x3321 对编写的子程序进行测试,结果应为0x0CCC71B5。

3.编写宏命令 Mpy_16 ,实现单字节无符号数乘法。

编写 Main 主程序调用宏命令并对运算结果进行测试。

4.使用反汇编工具 Disassembly Listing 单步运行程序,观察子程序与宏命令的差异。

四、实验报告要求:1.程序框图和源程序清单。

2.分析宏扩展过程,说明宏与子程序的差别。

五、实验结果:1、程序框图(1)子程序 Mpy_16子程序调用初始化循环计数器TEMP将乘数 ACCBHI 、ACCBLO 复制到 MDHI 、MDLO中ACCBHI 、 ACCBLO 、ACCCHI 、 ACCCLO 清零MDHI 、 MDLO 算数右移一位,最低位进入CC=1?否是ACCAHI 、 ACCBHI 、ACCALO 、 ACCBLO 分别相加,结果放入ACCBHI 、 ACCBLO 中ACCCHI 、 ACCCLO 带进位位右移,最低位放入CACCBHI 、 ACCBLO 带进位位右移,最低位放入C中中TEMP=TEMP-1否TEMP=0?是子程序返回(2)宏命令 Mpy_16开始初始化循环计数器TEMP将乘数 ACCBHI 、ACCBLO 复制到 MDHI 、MDLO中ACCBHI 、 ACCBLO 、ACCCHI 、 ACCCLO 清零MDHI 、 MDLO 算数右移一位,最低位进入CC=1?否是ACCAHI 、 ACCBHI 、ACCALO 、 ACCBLO 分别相加,结果放入ACCBHI 、 ACCBLO 中ACCCHI ACCBHI 、 ACCCLO 、ACCBLO带进位位右移,最低位放入带进位位右移,最低位放入中中CC TEMP=TEMP-1否TEMP=0?是结束2、源程序清单(1)子程序 Mpy_16list p=16f877A; list directive to define processor#include <p16f877A.inc> ;processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFACCALO EQU0x20 ;存放加数低 8 位ACCAHI EQU0x21 ;存放加数高8 位ACCBLO EQU0x22 ;存放被加数低8 位ACCBHI EQU0x23 ;存放被加数高 8 位ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU0x28 ;临时寄存器;双字节加法子程序,入口地址 ACCB+ ACCA,出口地址 ACCORG0x0000;复位入口地址nop;兼容ICD调试工具,必须加nopgoto Main;跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;CALL MPY_16;NOP;GOTO $;ORG 0x0100MPY_16CALL SETUP;MLOOPBCF STATUS, C;清进位位RRF MDHI; MD右移RRF MDLO;BTFSC STATUS, C;判断是否需要相加CALL Add_16;加乘数至MB RRF ACCBHI;右移部分乘积RRF RRF RRF ACCBLO; ACCCHI; ACCCLO;DECFSZ GOTO RETURN TEMPMLOOP;;;乘法完成否?否,继续求乘积子程序返回SETUPMOVLW.16;初始化TEMP 寄存器MOVWF TEMPMOVF ACCBLO, W;乘数送MDMOVWF MDLO;MOVF ACCBHI,W;MOVWF MDHI;CLRF ACCBLO;清MBCLRF ACCBHI;CLRF ACCCLO;清MCCLRF ACCCHI;RETURN;子程序返回Add_16MOVF ACCALO, w ;ACCB和ACCA低半字节相加ADDWF ACCBLO , f ;BTFSC STATUS, C;有进位否?INCF ACCBHI;有,ACCB高字节加1,再加ACCAHIMOVF ADDWF ACCAHI, wACCBHI, f; ACCA;、ACCB高半字节相加RETURN;子程序返回END;(2)宏命令 Mpy_16list p=16f877A; list directive to define processor#include <p16f877A.inc> ;processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFMPY_16macro ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1;SETUPACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1;MLOOPBCF STATUS, C;清进位位RRF MDHI1; MD右移RRF MDLO1;BTFSS STATUS, C;判断是否需要相加GOTO LOOP;Add_16ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1;加乘数至MBLOOPRRF ACCBHI1;右移部分乘积RRF ACCBLO1;RRF ACCCHI1;RRF ACCCLO1;DECFSZ TEMP1;乘法完成否?GOTO MLOOP;否,继续求乘积ENDM;子程序返回SETUP macroACCALO2,ACCAHI2,ACCBLO2,ACCBHI2,ACCCLO2,ACCCHI2,MDHI2,MDLO2 ,TEMP2;MOVLW .16;初始化TEMP寄存器MOVWF TEMP2MOVF ACCBLO2, W;乘数送MDMOVWF MDLO2;MOVF ACCBHI2,W;MOVWF MDHI2;CLRF ACCBLO2;清MBCLRF ACCBHI2;CLRF ACCCLO2;清MCCLRF ACCCHI2;ENDM;子程序返回Add_16 macroACCALO3,ACCAHI3,ACCBLO3,ACCBHI3,ACCCLO3,ACCCHI3,MDHI3,MDLO3 ,TEMP3;MOVF ADDWF ACCALO3, w ;ACCBACCBLO3 , f ;和 ACCA低半字节相加BTFSC STATUS, C;有进位否?INCF ACCBHI3;有,ACCB高字节加1,再加ACCAHIMOVF ADDWF ACCAHI3, w; ACCAACCBHI3, f ;、ACCB高半字节相加ENDM;子程序返回ACCALO EQU0x20 ;存放加数低 8 位ACCAHI EQU0x21 ;存放加数高 8 位ACCBLO EQU0x22 ;存放被加数低8 位ACCBHI EQU0x23 ;存放被加数高8 位ACCCLO EQU0x24;ACCCHI EQU0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器;双字节加法子程序,入口地址 ACCB+ ACCA,出口地址 ACC ORG0x0000;复位入口地址nop;兼容ICD 调试工具,必须加nop goto Main;跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;MPY_16ACCALO,ACCAHI,ACCBLO,ACCBHI,ACCCLO,ACCCHI,MDHI,MDLO,TEMP; NOP;GOTO $;END;3、程序运行结果截图(1)子程序 Mpy_16子程序运行结果(2)宏命令 Mpy_16宏指令运行结果4、分析宏扩展过程,说明宏与子程序的差别(1)子程序 Mpy_16 的反汇编结果子程序的反汇编代码1子程序的反汇编代码2(2)宏命令 Mpy_16 的反汇编结果00000000NOP00012802GOTO 0x200023015MOVLW 0x15000300A0MOVWF 0x2000043040MOVLW 0x40000500A1MOVWF 0x2100063021MOVLW 0x21000700A2MOVWF 0x2200083033MOVLW 0x33000900A3MOVWF 0x23000A3010MOVLW 0x10000B00A8MOVWF 0x28000C0822MOVF 0x22, W000D00A6MOVWF 0x26000E0823MOVF 0x23, W000F00A7MOVWF 0x27001001A2CLRF 0x22001101A3CLRF 0x23001201A4CLRF 0x24001301A5CLRF 0x2500141003BCF 0x3, 000150CA7RRF 0x27, F00160CA6RRF 0x26, F00171C03BTFSS 0x3, 00018281F GOTO 0x1f00190820MOVF 0x20, W001A07A2ADDWF 0x22, F001B1803BTFSC 0x3, 0001C0AA3INCF 0x23, F001D0821MOVF 0x21, W001E07A3ADDWF 0x23, F001F0CA3RRF 0x23, F00200CA2RRF 0x22, F00210CA5RRF 0x25, F00220CA4RRF 0x24, F00230BA8DECFSZ 0x28, F00242814GOTO 0x1400250000NOP00262826GOTO 0x2620072394CALL 0x394(3)宏扩展过程宏扩展只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能。

微机原理实验报告

微机原理实验报告

微机原理实验报告概述:微机原理是计算机科学与技术专业中的一门重要课程,通过实验学习,可以加深对计算机内部运行原理的理解,提高软硬件的开发和调试能力。

本实验报告将介绍我对微机原理实验的学习和思考。

实验一:二进制转换实验在这个实验中,我首先了解了二进制数的概念以及其和十进制数的转换方法。

通过实际操作,我加深了对计算机内部数据表示方式的理解。

这对于后续学习计算机系统结构和编程语言至关重要。

实验二:逻辑门电路实验逻辑门电路是计算机硬件的基础组成部分,通过实验,我学会了使用逻辑门芯片构建各种逻辑电路,并能够通过真值表分析和验证逻辑电路的正确性。

这对于理解计算机内部的数据处理和控制逻辑有着直接的帮助。

实验三:运算器设计实验在这个实验中,我通过学习和设计算术逻辑单元(ALU),了解了计算机的算术操作过程,并能够通过运算器实现基本算术运算。

这对于理解计算机内部数据的处理和计算机指令的执行有着重要的意义。

实验四:存储器与外设实验存储器是计算机系统的重要组成部分,通过实验,我深入了解了存储器的类型、组织结构和访问方式,并通过外设与存储器的交互,实践了计算机系统的输入和输出过程。

实验五:微处理器实验微处理器是计算机系统中最核心的部件,通过实验,我学习了微处理器的基本运行原理,能够通过汇编语言编写程序,并通过微处理器执行程序实现特定的功能。

这个实验为我今后学习计算机体系结构和操作系统打下了坚实的基础。

实验总结:通过这几个实验,我深入了解了微机原理课程的实践内容和相关知识。

实验的过程中,我不仅学会了使用仪器设备和工具,还培养了自己的动手能力和团队合作精神。

通过不断的实践,我对计算机内部结构和运行原理有了更深刻的理解,也提高了我的问题解决能力和创新思维。

未来展望:微机原理实验的学习只是计算机科学与技术专业中的一小部分。

我希望在今后的学习过程中能加深对计算机体系结构、操作系统、编程语言等方面的学习,并不断深入钻研,成为一名优秀的计算机科学与技术专业人才。

微机原理与应用第四次实验报告

微机原理与应用第四次实验报告

微机原理与应用第四次实验报告实验6 汇编语言程序结构一、实验目的1.掌握汇编语言项目上机过程2.掌握汇编语言程序结构和常用伪操作3.掌握汇编语言程序设计和调试方法4.掌握MSP430F1xx基本I/O控制方法二、实验任务1.学习汇编指示性语句(可在simulator下完成)在EWH8下新建项目Lab_6,编写下面程序L6_directives.s43(程序清单见后页,该程序只是为了学习指示性语句,程序本身并没有实现什么特定功能),利用project/remove移出模板文件test_asm.s43,点击project/add/files将L6_directives.s43添加到项目中。

1) 利用EW430下的view/memory查看DATA16_C段中定义的存储单元内容和地址,在memory/go的窗口内输入存储单元的符号(如number1)即可查看到该符号对应的存储单元地址和内容,注意在L6_directives.s43程序中使用这些存储单元的内容和地址的方法;利用view/disassembly反汇编程序,对比源程序,利用每条指令后的注释,学习其中用到的指示性操作,如:#define、SFB、SFE、SIZEOF、$等,并能在今后的程序设计中使用。

2) 在L6_directives.s43中,number4和number1分别被定义成了什么?二者有何不同?#number4和#number1这两个操作有何不同?MOV #number4, R7和MOV number4, R7执行的结果会相同吗?为什么?3) 如图6-1所示,点击项目中的msp430x14x.h文件,了解该文件中用到的指示性语句,今后的实验中会用到该文件中的定义。

答2.编程控制实验板上发光二级管按下面4种规律循环显示1) 8个LED灯顺时针一个一个单独点亮,每次只有一个灯亮,其他灯灭;2) 4个奇数号LED灯和4个偶数号LED灯交替点亮各一次;3) 8个LED灯两两点亮,顺序为LED1和8,LED2和7,LED3和6,LED4和5,每次只有两个灯亮,其他灯灭;4) 8个LED灯全亮,全灭注意:在灯的状态变化中,需留一定延时,以便视觉能感受到灯的亮灭,要求编写一延时子程,需要延时的地方,用CALL指令调用该子程。

微机原理实验报告

微机原理实验报告

软件实验四:统计显示输入的各类字符实验内容从键盘键入字母数字串,统计各类字符个数并以十进制形式在显示器上显示出来。

显示格式要求1、在显示器上显示提示信息:Pleace input any digital and letter string2、在显示器上显示The string you inputed is:XXXXXXXXXX3、在显示器上分行显示十进制统计结果The Nembers of Digital is:XXThe Nembers of Capital Letters is:XXThe Nembers of Small Letters is:XX4、在显示器上显示提示信息Are you continue?(Y/N)按Y继续1~3的统计显示过程,按N或其它字符均退出统计返回DOS。

这里建议:不区分输入Y或N的大小写,均为有效。

程序要求:1、提示字符串的显示功能用宏指令INOUT实现2、回车换行用CRLF宏指令实现3、单个字符输入用INPUT宏指令实现4、分类统计功能由子程序TONGJI实现5、二进制转十进制并显示功能由子程序BTOD 实现流程图:统计等过程与前面的实验相同,总的流程图及二、十进制的数转化流程图如下:实验程序:CRLF MACRO ;回车宏定义MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HENDMINOUT MACRO ADDRESS ;字符串显示的宏定义LEA DX,ADDRESSMOV AH,9INT 21HENDMOUTPUT MACRO ;字符显示的宏定义MOV DL,LABMOV AH,2INT 21HENDMINPUT MACRO ;单个字符输入的宏定义MOV AH,1INT 21HENDMDATA SEGMENT ;数据段定义常用的字符和存储单元SHUZI DB 0DAXIE DB 0XIAOXIE DB 0BUFSIZE DB 50 ;为键入的字符串定义存储地址ACTCHAR DB ? ;统计输入字符串的字符个数CHARTEXT DB 50 DUP(?)DB '$'MESG1 DB 'The Nubers of Digital is:$' ;常用的几个字符串MESG2 DB 'The Nubers of Capital Letters is:$'MESG3 DB 'The Nubers of Small Letters is:$'TISHIYU1 DB 'Please input any digital and letter string!$'SHUCHU DB 'The string you input is:$'TISHIYU2 DB 'Are you continue?(Y/N)$'LAB DB 'H$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:PUSH DX ;初始化MOV AX,0PUSH AXMOV AX,DATAMOV DS,AXINOUT TISHIYU1 ;提示键入字符串CRLFMOV DX,OFFSET BUFSIZE ;存储键入字符串的首地址MOV AH,0AHINT 21HINOUT SHUCHU ;输出定义的提示的字符串MOV BH,0MOV BL,ACTCHARMOV CHARTEXT[BX],'$'MOV DX,OFFSET CHARTEXTMOV AH,09H ;显示所键入的字符串INT 21HCRLFCALL TONGJI ;调用子过程,统计各类字符MOV DI,0745HMOV AL,SHUZIMOV [DI],ALMOV AL,DAXIEINC DIMOV [DI],ALMOV AL,XIAOXIEINC DIMOV [DI],ALMOV DI,0745HCRLFINOUT MESG1 ;将统计结果按要求的格式显示在DOSMOV BL,[DI]CALL BTOD ;调用子过程实现二进制到十进制的转化及显示CRLFINC DIINOUT MESG2MOV BL,[DI]CALL BTODCRLFINC DIINOUT MESG3MOV BL,[DI]CALL BTODCRLFINOUT TISHIYU2 ;输出提示语是否继续CRLFINPUTCRLFCMP AL,'Y' ;不区分大小写的识别是否继续JNE NT1JMP STARTNT1:CMP AL,'y'JNE K2 ;不能响应的字符需重新输入JMP START ;继续则重复运行上述程序K2: MOV AH,4CH ;不继续则返回DOSINT 21HTONGJI PROC ;定义子过程,实现各类字符的统计MOV AX,DATAMOV DS,AXXOR AX,AXMOV SHUZI,0MOV DAXIE,0MOV XIAOXIE,0LEA SI,CHARTEXTMOV CL,ACTCHAR ;ACTCHAR即键入字符串的长度CLDNEXT: LODSBCMP AL,39HJNC LOOP1INC SHUZIJMP AGINLOOP1: CMP AL,61HJNC LOOP2INC DAXIEJMP AGINLOOP2: INC XIAOXIEAGIN: LOOP NEXTTONGJI ENDPBTOD PROC ;子过程实现二、十进制的转换即显示MOV BH,0L0:CMP BL,0AHJAE L1JMP L2L1:SUB BL,0AH ;是否大于九INC BH ;大于的时候向高位进一JMP L0L2:ADD BL,30H ;小于九则直接显示ADD BH,30HMOV DL,BHMOV AH,02HINT 21HMOV DL,BLMOV AH,02HINT 21HRETBTOD ENDPCODE ENDSEND STARTEND START实验结果:。

微机原理实验报告

微机原理实验报告

实验六题目:编程从键盘输入一个二位十进制的月份数(01~12),然后显示出相应的英文缩写名。

程序说明:(1)程序名:实验六(2)功能:查找月份(3)原理:将对应月份进行编排,当输入对应编号时输出对应月份(4)算法说明:首先是对十二个月的英文缩写进行定义,定义BUF1,BUF2;进行字符输出操作INPUT;判断输入的字符是否为回车;若是则结束,若不是则对输入的字符进行判断,判断若为0,则继续输入字符,并将输入的字符转换为相应的二进制码,通过二进制码的去取相应地址的英文缩写,并将结果输出;若判断不为0,则继续输入字符,并将字符转换为二进制码,需要进行高四位清零,通过二进制码的去取相应地址的英文缩写,并将结果输出。

(5)流程图:完整代码:DA TAS SEGMENTMONTH DB 'Jan'DB 'Feb'DB 'Mar'DB 'Apr'DB 'May'DB 'Jun'DB 'Jul'DB 'Agu'DB 'Sep'DB 'Oct'DB 'Nov'DB 'Dec'STRING1 DB 0DH,0AH,'Input the month numble ( Press ENTER to quit ):$' BUF1 DB 0DH,0AH,10 DUP(0)BUF2 DB 81,?,80 DUP(?)DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DATASMOV DS,AXMOV ES,AXLOP1:CALL INPUTCMP [BUF2+2],0DH ;输入的字符是否为"回车"JZ EXIT ;若是回车则转至EXITCALL SUB1CALL OUTPUTJMP LOP1EXIT:MOV AH,4CHINT 21HINPUT PROC NEAR ;字符输入LEA DX,string1MOV AH,09H;显示Input the month numble ( Press ENTER to quit ):INT 21HLEA DX,BUF2;取BUF2偏移地址送DXMOV AH,0AH;输入字符INT 21HRETINPUT ENDPOUTPUT PROC NEAR ;字符输出MOV [DI],'$' ;将结束符送[DI]LEA DX,BUF1 ;取BUF1偏移地址MOV AH,09H ;显示INT 21HRETOUTPUT ENDPSUB1 PROC NEARMOV AL,[BUF2+2]CMP AL,30H;输入的字符是否等于0JNZ NEXT1;若等于0则转至EXIT1MOV AL,[BUF2+3];若不等,下一个输入的字符送ALAND AX,0FH;滤掉高四位DEC AXJMP NEXT2NEXT1:MOV AL,[BUF2+3];输入的字符送ALAND AX,0FH;滤掉高四位ADD AX,0AH ; 将显存的段起始地址设为当前行的下一行;[在段地址中加0AH,相当于在偏移地址中加了0A0H(=160d)] DEC AXNEXT2:MOV BX,AXSHL AX,1;AX左移一位ADD BX,AXMOV SI,BXLEA DI,BUF1;取BUF1偏移地址送DIADD DI,2MOV CX,3REP MOVSB;字符传送指令,重复3次因为月份缩写为3个字母RETSUB1 ENDPCODES ENDSEND START心得体会:该实验主要是想实现从键盘输入一个二位十进制的月份数(01~12),然后显示出相应的英文缩写名,首先是要对十二个月份的英文缩写进行编排,然后实现输入、查找、输出。

北京理工大学微机原理实验报告四

北京理工大学微机原理实验报告四

本科实验报告实验名称:A/D和D/A转换课程名称:实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:同组搭档:专业:成绩:实验四 A/D和D/A转换一、实验目的1、了解A/D 转换的基本原理,掌握ADC0809 的使用方法。

2、了解D/A 转换的基本原理,掌握DAC0832 芯片的使用方法。

3、了解直流电机控制的基本方法。

二、实验内容与步骤(一)A/D 转换部分1、接线:2、实验电路原理图下图通过实验台左下角电位器RW1 输出0~5V直流电压送入ADC0809 通道0(IN0),利用debug 的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。

启动IN0开始转换: Out 298H读取转换结果: In 298H3、用万用表测量CLOCK、ADD-C、ADD-B、ADD-A 在实验系统上如何联系的。

4、编程按中断方式采集IN0 输入的电压,在屏幕上显示出转换后的数据(用16 进制数)。

5、考虑如果采用IN7 输入的电压,启动开始转换和读取转换结果的地址应该是多少。

6、按查询方式采集IN0 输入的电压,软硬件如何实现。

编程方案1、ADC0809 的IN0 口地址为298H。

2、IN0 单极性输入电压与转换后数字的关系为:其中Ui 为输入电压,UREF 为参考电压,这里的参考电压为+5V电源。

3、一次A/D 转换的程序可以为MOV DX, PortOUT DX,AL ;启动转换;延时IN AL,DX ;读取转换结果放在AL 中(二) D/A 转换部分1、接线:CS /0832 接 Y2 /IO 地址用万用表测量 WR2 和XFER 在实验系统上如何联系的。

2、实验电路原理如图2,DAC0832 采用单缓冲方式,具有单双极性输出端(图中的Ua、Ub),利用debug 输出命令(Out 290 数据)输出数据给DAC0832,用万用表测量单极性输出端Ua 及双极性输出端Ub 的电压,验证数字与电压之间的线性关系。

微机原理实验报告

微机原理实验报告

微机原理实验报告微机原理与接口技术实验报告学院:信息工程学院班级:学号:姓名:实验一:系统认识实验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. 熟悉程序调试的方法。

微机原理(单片机汇编)实验报告

微机原理(单片机汇编)实验报告

软件实验报告软件实验一一、实验目的1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;3.了解将十六进制数转换成ASCII值的方法。

二、实验原理用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。

三、实验内容及步骤1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。

打开CPU窗口,观察CPU窗口各寄存器的变化。

打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。

在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。

2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。

打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。

3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。

4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。

5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。

四、实验结果1.步骤1的结果为8000H-80FFH的内容都为1.2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。

微机原理实验报告

微机原理实验报告

微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。

⼆、实验要求1.掌握DEBUG的使⽤,调试程序。

2.读懂程序中各条指令,说明程序功能。

三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。

100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。

2.加深对指令的理解。

⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。

请编⼀程序将AX的内容和BX的内容进⾏交换。

请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。

2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。

在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。

三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。

微机原理实验报告(2013)

微机原理实验报告(2013)

计算机在金属材料中的应用实验山东科技大学材料学院目录一、调试程序DEBUG二、熟悉80486指令系统三、熟悉汇编语言汇编程序上机过程四、汇编程序分支程序设计一五、汇编程序分支程序设计二六、汇编程序循环程序设计一七、汇编程序循环程序设计二八、汇编综合程序实验一调试程序DEBUG一、实验题目:调试程序DEBUG二、实验目的:1. 熟悉调试程序DEBUG2. 掌握调试程序DEBUG的操作步骤调试程序DEBUG:调试程序DEBUG.EXE是DOS提供的一个调试汇编语言程序的程序,每个版本的DOS都带有该程序,具有跟踪程序运行、设置断点、显示修改内存与寄存器的内容等功能,还可对小段程序进行汇编调试。

动态调试程序在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调试,调试程序DEBUG 就是专为汇编语言设计的一种调试工具。

它在调试汇编语言程序时有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元内容,并能监视目标程序的执行情况,使用户真正接触到CPU 内部,与计算机产生最紧密的工作联系。

DEBUG 的执行DEBUG 命令格式主要DEBUG 命令DEBUG 的执行在操作系统(DOS 或WIndows )命令行方式下,直接调入DEBUG 程序,键入命令的格式如下:D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2]其中[] 的内容为可选项,可以有也可以缺省。

[d:] 为驱动器号,指要调入DEBUG 状态的可执行文件在哪个驱动器中,如A: 、B: 、C: 等。

[Path] 为路径,指要调入DEBUG 状态的可执行文件是在哪个目录下或子目录下。

[filename[.ext]] ,指要调入DEBUG 状态下的可执行文件的文件名,该文件可以是通过编辑、汇编、连接后产生的可执行文件,也可以是在DEBUG状态下汇编的程序段,通过写盘命令W 写入磁盘的文件。

第四次微机原理与接口技术实验报告

第四次微机原理与接口技术实验报告

微机原理与接口技术第四次实验报告目录第一次实验:实验6 8254定时/计数器实验 (1)第二次实验:实验3 六位数码管显示实验 (4)实验5 小键盘按键识别实验 (8)实验2 拨动开关和 LED 显示实验 (15)实验8 8255方式1输出 (17)实验13 继电器实验 (20)第三次实验: 实验10 8位D/A转换实验 (23)第一次实验:实验68254 定时/计数器实验一实验目的熟悉 8254 在系统中的电路接法,掌握 8254 的工作方式及应用编程。

二实验内容使用 8254 两个计数器级连,采用定时方式工作,周期性的点亮及熄灭发光二极管各 0.5秒。

三实验原理(1)接线图:(2)流程图四程序清单及注释.Model small.386DATA SEGMENTD1 DB 10 DUP('4')D2 DB 20 DUP('3') DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA BEG:MOV AX,DATAMOV DS,AXMOV AL,37HMOV DX,203HOUT DX,ALMOV AX,1000;1000控制LED闪烁频率MOV DX,200HOUT DX,ALMOV AL,AHOUT DX,ALMOV AL,77HMOV DX,203HOUT DX,ALMOV AX,1000;1000控制LED闪烁频率MOV DX,201HOUT DX,ALMOV AL,AHOUT DX,ALCODE ENDSEND BEG四问题及体会(1)初次使用TPC-386EX汇编,对软件的使用不够熟悉,对输出输入接口的确定还有些模糊,需要继续尝试加以提高;(2)TPC-386EX 环境与下位机的匹配是一个常见的错误,实验中多次显示“请先传送文件”提示,后来发现是两者间接口连接出现问题,以后实验中会注意。

第二次实验:实验3 六位数码管显示实验一实验目的了解共阴级数码管显示数字的原理,掌握六位共阴级数码管动态显示的控制方法。

微机原理实验报告

微机原理实验报告

微机原理实验报告院别:物理与电子工程学院专业:电子信息工程1011班姓名:刘小云学号:2010128134实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、程序框图四、实验所用程序DATA 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 STASTACK 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 NEARMOV 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 AD2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30H ADD BYTE PTR [DI],30H DEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验程序分析及预计结果数据定义段省略分析MOV SI,OFFSET DATA1END ;将DATA1的偏移地址给SI,SI中存放的是0004 MOV DI,OFFSET DATA2END ;将DATA2的偏移地址给DI,DI中存放的是0009 CALL ADDA;调用子程序ADDAMOV AX,4C00HINT 21HADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30H;将SI中的数值变为十进制数SUB BYTE PTR [DI],30H;将DI中的数值变为十进制数DEC SI;将SI中的地址前移一位改变下一个数值DEC DI;将DI中的地址前移一位改变下一个数值DEC BX;定义循环的次数JNZ AD1;在BX中的数值不等于0的情况下循环执行AD1MOV SI,DX;重新初始化SIMOV DI,BP;重新初始化DIMOV CX,05HCLC ;将进位标志位清零AD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BL;将AL,BL中的数据用带进位的加法相加,保存到AL中AAAMOV [SI],ALDEC SIDEC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30H;将十进制数转化为十六进制,并存到SI中ADD BYTE PTR [DI],30H;将十进制数转化为十六进制,并存到DI中DEC SIDEC DIDEC BXJNZ AD31、在数据段,定义了一个data1,分配的地址是00~04,data1end里面的内容是04h,且不占内存,定义的data2,分配的地址是05~09,类似的,data2end里面的内容是09h2、在循环AD1过程中,data1里面的内容从开始的33h,39h,31h,37h,34h变为3,9,1,7,4;data2里面的内容也从开始的34h,35h,30h,38h,32h变为4,5,0,8,2。

微机原理第四次上机实验报告_PB

微机原理第四次上机实验报告_PB

微机原理第四次上机实验报告学号:PB12203254 姓名:**潇上机时间:每周五晚上【一、实验目的和要求】:1,熟练掌握分支程序的两种结构形式:即相当于高级语言中的IF_THEN_ELSE语句和CASE语句。

2,熟练掌握使用条件转移指令实现分支程序设计的基本方法。

3,熟练掌握使用跳转表方法实现CASE结构的分支程序的设计。

【二、实验内容和过程】程序1:编写一个程序将一个数组中正数和负数分成两个数组并分别屏幕显示正数和负数的个数。

(一)程序的算法:1,首先是待处理数组的创建:我们通过21H号中断调用的0A号功能调用输入数字串,存于BUFF字符串区(设定为0A号调用的键入缓冲区),这里只负责将键入的以回车符(0DH)结尾的字符串读入数据段,不检查输入是否合法。

但是,我们通过输出提示告知用户键入的数字之间应该使用空格符(20H)来分隔。

实际上,我们在处理数字的时候就是以空格符(当然,还包括尾后输入的回车符)作为一个数字的字符串形式结束的标志(回车符还标识所有数字处理完毕)。

另一方面,我们计划给每个数字分配一个字的储存空间,故我们支持的数字范围为-32768~32767,这同样有键入提示字符串提示。

2,数字处理阶段:----预备处理阶段:初始化用来作为指针和数据暂存的寄存器(DI指向保存正数的数组NUM1,SI指向保存负数对应补码的数组NUM2,BX指向键入缓存区BUFF,数据暂存的CX清0,将要用来读数和处理的AX清0),计数器清零(L1,L2清0,他们分别记录存入NUM1和存入NUM2的元素的个数)。

----正式处理阶段:(a)开始:我们通过BX指向BUFF,通过MOV AL,[BI]j将一个字节读入AL。

(b)判断,是否为回车符(0DH):TURE,所有数字处理完毕,跳转到输出阶段;FALSE,继续执行接下来的指令。

(c)判断,是否为回车(20H):TURE,尚未开始下一个数字的输入,回跳(a)重新读入下一个字节的内容;FALSE,继续执行接下来的指令。

微机原理实验报告四

微机原理实验报告四

微型计算机原理与接口技术实验报告一、实验内容实验4 循环结构、子程序结构的设计实验题目编程实现对1~50 累加求和;编写统计X 数据(AL)中的“1”的个数子程序, 并编写主程序调用;编程实现代码转换程序, 实现十进制到十六进制的转换, 并显示输出。

二、内容提要掌握循环程序的设计, 观察循环计数器的变化;掌握子程序的设三、计, 观察IP、SP 的变化。

四、实验的源代码(.asm文件内容)第一部分: 编程实现对1~50 累加求和程序如下:DATAS SEGMENTSUM DW?DATAS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV AX,0MOV CX,50AGAIN:ADD AX,CXDEC CXJNZ AGAINMOV SUM,AXMOV AH,4CHINT 21HCODE ENDSEND START第二部分: 编写统计X 数据(AL)中的“1”的个数子程序, 并编写主程序调用程序如下:DATAS SEGMENTX DB 31HRESULT DW?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASMAIN PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATASMOV DS,AXCALL FAR PTR COUNTRETMAIN ENDPCOUNT PROC FARMOV CX,0MOV AL,XAGAIN:AND AL,ALJZ EXITSHL AL,1JNC NEXTINC CXNEXT:JMP AGAINEXIT:MOV RESULT,CXRETCOUNT ENDPCODES ENDSEND START第三部分: 编程实现代码转换程序, 实现十进制到十六进制的转换, 并显示输出程序如下:DECTOHEX SEGMENTASSUME CS:DECTOHEXMAIN PROC FARREPEAT1: CALL KEYDTOBCALL CRLFCALL BTOHSCRCALL CRLFJMP REPEAT1MAIN ENDPKEYDTOB PROC NEARMOV BX,0KEYIN:MOV AH,1SUB AL,30H JL EXITCMP AL,9JG EXITCBWXCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX,AXJMP KEYIN EXIT: RET KEYDTOB ENDPBTOHSCR PROC NEARMOV CH,4 ROTATE: MOV CL,4 ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AH JL PRINTADD AL,07H PRINT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATE RET BTOHSCR ENDPCRLF PROC NEARMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HRETCRLF ENDPDECTOHEX ENDS五、实验的(显示)结果第一部分和第二部分显示均为: Press any key to continue 第三部分可以从键盘输入一个数字, 以非数字键结束即可, 屏幕上就会以十六进制显示出来, 可以重复输入, 重复显示, 每个数据占一行。

第四次微机原理与接口技术实验报告

第四次微机原理与接口技术实验报告

微机原理与接口技术第四次实验报告目录第一次实验:实验6 8254定时/计数器实验 (1)第二次实验:实验3 六位数码管显示实验 (4)实验5 小键盘按键识别实验 (8)实验2 拨动开关和 LED 显示实验 (15)实验8 8255方式1输出 (17)实验13 继电器实验 (20)第三次实验: 实验10 8位D/A转换实验 (23)第一次实验:实验6 8254 定时/计数器实验一实验目的熟悉 8254 在系统中的电路接法,掌握 8254 的工作方式及应用编程。

二实验内容使用 8254 两个计数器级连,采用定时方式工作,周期性的点亮及熄灭发光二极管各 0.5秒。

三实验原理(1)接线图:(2)流程图四程序清单及注释.Model small.386DATA SEGMENTD1 DB 10 DUP('4')D2 DB 20 DUP('3') DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA BEG:MOV AX,DATAMOV DS,AXMOV AL,37HMOV DX,203HOUT DX,ALMOV AX,1000;1000控制LED闪烁频率MOV DX,200HOUT DX,ALMOV AL,AHOUT DX,ALMOV AL,77HMOV DX,203HOUT DX,ALMOV AX,1000;1000控制LED闪烁频率MOV DX,201HOUT DX,ALMOV AL,AHOUT DX,ALCODE ENDSEND BEG四问题及体会(1)初次使用TPC-386EX汇编,对软件的使用不够熟悉,对输出输入接口的确定还有些模糊,需要继续尝试加以提高;(2)TPC-386EX 环境与下位机的匹配是一个常见的错误,实验中多次显示“请先传送文件”提示,后来发现是两者间接口连接出现问题,以后实验中会注意。

第二次实验:实验3 六位数码管显示实验一实验目的了解共阴级数码管显示数字的原理,掌握六位共阴级数码管动态显示的控制方法。

微机原理实验报告4..

微机原理实验报告4..

实验报告课程名称:《微机原理》实验第3次实验实验名称:宏命令与子程序的区别实验时间:2015年10月13日实验地点:XXXXXX组号__________学号:XXXX姓名:XXX指导老师:XX 评定成绩:___________微机原理实验4南京大学工程管理学院一、实验设备:计算机二、实验用时:4小时三、实验内容:1.单步运行实例函数NO3_Mpy_8,了解单字节无符号数乘法的实现方法。

2.编写子程序Mpy_16,实现双字节无符号数乘法。

自行定义变量,其中:ACCALO ;存放乘数低8 位ACCAHI ;存放乘数高8 位ACCBLO ;存放被乘数低8 位和乘积第16~23 位ACCBHI ;存放被乘数高8 位和乘积第24~31 位ACCCLO ;存放乘积第0~7 位ACCCHI ;存放乘积第8~15 位编写Main主程序,使用乘数0x4015和被乘数0x3321对编写的子程序进行测试,结果应为0x0CCC71B5。

3.编写宏命令Mpy_16,实现单字节无符号数乘法。

编写Main 主程序调用宏命令并对运算结果进行测试。

4.使用反汇编工具Disassembly Listing单步运行程序,观察子程序与宏命令的差异。

四、实验报告要求:1. 程序框图和源程序清单。

2. 分析宏扩展过程,说明宏与子程序的差别。

五、实验结果: 1、程序框图 (1)子程序Mpy_16否是子程序调用初始化循环计数器TEMP将乘数ACCBHI 、ACCBLO 复制到MDHI 、MDLO中ACCAHI 、ACCBHI 、ACCALO 、ACCBLO 分别相加,结果放入ACCBHI 、ACCBLO 中ACCBHI 、ACCBLO 、ACCCHI 、ACCCLO 清零 MDHI 、MDLO 算数右移一位,最低位进入C C=1?否是(2)宏命令Mpy_16ACCBHI 、ACCBLO 带进位位右移,最低位放入C中 ACCCHI 、ACCCLO 带进位位右移,最低位放入C 中TEMP=TEMP-1TEMP=0?子程序返回开始初始化循环计数器TEMP将乘数ACCBHI 、ACCBLO 复制到MDHI 、MDLO中ACCBHI 、ACCBLO 、ACCCHI 、ACCCLO 清零否是否是2、源程序清单 (1)子程序Mpy_16list p=16f877A ; list directive to define processorACCBHI 、ACCBLO 带进位位右移,最低位放入C中 ACCAHI 、ACCBHI 、ACCALO 、ACCBLO 分别相加,结果放入ACCBHI 、ACCBLO 中ACCCHI 、ACCCLO 带进位位右移,最低位放入C 中 MDHI 、MDLO 算数右移一位,最低位进入CTEMP=TEMP-1C=1?TEMP=0?结束#include <p16f877A.inc> ; processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFACCALO EQU 0x20 ;存放加数低8位ACCAHI EQU 0x21 ;存放加数高8位ACCBLO EQU 0x22 ;存放被加数低8位ACCBHI EQU 0x23 ;存放被加数高8位ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器; 双字节加法子程序,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 复位入口地址nop ; 兼容ICD调试工具,必须加nop goto Main ; 跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;CALL MPY_16;NOP;GOTO $;ORG 0x0100MPY_16CALL SETUP ;MLOOPBCF STATUS, C ; 清进位位RRF MDHI ; MD 右移 RRF MDLO;BTFSC STATUS, C ;判断是否需要相加CALL Add_16 ; 加乘数至 MB RRF ACCBHI ; 右移部分乘积RRF ACCBLO;RRF ACCCHI;RRF ACCCLO;DECFSZ TEMP ; 乘法完成否?GOTO MLOOP ; 否,继续求乘积RETURN ; 子程序返回SETUPMOVLW .16 ;初始化 TEMP 寄存器MOVWF TEMPMOVF ACCBLO, W ; 乘数送MDMOVWF MDLO;MOVF ACCBHI,W;MOVWF MDHI;CLRF ACCBLO ; 清 MBCLRF ACCBHI;CLRF ACCCLO ;清 MCCLRF ACCCHI;RETURN ;子程序返回Add_16MOVF ACCALO, w ;ACCB和ACCA低半字节相加ADDWF ACCBLO , f ;BTFSC STATUS, C ;有进位否?INCF ACCBHI;有,ACCB高字节加1,再加ACCAHI MOVF ACCAHI, w ; ACCA、ACCB高半字节相加ADDWF ACCBHI, f ;RETURN ;子程序返回END;(2)宏命令Mpy_16list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFMPY_16 macro ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1;SETUPACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1 ;MLOOPBCF STATUS, C ; 清进位位RRF MDHI1 ; MD 右移RRF MDLO1;BTFSS STATUS, C ;判断是否需要相加GOTO LOOP;Add_16ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1 ; 加乘数至 MBLOOPRRF ACCBHI1 ; 右移部分乘积RRF ACCBLO1;RRF ACCCHI1;RRF ACCCLO1;DECFSZ TEMP1 ; 乘法完成否?GOTO MLOOP ; 否,继续求乘积ENDM ; 子程序返回SETUP macro ACCALO2,ACCAHI2,ACCBLO2,ACCBHI2,ACCCLO2,ACCCHI2,MDHI2,MDLO2 ,TEMP2;MOVLW .16 ;初始化 TEMP 寄存器MOVWF TEMP2MOVF ACCBLO2, W ; 乘数送MDMOVWF MDLO2;MOVF ACCBHI2,W;MOVWF MDHI2;CLRF ACCBLO2 ; 清 MBCLRF ACCBHI2;CLRF ACCCLO2 ;清 MCCLRF ACCCHI2;ENDM ;子程序返回Add_16 macro ACCALO3,ACCAHI3,ACCBLO3,ACCBHI3,ACCCLO3,ACCCHI3,MDHI3,MDLO3,TEMP3;MOVF ACCALO3, w ;ACCB和ACCA低半字节相加ADDWF ACCBLO3 , f ;BTFSC STATUS, C ;有进位否?INCF ACCBHI3;有,ACCB高字节加1,再加ACCAHI MOVF ACCAHI3, w ; ACCA、ACCB高半字节相加ADDWF ACCBHI3, f ;ENDM ;子程序返回ACCALO EQU 0x20 ;存放加数低8位ACCAHI EQU 0x21 ;存放加数高8位ACCBLO EQU 0x22 ;存放被加数低8位ACCBHI EQU 0x23 ;存放被加数高8位ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器; 双字节加法子程序,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 复位入口地址nop ; 兼容ICD调试工具,必须加nop goto Main ; 跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;MPY_16ACCALO,ACCAHI,ACCBLO,ACCBHI,ACCCLO,ACCCHI,MDHI,MDLO,TEMP; NOP;GOTO $;END;3、程序运行结果截图(1)子程序Mpy_16子程序运行结果(2)宏命令Mpy_16宏指令运行结果4、分析宏扩展过程,说明宏与子程序的差别(1)子程序Mpy_16的反汇编结果子程序的反汇编代码1子程序的反汇编代码2(2)宏命令Mpy_16的反汇编结果0000 0000 NOP0001 2802 GOTO 0x20002 3015 MOVLW 0x150003 00A0 MOVWF 0x200004 3040 MOVLW 0x400005 00A1 MOVWF 0x210006 3021 MOVLW 0x210007 00A2 MOVWF 0x220008 3033 MOVLW 0x330009 00A3 MOVWF 0x23000A 3010 MOVLW 0x10000B 00A8 MOVWF 0x28000C 0822 MOVF 0x22, W000D 00A6 MOVWF 0x26000E 0823 MOVF 0x23, W000F 00A7 MOVWF 0x270010 01A2 CLRF 0x220011 01A3 CLRF 0x230012 01A4 CLRF 0x240013 01A5 CLRF 0x250014 1003 BCF 0x3, 00015 0CA7 RRF 0x27, F0016 0CA6 RRF 0x26, F0017 1C03 BTFSS 0x3, 00018 281F GOTO 0x1f0019 0820 MOVF 0x20, W001A 07A2 ADDWF 0x22, F001B 1803 BTFSC 0x3, 0001C 0AA3 INCF 0x23, F001D 0821 MOVF 0x21, W001E 07A3 ADDWF 0x23, F001F 0CA3 RRF 0x23, F0020 0CA2 RRF 0x22, F0021 0CA5 RRF 0x25, F0022 0CA4 RRF 0x24, F0023 0BA8 DECFSZ 0x28, F0024 2814 GOTO 0x140025 0000 NOP0026 2826 GOTO 0x262007 2394 CALL 0x394(3)宏扩展过程宏扩展只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能。

微机原理实验报告4

微机原理实验报告4

实验4 字符及字符串的输入和输出一、实验任务及实验目的1、熟悉如何进行字符及字符串的输入输出。

2、掌握简单的dos系统功能调用3、熟悉在pc上建立、汇编、链接、调试和运行8086汇编语言的全过程二、实验内容、过程及实验现象记录1、assume cs:cseg,ds:dsegdseg segment;数据段dseg endcseg segmentmain proc farmov ax,dsegmov ds,ax;主程序mov ax,4c00hint 21hmain endpcseg endsend main2、(1)AL=35,是字符5的ACSCII码(2)分别是41、42、43、44,是A、B、C、D的ASCII码3、(1)是04h,它表示实际输入的字符个数。

(2)从DS:1002H开始的内存区域中的内容分别是5、4、3、2和回车键ASCII码。

其中没有字符“1”的ASCII码,因为实际长度只有4位,其中有一位是回车键,所以没有字符“1”的ASCII码。

(1)显示了。

(2)和第一题是一样的,屏幕都显示了对应的字符。

(3)屏幕都没有显示。

0ah是回车键的ASCII码,对应无显示。

(4)没有输出,有‘哔’的一声5、org 100hmov ax, 3int 10hmov ax, 1003hmov bx, 0int 10hmov ax, 0b800hmov ds, axmov [02h], 'H'mov [04h], 'e'mov [06h], 'l'mov [08h], 'l'mov [0ah], 'o'mov [0ch], ','mov [0eh], 'W'mov [10h], 'o'mov [12h], 'r'mov [14h], 'l'mov [16h], 'd'mov [18h], '!'mov cx, 12mov di, 03hret7、codes segmentassume cs:codesstart:mov ch,20hmov bl,6lll:mov bh,16ll:mov dl,chmov ah,2int 21hinc chdec bhjnz llmov dl,0ahint 21hmov dl,0dhint 21hdec bljnz lllmov ah,4chint 21hcodes endsend start三、实验结果及总结通过此次实验,我熟悉了如何进行字符及字符串的输入输出,掌握了简单的DOS系统功能调用,学到了不少知识。

《微机原理实验报告》word版

《微机原理实验报告》word版

班级自动化学号姓名实验一系统认识实验一实验目的掌握教学系统的基本操作二实验设备PC机一台masm软件三实验内容及步骤(1)输入程序并检查无误,经汇编连接后装入系统(2)输入E3500后回车,在3500-3510单元中分别送入00~09十个数据(3)按“T“键运行以上程序直至程序运行完(4)输入D3600后回车,查看3600单元后面的数据四程序及其显示的结果(1)程序(2)显示的结果实验三运算类编程实验一实验目的(1)掌握使用运算类指令编程及调试方法(2)掌握运算类指令对各状态标志位的影响及其测试方法二实验设备PC一台masm软件三实验内容及步骤(1)二进制双精度加法运算(2)输入程序并检查无误,经汇编连接后装入系统(3)用U0000:2000查看MOV AX,DA TA的语句,即得到数据段段位置CS:1412用E命令E1412:0000回车,给XL,YL,YH赋值存入二进制数A0,65,15,00和9E,B7,21,00(4)用G=0000:2000,运行以上程序(5)输入D1412:0008,检验显示的结果是否为:3E,1D,17,00四实验程序五程序显示的结果实验四分支程序设计实验一实验目的:(1)掌握分支程序的结构(2)掌握分支程序的设计,调试方法二实验设备:PC机一台masm软件三实验内容设计一数据块间的搬移程序。

设计思想:程序要求把内存中一数据区传送到另一存储区。

源数据块和目的数据块在存储中可能有三种情况,对于两个分离的情况,数据的传送从数据块的首位置开始,或者从数据块的末位置开始。

但对于有部分重叠的情况,则要加以分析,否则重叠部分会因搬移而遭到破坏,可以得到以下结论:(1)当源数据块首址大于目的块首址时,从数据块首址开始传送数据。

(2)当源数据块首址小于目的块首址时,从数据块末址开始传送数据。

四实验步骤(1)按实验流程图设计编写实验程序(2)输入程序并检查无误后,经汇编,连接后装入系统(3)用E命令在以SI为起址的单元中填入十六个数(4)用G=0000:2000运行实验程序(5)用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同五实验程序及结果显示(1)实验程序(1)实验结果显示实验五循环程序设计一实验目的(1)加深对循环结构的理解(2)掌握循环结构程序设计的方法(3)熟练掌握调试循环程序的方法二实验设备:PC机一台masm软件三实验内容求数据区内负数的个数:设数据区的第一单元存放区内单元数据的个数,从第二单元开始开始存放数据,在区内最后一个单元存放结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告实验四 8251可编程串行口与PC机通信实验一、实验要求利用实验箱内的8251A芯片,实现与PC机的通信。

二、实验目的1.掌握8251A芯片结构和编程方法;2.了解实现串行通信的硬件环境,数据格式和数据交换协议;3.了解PC机通信的基本要求。

三、实验原理(一)8251A芯片工作方式配置:1. 8个数据位;2.无奇偶校验位;3.1个停止位;4.波特率因子设为16;5. 波特率设为9600。

(二)8251A主要寄存器说明图4-1 模式字图4-2 命令字CO MMAN D I NSTR UCT ION FO RMA T图4-3 状态字(三)8251编程对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。

(1)方式控制字方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。

图4-4 方式控制字说明(2)命令控制字命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。

图4-5 所示的是8251 命令控制字各位的定义。

图4-5命令控制字说明(3)状态字CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如图4-6所示。

图4-6 状态字说明四、实验电路连接:1.CS8251接228H,CS8279已固定接至238H;2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。

注意:RS232通信口必须在设备断电状态下插拔!图4-7 连线图五、实验内容及要求1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。

使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。

将结果截图保存,贴入实验报告。

2.剔除例程中冗余部分,实现对例程的精简和优化。

将精简内容与相应理由写入实验报告。

3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。

使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。

将结果截图保存,贴入实验报告。

4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。

将结果截图保存,贴入实验报告。

5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。

将结果截图保存,贴入实验报告。

六、实验程序及结果1.起始位0,8位数据:10101010,由于发送的数据是从低到高,所以实际数据是01010101,即55H。

无校验位。

2.精简化程序M8251_DATA EQU 0600H ;端口定义M8251_CON EQU 0602HM8254_2 EQU 0644HM8254_CON EQU 0646HSSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: CALL INITA1: CALL SENDMOV CX, 0001HA2: MOV AX, 0F00HA3: DEC AXJNZ A3LOOP A2JMP A1INIT: MOV AL, 0B6H ; 8254, 设臵通讯时钟MOV DX, M8254_CONOUT DX, ALMOV AL, 1BHMOV DX, M8254_2OUT DX, ALMOV AL, 3AHOUT DX, ALCALL RESET ; 对8251 进行初始化CALL DALLYMOV AL, 6EHMOV DX, M8251_CON ; 写8251 方式字,有奇偶校验OUT DX, ALCALL DALLYMOV AL, 34HOUT DX, AL ; 写8251 控制字CALL DALLYRETRESET: MOV AL, 00H ; 初始化8251 子程序MOV DX, M8251_CON ; 控制寄存器OUT DX, ALCALL DALLYOUT DX, ALCALL DALLYOUT DX, ALCALL DALLYMOV AL, 40HOUT DX, ALRETDALLY: PUSH CXMOV CX, 5000HA4: PUSH AXPOP AXLOOP A4POP CXRETSEND: PUSH AXPUSH DXMOV AL, 31HMOV DX, M8251_CONOUT DX, ALMOV AL, 55HMOV DX, M8251_DATA ; 发送数据55HOUT DX, ALCALL DALLYPOP AXRETCODE ENDSEND START发送55H:01010101B,接收时从低位开始接收,接收到的二进制数为:10101010B,实际接收到的二进制数为:0(起始位)10101010(8位数据位)(无奇偶校验位)1(停止位)3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。

使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。

将结果截图保存,贴入实验报告。

(1)发送415:M8251_DATA EQU 0600H ;端口定义M8251_CON EQU 0602HM8254_2 EQU 0644HM8254_CON EQU 0646HSSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: CALL INITA1: CALL SENDMOV CX, 0001HA2: MOV AX, 0F00HA3: DEC AXLOOP A2JMP A1INIT: MOV AL, 0B6H ; 8254, 设臵通讯时钟MOV DX, M8254_CONOUT DX, ALMOV AL, 1BHMOV DX, M8254_2OUT DX, ALMOV AL, 3AHOUT DX, ALCALL RESET ; 对8251 进行初始化CALL DALLYMOV AL, 6EHMOV DX, M8251_CON ; 写8251 方式字OUT DX, ALCALL DALLYMOV AL, 34HOUT DX, AL ; 写8251 控制字CALL DALLYRETRESET: MOV AL, 00H ; 初始化8251 子程序MOV DX, M8251_CON ; 控制寄存器OUT DX, ALCALL DALLYOUT DX, ALCALL DALLYOUT DX, ALCALL DALLYMOV AL, 40HOUT DX, ALRETDALLY: PUSH CXMOV CX, 5000HA4: PUSH AXPOP AXLOOP A4POP CXRETSEND: PUSH AXPUSH DXMOV AL, 31HMOV DX, M8251_CONMOV AL, 04HMOV DX, M8251_DATA ; 发送数据55H OUT DX, ALCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYMOV AL, 01HMOV DX, M8251_DATA ; 发送数据55H OUT DX, ALCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYMOV AL, 05HMOV DX, M8251_DATA ; OUT DX, ALCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYCALL DALLYPOP DXPOP AXRETCODE ENDSEND START分三次分别发送04H,01H,05H该程序发送数据时,是通过延时来让数据全部发送出去,不是通过状态字来进行判断。

通过延时,给寄存器足够的时间,将数据发送出去,然后再发送下一帧数据。

七、实验体会与心得通过本次实验,我掌握了8251的基本应用,熟悉了其典型电路连接方法,以及他的数据传送程序。

本次实验,我切实的认识了数据帧的相关内容,以及数据是如何发送的。

数据帧是将数据加上首部和尾部所构成的数据段,首部包含起始位,尾部包含奇偶校验位和停止位等,具体的位数需要通过设定方式控制字来进行设定。

数据帧传送时,需要一定的时间,如果传送还没完成就发送下一帧,数据就会丢失。

为防止数据丢失,可以通过两种方法发送数据:1.等待足够长的时间让数据发送出去;2.查询状态字判断数据是否发送。

后者比较精准,前者可能有误差。

数据的发送是先送高位再送低位,所以在传送学号的程序中出现了一些错误,应以5,1,4的顺序发送。

相关文档
最新文档