微机原理实验四实验报告

合集下载

微机原理实验报告册(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个字节存储块各单元内数据对应相同。

  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的顺序发送。

相关文档
最新文档