微机原理实验4资料
微机原理实验报告材料
微机原理实验报告班级:指导老师:学号:姓名:实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序框图图 3-1四、参考程序清单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],30H SUB 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],30HADD BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验结果与分析这次实验依次将相加数与被加数存入AL,BL,依次从低位向高位相加,然后把结果放在内存中。
微机原理实验学生实验指导书
微型计算机原理实验指导书河北大学电子信息工程学院2017年10月目录实验一系统认识及编程初步实验 (1)实验二输入输出程序设计实验 (7)实验三8255并行接口实验 (9)实验四8259中断控制实验 (13)实验五8254定时/计数器应用实验 (19)实验六综合实验 (24)实验一系统认识及编程初步实验一、实验目的1. 掌握TD系列微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
2. 掌握使用运算类指令编程及调试方法。
3. 学习使用软件监视变量的方法。
二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容(一)基础实验1. 系统认识实验编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。
2. 运算编程实验80X86指令系统提供了实现加、减、乘、除运算的基本指令,可对表1-1所示的数据类型进行算术运算。
本实验以二进制双精度加法运算为例,计算X+Y=Z,将结果Z存入某存储单元。
表1-1 数据类型算术运算表(二)提高实验1. 在系统认识实验中,编写程序,将内存3500H单元开始的8个数据复制到3600H单元开始的数据区中。
通过调试验证程序功能,使用E命令修改3500H单元开始的数据,运行程序后使用D命令查看3600H单元开始的数据。
2. 在运算编程实验中,求累加和程序设计,在偏移地址为1000H开始依顺序填入16个字(16个16位数),利用程序求和,存放在偏移地址2000H。
四、实验步骤(一)系统认识实验1. 运行Wmd86软件,进入Wmd86集成开发环境。
2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言和寄存器类型,这里我们设置成“汇编语言”和“16位寄存器”,如图1-1、图1-2所示。
设置选择后,下次再启动软件,语言环境保持这次的修改不变。
图1-1 语言环境设置界面图1-2 寄存器设置界面3. 语言和寄存器选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图1-3所示。
微机原理实验材料53664
实验1 二进制多位加法运算一、实验目的1、熟悉实验系统键盘显示的使用。
2、掌握使用加法类运算指令编程及调试方法。
3、掌握加法类指令对状态标志位的影响。
二、实验内容计算X+Y+Z=?<X、Y、Z为16位二制数)三、编程指南因为本实验是三个十六位二制数相加运算,因此,当X+Y时要考虑用ADC 指令,把进位C加到结果的高16位中,当<X+Y)+Z时,再把进位C加到结果的高16位中,本实验设定三个加数0FFFFH,计算结果应为2FFFDH。
四、实验步骤联机模式:<1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598k8Asm文件夹,点击S1.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
<2)运算结果保留在内存4100H~4102H单元中,点击DJ-8086K软件中存贮器RAM窗口,输入RAM的起始地址4100、4101、4102,单元内容应为FD、FF、02。
脱机模式:⑴在P.态下,按SCAL键,输入2CA0,按EXEC键。
⑵复位RST键,运算结果保留在内存4100H~4102H单元中,共内容分别为:FD、FF、02,低位在前,高位在后,具体操作方法:输入键 [4100]→[ME]→[NX]→[NX]。
五、实验程序清单CODE SEGMENT 。
S1.ASM-->BIN ADD ASSUME CS:CODEORG 2CA0H 。
this is a program of addSTART: CLCMOV SI,4000H 。
result in [4100] MOV [SI],0ffffHMOV [SI+2],0ffffHMOV [SI+4],0ffffHMOV AX,0000HMOV [SI+102H],AXMOV AX,[SI]ADD AX,[SI+2]ADC [SI+102H],0000ADD AX,[SI+4]MOV [SI+100H],AXADC [SI+102H],0000JMP $CODE ENDSEND START六、思考题1 试编程实现四个十六位二进制数的加法运算,结果存在相同位置。
微机原理实验四实验报告
实验报告实验四 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管脚的输出,验证结果的正确性。
将结果截图保存,贴入实验报告。
华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
微机原理实训资料报告材料完整
一、设计目的通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。
通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。
为以后学生结合专业从事微机应用设计奠定基础。
二、设计的原始资料及依据(1)查阅微机原理及应用、汇编语言程序设计等书籍;(2)掌握字符串的输入,输出和排序。
三、设计的主要容及要求容:从PC键盘输入5个字符串,排序及显示要求1)输入5个字符串。
2)对输入的字符串进行排序并正确显示。
四、对设计说明书撰写容、格式、字数的要求1.课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。
2.学生应撰写的容为:目录、正文、参考文献等。
课程设计说明书(论文)的结构及各部分容要求可参照《工程学院毕业设计(论文)撰写规》执行。
应做到文理通顺,容正确完整,书写工整,装订整齐。
3.说明书(论文)手写或打印均可。
手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时按《工程学院毕业设计(论文)撰写规》的要求进行打印。
4. 课程设计说明书(论文)装订顺序为:封面、任务书、成绩评定表、目录、正文、总结、参考文献。
五、设计完成后应提交成果的种类、数量、质量等方面的要求;提交课程设计说明书一份。
在说明书中要有设计原理、硬件电路接线图、设计的程序及必要注释等。
六、时间进度安排;阳工程学院微机原理及汇编语言程序设计程设计成绩评定表系(部):信息学院班级:学生:目录第1章绪论 (1)1.1背景 (1)1.2设计目的与任务 (1)1.2.1 本课程设计的目的 (1)1.2.2 本课程设计的任务 (1)第2章汇编语言的运行环境及运行步骤 (2)2.1汇编语言的起源 (2)2.2汇编语言的特点 (2)2.2.1 能够保持机器语言的一致性,直接、简捷 (2)2.2.2 目标代码简短,占用存少,执行速度快 (2)2.2.3 汇编语言是面向机器的 (2)2.2.4 难于从汇编语言代码上理解程序设计意图,可维护性差 (2)2.2.5 高速度和高效率 (2)2.3汇编语言的运行环境 (3)2.4汇编语言的运行步骤 (3)第3章总体设计思路 (6)3.1功能设计分析 (6)3.1.1 设计思路分析 (6)3.1.2 系统功能分析: (6)3.2总体设计分析 (6)3.2.1 系统功能模块图 (6)3.2.2 具体设计方案 (6)第4章程序实现 (8)4.1运行程序 (8)4.1.1 单步运行 (8)4.1.2 暂停执行程序 (8)4.1.3 连续运行程序 (8)4.2各个模块程序流程图设计 (9)4.2.1 第一模块输入字符串 (9)4.2.2 第二模块字符串排序 (9)4.2.3 第三模块输出字符串 (10)第5章遇到问题及解决方法 (12)5.1所遇到的问题 (12)5.2对应问题的解决方法 (12)总结 (13)致 (14)参考文献 (15)附录 (16)源程序代码: (16)第1章绪论1.1 背景计算机技术作为信息化的核心技术受到全社会的普遍重视。
微机原理实验报告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)宏扩展过程宏扩展只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能。
微机原理与接口技术实验指导_4_循环程序设计实验
循环程序设计实验2.4.1 实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
2.4.2 实验预习要求1、复习比较指令、条件转移指令和循环指令。
2、复习循环程序的结构、循环控制方法等知识。
3、读懂“2.4.3 实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。
4、根据“2.4.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
5、从“2.4.4 实验习题”中任选一道题目,编写源程序,以便上机调试。
2.4.3 实验内容计算1+2+……n=,其中n通过键盘输入。
要求在屏幕上提供如下信息:Please input a number(1627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。
1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数0B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。
将键盘输入的十进制数转换为二进制数的程序清单如下:DATA SEGMENTINF1 DB "Please input a number (0-65535):$"IBUF DB 7,0,6 DUP()DATA ENDSCODE S EGMENTASSUME CS: CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET INF1MOV AH, 09HINT 21HMOV DX, OFFSET IBUF ;键入一个十进制数(<65535)MOV AH, 0AHINT 21HMOV CL, IBUF+1 ;十进制数的位数送CXMOV CH, 0MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)MOV AX, 0 ;开始将十进制数转换为二进制数AGAIN: MOV DX, 10 ; ((010+a4) 10+…) 10+a0MUL DXAND BYTE PTR [SI], 0FHADD AL, [SI]A DC AH, 0I NC SILOOP AGAINMOV AH, 4CHINT 21HCODE ENDSEND START本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
第四次微机原理与接口技术实验报告
微机原理与接口技术第四次实验报告目录第一次实验:实验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 六位数码管显示实验一实验目的了解共阴级数码管显示数字的原理,掌握六位共阴级数码管动态显示的控制方法。
微机原理-实验四-中断实验
微机原理实验报告班级:XXXXX姓名:XXXX学号:20XXXXXXXXX大学信息科学与技术学院信息工程系实验四8259A中断控制器实验一、实验目的:1、利用试验箱掌握8259A中断控制器的使用方法。
2、掌握中断的相关知识。
二、实验内容:1、实验连线(微机原理试验箱)⑴连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G 与总线单元上方的GS相连。
⑵将8259CS插孔与译码单元的Y0相连,中断源IR7与单脉冲单元的SP插孔相连。
⑶用8芯扁平电缆将8259中断控制单元的数据总线插座与数据总线单元任一插座相连。
2、 PC机连接好串口线电源线,打开电源,在电脑中打开intel8088微机实验系统选择串口一和 57600 波特率若出现仿真器没有连接的画面则串口线没有连接好如下图:3、LED环境⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。
Ph88/he08.asm代码在软件中自带的,打开软件中的he08.asm 点编译(c)点击编译、连接、装载⑵在“P.”状态下在小键盘键入3400,然后按“EXEC”进入实验项目的运行。
这是输入起始地址,对应代码中的 ORG 3400H4、观察运行结果在连续运行方式下,按动 AN 按钮,LED 数码管从最高位开始依次显示“7”显示满后,最高位显示“P.”继续等待中断。
5、终止运行按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出该程序的运行返回监控状态。
三、程序流程图和程序代码1、流程图2、代码与注释;-------------------硬件实验八 8259单级中断控制器实验------------------- CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HH8: JMP P8259ZXK EQU 0FFDCHZWK EQU 0FFDDHLED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3HBUF DB ?,?,?,?,?,?Port0 EQU 0FFE0HPort1 EQU 0FFE1HP8259: CLICALL WP ;初始化显示“P.”MOV AX,OFFSET INT8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXCALL FOR8259mov si,0000hSTICON8: CALL DISJMP CON8;------------------------------------ INT8259:cliMOV BX,OFFSET BUFMOV BYTE PTR [BX+SI],07HINC SICMP SI,0007HJZ X59XX59: MOV AL,20HMOV DX,Port0OUT DX,ALmov cx,0050hxxx59: push cxcall dispop cxloop xxx59pop cxmov cx,3438hpush cxSTIIRETX59: MOV SI,0000HCALL WPJMP XX59;==============================FOR8259:MOV AL,13HMOV DX,Port0OUT DX,ALMOV AL,08HMOV DX,Port1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;---------------------------WP: MOV BUF,11H ;初始化显示“P.”MOV BUF+1,10HMOV BUF+2,10HMOV BUF+3,10HMOV BUF+4,10HMOV BUF+5,10HRET;--------------------------------DIS: MOV CL,20HMOV BX,OFFSET BUFDIS1: MOV AL,[BX]PUSH BXMOV BX,OFFSET LEDXLATPOP BXMOV DX,ZXKOUT DX,ALMOV AL,CLMOV DX,ZWKOUT DX,ALPUSH CXMOV CX,0100HDELAY: LOOP $POP CXCMP CL,01HJZ EXITINC BXSHR CL,1JMP DIS1EXIT: MOV AL,00HMOV DX,ZWKOUT DX,ALRET;--------------------------CODE ENDSEND H8四、调试过程及遇到的问题在“P.”状态下键入 3400,然后按“EXEC”进入实验项目的运行。
微机原理第四次实验
13
向设备写数据(1/2): 具体实现过程是先写入要配置的寄存器的地址,然后写入
要配置的值,具体实现函数是:
unsigned char temp[2];
//定义一个数组用于存
放要发送的数据,包括寄存器地址和要写入该寄存器内的值
temp[0]=address;
//将要配置的寄存器的
地址address写入temp[0]中。
temp[1]=data;
//将要写入该寄存器中
的值data写入//temp[1]中。
write(fd,temp,2);
//用write函数向设备写
入数据temp,首先写入地址address,然后写入值data。
实验六 基于ARM的键盘及数 码管驱动实验
1
一、实验目的 1.掌握键盘及数码管驱动原理。 2.掌握ZLG7290芯片的使用方法。 3.掌握I2C总线的协议标准。 4.掌握Linux下键盘驱动的实现方法。 二、实验内容 编写测试程序控制键盘和数码管。
2
三、预备知识 1.了解ARM9处理器结构 2.了解i2c协议
8ห้องสมุดไป่ตู้
下载数据并译码(Download)
在指令格式中,高4 位的0110 是命令字段;A3A2A1A0 是数码管显示数据的位地址(其中A3 留作以后扩展之用, 实际使用时取0 即可),位地址编号依次为 0,1,2,3,4,5,6,7,代表8个数码管,dp 控制小数点是否点 亮,0-点亮,1-熄灭;flash 表示是否要闪烁,0-正常 显示,1-闪烁;d4d3d2d1d0 是要显示的数据,包括10 种 数字和21 种字母。显示数据按照表一中的规则进行译码:
微机原理实验指导书1_2_4_5
微机原理实验指导书郑州大学电气工程学院目录实验一比较字符串实验 (1)实验二两个多位十进制数相加的实验 (14)实验三两个数相乘的实验 (18)实验四键盘输入并显示实验 (21)实验五统计学生成绩 (25)实验六 8259A 中断控制器实验 (29)实验七 8253计数器/定时器实验 (34)实验八 8255并行接口实验 (37)实验九 8251A 串行接口实验 (43)实验十 A/D 实验 (51)附录一调试程序DEBUG (51)附录二汇编程序出错信息 (59)实验一比较字符串实验一.实验目的1.掌握分支程序的设计方法。
2.熟悉在PC机上建立、汇编、链接、调试和运行8086汇编程序的过程。
二.实验内容1.比较两个字符串STRING1和STRING2所含的字符是否相同,若相同则显示‘Match’,否则显示‘No Match’。
2.修改程序,显示所比较字符的个数。
三.程序清单DATAREA SEGMENTSTRING1 DB 'Move the cursor backward.'STRING2 DB 'Move the cursor backward.'MESS1 DB 'Match.',13,10,'$'MESS2 DB 'No match.',13,10,'$'DATAREA ENDSPROGNAM SEGMENTMAIN PROC FARASSUME CS:PROGNAM,DS:DATAREA,ES:DATAREASTART: PUSH DSSUB AX,AXPUSH AXMOV AX,DATAREAMOV DS,AXMOV ES,AXLEA SI,STRING1LEA DI,STRING2CLDMOV CX,STRING2-STRING1REPZ CMPSB?LEA DX,MESS2?MATCH: LEA DX,MESS1DISP: MOV AH,09HINT 21HRETMAIN ENDPPROGNAM ENDSEND START四.实验方法1.用编辑程序EDIT.EXE建立源文件EDIT D101-1.ASM↙在编辑状态下输入源程序,存盘后退出编辑状态。
大学微机原理实验报告(3篇)
第1篇实验名称:微机原理实验实验日期:2023年10月25日实验地点:计算机实验室实验教师:[教师姓名]实验学生:[学生姓名]班级:[班级名称]一、实验目的1. 理解微机原理的基本概念和组成结构。
2. 掌握微机硬件的基本操作和调试方法。
3. 熟悉汇编语言编程和程序调试技巧。
4. 通过实验加深对微机原理课程的理解,提高动手能力。
二、实验内容本次实验主要分为以下几个部分:1. 微机硬件系统结构认识:了解微机硬件系统的组成,包括CPU、内存、I/O接口等,熟悉各部件的功能和相互关系。
2. 汇编语言编程:学习汇编语言的基本语法和指令系统,编写简单的汇编程序,实现特定功能。
3. 程序调试:使用调试工具(如DEBUG)对汇编程序进行调试,查找并修正错误。
4. 微机原理实验:完成以下实验任务:1. 编写程序实现两个多位十进制数的相加。
2. 编写程序实现字符串比较功能。
3. 编写程序实现乘除法运算。
三、实验步骤1. 微机硬件系统结构认识:- 观察实验室中的微机硬件系统,了解各部件的连接方式和功能。
- 使用示波器检测实验装置的信号是否正常。
2. 汇编语言编程:- 学习汇编语言的基本语法和指令系统。
- 编写程序实现两个多位十进制数的相加,程序如下:```;加数DATA1 DB 3,4,5,6,7;被加数DATA2 DB 2,3,4,5,6;结果SUM DB 5 DUP(0);程序开始MOV CX, 5 ;循环次数MOV AL, 0 ;结果初始化为0MOV SI, OFFSET DATA1 ;加数地址MOV DI, OFFSET DATA2 ;被加数地址ADD_LOOP:ADD AL, [SI] ;加数加到AL寄存器ADC AL, [DI] ;进位加到AL寄存器MOV [DI], AL ;结果存回DI寄存器ADD SI, 1 ;加数地址加1ADD DI, 1 ;被加数地址加1LOOP ADD_LOOP ;循环;程序结束```- 编写程序实现字符串比较功能,程序如下:```;字符串1STRING1 DB 'Hello';字符串2STRING2 DB 'World';比较结果RESULT DB 0;程序开始MOV SI, OFFSET STRING1 ;字符串1地址MOV DI, OFFSET STRING2 ;字符串2地址CMP_LOOP:MOV AL, [SI] ;读取字符串1的当前字符CMP AL, [DI] ;与字符串2的当前字符比较 JNE NOT_EQUAL ;不相等则跳转到NOT_EQUAL INC SI ;字符串1地址加1INC DI ;字符串2地址加1LOOP CMP_LOOP ;循环MOV RESULT, 1 ;相等则将结果设置为1JMP END ;跳转到ENDNOT_EQUAL:MOV RESULT, 0 ;不相等则将结果设置为0END:;程序结束```- 编写程序实现乘除法运算,程序如下:```;被乘数DATA1 DB 10;乘数DATA2 DB 5;结果PRODUCT DB 0;程序开始MOV AL, [DATA1] ;被乘数加载到AL寄存器MUL [DATA2] ;乘数乘到AL寄存器MOV [PRODUCT], AL ;结果存回PRODUCT;程序结束```3. 程序调试:- 使用DEBUG工具对汇编程序进行调试,查找并修正错误。
(完整word版)微机原理完整实验报告+程序
实验题目8253定时/计数器实验 一、 实验目的与要求: 1. 学会8253芯片和微机接口原理和方法。
2. 掌握8253定时器/计数器的工作方式和编程原理。
二、 实验内容: 1、实验原理 本实验原理图如图 1所示,8253A 的A0、A1接系统地址总线 A0、A1,故8253A 本实验通道2 有四个端口地址,如端口地址表 1所示。
8253A 的片选地址为 48H~ 4FH 。
因此, 仪中的8253A 四个端口地址为 48H 、49H 、4AH 、4BH ,分别对应通道 0、通道1、 和控制字。
采用8253A 通道0,工作在方式3(方波发生器方式),输入时钟CLK0为 输出OUTO 要求为1KHZ 的方波,并要求用接在 GATE0引脚上的导线是接地("0" 甩空("1"电平)来观察GATE 对计数器的控制作用,用示波器观察输出波形。
2、实验线路连接 (1) 8253A 芯片的CLK0引出插孔连分频输出插孔 (2) 8253A 的 GATE0 接+5V 。
实验步骤 (1) 按图1连好实验线路(2) 运行实验程序 1. 按“调试”按钮2. 选“窗口” “进入示波器窗口” ,然后最小化3. 按“运行按钮”4.将模拟示波器窗口打开,选择“串行口 2”,再按 Ctrl + F2按钮即可看到波形 显示“ 8253-1 ”用示波器测量8253A 的OUT2输出插孔,方波输出,幅值0〜4V 三、实验代码: 1MHZ ,电平)或 3、 CODE SEGMENT ASSUME CS:CODE TCONTRO EQU 004BH TCON2 EQU 004AH CONT PORT EQU 00DFH DATA PORT EQU 00DEH DATA1 EQU 0500H START: JMP TCONT TCONT: CALL FORMATCALL LEDDIS P MOV DX,TCONTRO1MHZ 。
微机原理实验四LED数码管显示实验
微机原理实验四LED数码管显示实验LED数码管显示实验是微机原理中的一项重要实验,通过该实验可以学习到数码管的工作原理以及如何通过控制数字信号来实现数字的显示。
本文将详细介绍实验所需材料和步骤,并解析实验原理。
一、实验材料1.STM32F407开发板2.数码管模块3.面包板4.连接线5.杜邦线二、实验原理数码管是一种能够显示数字的装置,它由七个发光二极管组成,分别代表数字0-9、通过控制这七个发光二极管的亮灭,可以显示出不同的数字。
在实验中,我们使用STM32F407开发板来控制数码管。
数码管模块通过引脚与STM32F407开发板进行连接,其中共阴数码管的引脚与开发板的GPIO引脚相连,通过控制GPIO引脚的高低电平来控制数码管的亮灭。
三、实验步骤1.在面包板上连接数码管模块。
将数码管模块的引脚与STM32F407开发板的相应引脚通过杜邦线连接。
具体连接方式可以参考数码管模块和开发板的引脚定义。
2. 打开STM32CubeMX软件,创建一个新工程。
选择适合的开发板型号,并进行引脚配置。
将引脚配置为通用输出模式,并将相应的引脚定义为控制数码管的引脚。
3. 在生成的代码中找到main.c文件,在其中添加控制数码管的代码。
首先需要引入相应的头文件,并定义控制数码管的引脚宏定义。
4. 在main函数中,初始化控制数码管的引脚为输出模式。
然后通过控制引脚的高低电平来实现数码管的亮灭。
四、实验结果与分析经过以上步骤,我们成功控制了数码管的显示。
数码管显示的数字由控制引脚的高低电平确定,通过改变控制引脚的电平可以实现不同的数字显示。
值得注意的是,数码管的亮灭是通过切换引脚的电平来实现的,当引脚为高电平时,数码管熄灭;反之,当引脚为低电平时,数码管亮起。
在实际应用中,可以通过编写代码来改变控制引脚的电平,从而实现字母、字符、动画等更加复杂的显示效果。
五、实验总结本次实验通过控制STM32F407开发板的GPIO引脚,成功实现了LED数码管的显示。
微机原理实验报告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个实验
+试验四一、实验目的掌握8253的基本工作原理和编程方法。
二、实验内容1.按图接线,将计数器0设置为方式0,计数器初值为N(N≤0FH,本例程中为0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用L0或逻辑笔观察OUT0电平变化,初始时OUT0为高电平,当输入N个脉冲时,OUT0变为低电平,当输入N+1个脉冲后OUT0变高电平)。
2按图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用电平指示灯L0或逻辑笔观察OUT1输出电平的变化,要求输出频率1HZ的分频信号。
;*************************;;* 8253方式0计数器实验 *;;*************************;ioport equ 0C400h-0280hio8253k equ ioport+283hio8253a equ ioport+280hcode segmentassume cs:codestart:mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io8253kout dx,almov dx,io8253a ;送计数初值为08Hmov al,08hout dx,allll: in al,dx ;读计数初值call disp ;调显示子程序push dxmov ah,06hmov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dxand al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否<=9jle num ;若是则为'0'-'9',ASCII码加30H add dl,7 ;否则为'A'-'F',ASCII码加37H num: add dl,30hmov ah,02h ;显示int 21hmov dl,0dh ;加回车符int 21hmov dl,0ah ;加换行符int 21hpop dxret;子程序返回disp endpcode endsend start;*******************;* 8253分频 *;*******************ioport equ 0C400h-0280hio8253a equ ioport+280hio8253b equ ioport+281hio8253k equ ioport+283hcode segmentassume cs:codestart:mov dx,io8253k ;向8253写控制字mov al,36h ;使0通道为工作方式3out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节mov al,ahout dx,al ;后写入高字节mov dx,io8253kmov al,76h ;设8253通道1工作方式2out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21hcode endsend start实验五一、实验目的掌握8255方式0的工作原理及使用方法。
微机原理实验报告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系统功能调用,学到了不少知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
发中断结束命令EOI
三、实验箱上相关电路 参看附3,了解TPC-1 型微机实验系统,掌握实验箱上 IBM PC/XT 总线、单脉冲电路和8MHz脉冲电路。 1、TPC-1型实验箱实物
图3-1 TPC-1型实验箱实物
18
60 芯 扁 平 电 缆 插 槽 J6
电源开关 U16 U42 GND +5v +12v -5v -12v IN6 IN7 EOC 500kHz CS
4
2. 关于任务2(1)
键盘中断类型号为09H,编写键盘硬中断程序要点是:
(1) 键盘接口按下键和释放键都向 8259A 发出中断申请
若满足响应条件:
对键盘上的一个按键操作(包括按下键和释放键), CPU 将执行两次键盘中断(按下键一次,释放键一次)。
(2) CPU 响应键盘中断时
可从 60H 端口读取按下键的扫描码,
13
(5) 有关8259A的编程: 设置中断屏蔽字
中断屏蔽寄存器的端口地址为21H。
通过改变中断屏蔽寄存器各位的值实现:
某位为0,允许该级中断申请进入; 某位为1,禁止该级中断申请进入。 例:新增允许IR2的中断申请 IN AND OUT AL,21H AL,11111011B 21H,AL ;读入原IMR的内容 ;新增允许IR2的中断申请 ;写入中断屏蔽寄存器IMR
release: …… MOV OUT POP IRET AL, 20H 20H,AL AX
;释放键处理 ;发中断结束
;恢复寄存器值(恢复现场) ;中断返回
8
(4) 在键盘中断处理程序的最后应发中断结束命令, 否则将屏蔽键盘中断。
9
3. 关于任务2 (2) 要用到定时和键盘两个中断源。
可在任务2(1)的基础上完成, 在键盘中断子程中,设置一个标志变量 flag, 用以区分是奇数次按键还是偶数次按键。 对奇数次按键,可重置 8259A 的屏蔽字,屏蔽定时 器中断,使 CPU 不再响应定时中断,从而停止了定时 显示功能;
TPC-1型实验箱面板布置图
19
3、PC总线信号
实验箱上有两个PC总线扩展插槽和一个PC总线信号引出插孔排。
GND RESET DRV +5V IRQ2 - 5V DRQ2 - 12V
+12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND B1 A1
依次检测 PC 总线上的中断申请插孔IRQ2~IRQ7, 确定哪些未被微机系统占用。
3
三、实验说明
1. 关于任务1
(1) 进行软中断程序设计最好使用DOS系统保留给用户应用 的中断类型,否则处理不当,会引起意想不到的后果。 (2) 用INT 60H即可调用60H中断子程 60H属于系统保留给用户的软中断类型号, 只要在中断向量表0 :460H单元中存放用户编写的60H中断 程序入口地址,用INT 60H即可调用60H中断子程 。
11
5. 有关8259A
(1)IBM PC 系列微机的可屏蔽中断系统由主板上的8259A 控制。 (2)8259A是一个可编程中断控制器
IBM PC和XT机使用1片8259A,可管理8个中断申请, IBM PC/AT及以上微机使用2片8259A级连,可管理15个中断申请。主 8259A的端口地址为20H和21H。
例:屏蔽IR7的中断申请 IN OR AL,21H AL,10000000B ;读入原IMR的内容 ;屏蔽IR7的中断申请
OUT
21H,AL
;写入中断屏蔽寄存器IMR
14
(6) 发中断结束命令EOI
通过往8259A的偶地址写入20H实现,
8259A的偶地址为20H,指令如下: MOV AL,20H OUT 20H,AL
2 .可屏蔽硬中断程序设计
(1) 改写键盘硬中断子程 每按下一个键,在屏幕上将该键对应的扫描码
以二进制形式显示出来。
(2) 利用键盘控制定时显示功能 每隔1秒钟显示字符串’Can I help you ? ’,
当按下一个键时,则停止定时显示功能,
再按下一键时,恢复定时显示功能。
2
(选作)
用TPC-1 型微机实验箱上单脉冲电路产生的正脉冲信 号做中断源,
20
4.8MHz脉冲电路
该电路提供 8MHZ 脉冲,标有 8MHZ 的插孔为该脉冲 的输出端。
360
11
Ω 10 0.01μ
360 Ω
13 12 9 8
8MHz
8MHz 晶振
U34 74LS04
图
4
8MHz脉冲电路
21
5.单脉冲电路
该电路提供正负单脉冲。 附近按扭为单脉冲产生按扭,每按一次产生一个单脉冲, 标有“ ”的插孔输出正单脉冲,标有 “ ”的插孔 输出负单脉冲。
GATE2 GATE1 OUT3 OUT2 OUT1
CLK1 CLK2 CLK3
GATE3
CS A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 U14 U13 1 J4 U28 RES U33 U32 CS 1 J3 1 J2 JS DRQ U20 U15 U43 U38 200-207
或恢复原中断向量,或通过设置8259A的中断屏蔽字屏蔽对此级中断源 的反应。
• 中断子程中,处理中断源请求的任务,在中断返回前,应发中断结束 命令EOI。
图1和图2分别是可屏蔽硬中断的主程序和中断子程序流程图。
16
开始 CLI关中断 开始 保存现场
保存原中断向量
设置新中断向量 设置8259A的中断屏蔽字 中断子程有关量的初始化 恢复现场 STI开中断 IRET中断返回 主程其它工作处理 (可用双重循环延时代替) 恢复原中断向量 图2 中断子程流程图 返回DOS 图1 主程序流程图 17 完成中断源 申请的任务
U37 74LS138 208-20F 210-217 218-21F
U10
U44 220-227 228-22F 230-237 A Q7 238-23F B 74 LS 393 Q3 Q2 Q1
U27 U26 U29 PB2 PB1 U30 U31 Q6 Q5
Q4
TxRDY U45 TxE Q15
Q9
Q8 U40 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 U41 L11 L12
12 个 发 光 二 极 管
K1 PC4 PC5 PC6 PC7
K2 K3 K4
K5 K6 K7 K8
K9
K10 K11 K12
PB3
PB4
PB5
PB7 3 PB6
图3-2
PC0
PC1
PC2
PC3
12 个 逻 辑 电 平 开 关
(4) 每片8259A有8个中断申请输入端IR0~IR7
主8259A的连接情况如下: IR0 与主板上的8253计数器0相连,该计数器输出频率 为18.2hz的方波。 IR1 与键盘接口发出的中断申请相连。
IR2 ~ IR7 分配给其它外设,或未使用。
在PC总线上可由插孔IRQ2~IRQ7引入中断申请信号。
可调电阻
U34
2、实验箱面板布置图
U7 U18 U1 U2 U3 U6 U4 U9
IN0 IN1
CS
IN2 IN3 IN4 IN5
8MHz 面包板
DAC0832
AOUT
ADC 0809
PC 总 线 插 槽 1
PC 总 线 插 槽 2
PC 总 线 插 孔 排
U11
RAM 6116
U39 DMA
8253
可据扫描码的最高位确定是按下键操作还是释放键操作,
最高位为 1 (扫描码为断码),则说明是释放键引起的中断;
最高位为 0 (扫描码为通码),则说明是按下键引起的中断。
5
(3) 若在IBM PC和XT上
在读取扫描码后,应置键盘应答信号,键盘接口才能 为接收下一个键做好准备。置键盘应答位的方法是:
先将 61H 端口的最高位置 1, 再将 61H 的最高位置 0。 原理可参看键盘接口有关资料。
;发中断结束
;恢复寄存器值(恢复现场) ;中断返回 7
在AT及以上微机,去掉键盘应答部分,键盘中断处理程序可简化为:
PUSH AX IN TEST JNZ …… AL,60H AL,80H release
;保存寄存器值(保存现场) ;读扫描码 ;检查是按下键还是释放键,即是通码吗? ;不是通码则转去作释放键处理 ;按下键处理
(3)BIOS对主8259A的设置如下:
边沿触发方式,当输入端IR0~IR7出现上升沿信号时,发出中断申 请信号。 中断向量初值为08H,IR0~IR7对应的中断类型号为08H~0FH。 固定优先级,IR0优先级最高,IR7优先级最低。 一般屏蔽方式,用中断屏蔽寄存器IMR控制各级中断的允许或屏 蔽。 一般全嵌套方式,中断服务结束时,需发中断结束命令EOI,清 12 除ISR中的记录,否则屏蔽同级或低级的中断。
;置键盘应答
;使61H口最高位为1
OUT
TEST JNZ …… release: …… MOV OUT POP IRET
61H,AL
AH,80H release
;使61H口最高位为0
;检查是按下键还是释放键,即是通码吗? ;不是通码则转去作释放键处理 ;按下键处理 ;释放键处理
AL,20H 20H,AL AX
5 4
6 U42 74LS00
1
2 U34 74LS04
3
4
3.6k
+5V
图 5 单脉冲电路