微机原理课程设计_进制转换程序设计
微机原理课程设计总结

微机原理课程设计数据采集系统(中断法)一、课设目的:进一步掌握微机原理知识,了解微机在实时采集数据的应用,学习掌握编程和程序调试的方法。
二、课设内容和要求:用中断法将ADC0809通道0外接0—5V电压,转换成数字量后,在七段数码管LED上显示。
以小数点后两位表示精度,显示模拟电压的十进制;0809通道0的数字量以线性控制方式DAC0832输出,当通道0的电压为5V时,0832的OUT为0V当通道0的电压为0时,0832的OUT为2.5V;此模拟电压再送到ADC0809通道1,转换后的数字量在CRT上以十六进制显示。
ADC0809的采样脉冲CLK由定时器8254的OUT0提供;ADC0809的EOC信号用作8259中断请求信号。
三、总体设计:1)、ADC0809的IN0采集电位器0—5V电压,IN1采集0832输出的模拟量。
2)、DAC0832将ADC0809的IN0数字量重新转换成模拟量输出3)、8259用于检测ADC0809转换是否结束和向CPU发送INTR信号4)8255为七段LED数码管显示提供驱动信息5)、七段LED数码管显示ADC0809的IN0的值6)8254提供ADC0809的采样时钟脉冲。
四、硬件设计:因采用PC机和微机实验箱,硬件电路设计相对比较简单,主要利用微机实验箱上的8255并行口,ADC0809,DAC0832,七段数码管LED,8254定时/计数器,74LS574输出接口,电位器等单元(图1:数据采集系统硬件连接示意图)六、软件设计:本设计通过软件编程,实现模/数转换,0809分别对IN0 0—5V直流电压的采样和经线性控制后输出电压IN1采样,IN0的值转换成十进制后,在七段数码管LED上显示IN1的值。
CPU根据IN0的值,使八位二极管根据课设要求指示相应的范围。
1、设计思想:数据采集系统分成四个功能模块分别是主程序模块、量纲转换模块、数码管显示模块、中断服务子程序模块。
键盘录入数据的转换与显示程序设计说明书

OUT_ASC_SUMDB 6 DUP(?),'$';将二个数的和转换为ASCII码后,放于此 处,以供9号调 用显示
DATAENDS
MOV AX,DATA
MOV DS,AX;设置DS
MOV DX,OFFSET INPUT1;取第一个输入数的首地址
MOV AH,09H
INT 21H;提示输入一个数
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H;读取第一个数
MOV CX,3;设置次数
在程序得到正确的结果之前,会产生一些错误,只有经过调试阶段才能纠正程序中的错误,从而的到正确的结果。在程序编译过程中会提示语法错误,可再用编辑程序来修改源程序中的错误。当没有语法错误而得不到正确结果时,可用调试程序DEBUG来调试。它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
LOOP LP循环LP,读取出第一个数
模块二:输入第二个数
MOV B_BUF1,AX
MOV DX,OFFSET INPUT2;取第二个输入数的首地址
MOV AH,09H
INT 21H;提示输入二个数
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H;读取第二个数
MOV CX,3;设置次数
ADD AX , BIN_BUF1;计算这二个数之和
CALL BIN_TO_ASCII;将和转换为ASCII码,以供显示用
微机原理课设报告

中南大学微机原理课程设计报告一、课程设计目的通过本次课程设计要掌握8088,8255,0809,0832,8279 等多种芯片使用的方法,灵活运用课本知识,加深所学的知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解,学会利用课本知识联系实际应用及编程。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
二、课程设计任务本次课设选题为“模拟电压采集,直流电机控制”。
根据我自己对这个课题的理解,我认为这个课题应该实现以下的要求:基本要求:1、对模拟电压进行采集转换为数字信号,并实时显示。
2、用转换的到的数字信号再经数模转换,对直流电机进行控制。
拓展要求:1、通过发光二极管作为信号指示灯,实时的指示直流电机的工作状态是否正常。
2、建立报警电路,对电机非正常工作情况以及反转工作情况下进行报警。
三、设计思想与原理1、设计思想本次课设选题为“模拟电压采集,直流电机控制”,基本分为两大部分:模拟量采集的模数转换部分,以及电机控制中的数模转换部分。
而为了让模拟量的采集结果更加明显可察,将加入数码管显示模块,实时显示模拟量采集的大小情况。
与此同时,在选题基础上添加了直流电机工作状态指示灯电路和报警电路。
2、设计原理根据试验箱相关配置,取电位器0~5V 可调电压为模拟量输出模块,可线性调节输出。
取芯片ADC 0809 对采集到的模拟信号进行模数转换,将0~5V 的电压信号转为00~FF 的数字信号,并通过8279 键盘扫描输出模块进行相应的显示输出。
得到转换后的数字量之后,使用DAC0832 数模转换芯片进行数模转换,并将所得模拟量输出到直流电机控制端,进行电机驱动。
对于添加的模块,主要通过8255 芯片来实现,取8255 的PA0 口作为输出端口,连接试验箱上的开关量输入显示区的发光二极管。
对A口分别赋值01H (直流电机正向非正常工作)、02H(直流电机正常工作)、04H(直流电机反向非正常工作)并输入给开关量输入显示区的发光二极管,驱动前三个二极管在电机的三种工作状态下分别发光,从而实现指示灯电路。
微机原理-数码转换实验报告

微机原理-数码转换实验报告-CAL-FENGHAI.-(YICAI)-Company One1实验九数码转换一、实验目的1、掌握计算机常用数据编码之间的相互转换方法。
2、进一步熟悉DEBUG软件的使用方法。
二、实验内容1、ACSII码转换为非压缩型BCD码2、BCD码转换为二进制码3、十六进制数转换为ASCII码三、实验1、ACSII码转换为非压缩型BCD码DATA SEGMENT PARA 'DATA'DATA1 DB 8 DUP()DATA2 DB 8 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,SEG DATA1MOV DS,AXMOV DX,DATAMOV AH,0AHINT 21HLEA SI,DATA1MOV CL,[SI+1]LEA DI,DATA2ADD SI, 2CHK: MOV AL,[SI+2]CMP AL, '0'JB L01CMP AL, '9'JA L01SUB AL,30HMOV BL,ALMOV [DI], BLINC SIINC DIDEC CXJNZ CHKL01: MOV BL, 0FFHLOOP CHKMOV AH,4CH INT 21H CODE ENDSEND START2、BCD码转换为二进制码DATA SEGMENTBCD DB 1,2,3,4,5A DWDATA ENDSSTACK SEGMENT PARA STACK''STACK''STAPN DW 50 DUP()STACK ENDSCODE SEGMENTMAIN PROC FARASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXCALL CONVERTMOV A,BXRETMAIN ENDPCONVERT PROC NEARPUSH SIPUSH CXPUSH AXMOV SI,4L1:MOV AL,BCD[SI]CBWXCHG AX, BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXDEC SIJNZ L1POP AXPOP CXPOP SIEXIT:MOV AH,4CH INT 21H CONVERT ENDP CODE ENDSEND START3、十六进制数转换为ASCII码DATA SEGMENTDATA1 DW 2010HDATA2 DB 4 DUP()DATA ENDSSTACKS SEGMENT PARA STACK 'STACK'STACKS ENDSCODES SEGMENTASSUME SS:STACKS,CS:CODESASSUME DS:DATASSTART: MOV AX, DATAMOV DS, AXLEA SI, DATA1MOV AX, [SI]MOV CL, 12SHR AX, CLMOV BL, ALCALL ASCMOV DATA2, BLCALL XSMOV AX, [SI]MOV CL, 8SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+1, BLCALL XSMOV AX, [SI]MOV CL, 4SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+2, BLCALL XSMOV AX, [SI]AND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+3, BLCALL XSMOV AH, 4CHINT 21HASC PROCCMP BL, 0AH JC LPADD BL, 07H LP: ADD BL, 30H RETASC ENDPXS PROCMOV DL, BL MOV AH, 02H INT 21HRETXS ENDPCODE ENDSEND START4、六进制数转换为十进制DATAS SEGMENTSTRING1 DB 0DH,0AH,'$'STRING2 DB 0DH,0AH,'$'DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET STRING1MOV AH,9INT 21HMOV CL,10HMOV BX,0NEWCHAR:MOV AH,1INT 21HSUB AL,30HJB DISPCBWXCHG AX,BXMOV CH,0MUL CXXCHG AX,BXADD BX,AXJNC NEWCHARDISP:MOV DX,OFFSET STRING2MOV AH,9INT 21HMOV CX,10000AGAIN:MOV DX,0MOV AX,BXDIV CXMOV BX,DXMOV DL,ALADD DL,30HCMP DL,39HJLE NEXTADD DL,7H NEXT:MOV AH,2INT 21HMOV DX,0MOV AX,CXMOV CX,10DIV CXMOV CX,AXCMP CX,0JNZ AGAINMOV AH,4CH INT 21H CODES ENDS END START5、十进制转换成七段码DATA SEGMENTDATA1 DB 3,4TABLE DB 23H,56H,42H,75H,00H,24H,67H,39H,20H DATA2 DB 2 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA ST: MOV DI, OFFSET BUFDAMOV CL, 80HMOV BX, OFFSET TABLE DISI: MOV BL, [DI+0]MOV AX, BXXLATMOV DX, PORTSEGOUT DX, ALMOV AL, CLMOV DX, PORTBITOUT DX, ALPUSH CXMOV CX, 30HDELAY: LOOP DELAYPOP CXCMP CL, 20HJZ QUITINC DISHR CL, 1JMP DISIQUITCODE ENDSEND ST。
微机原理实验报告-两个多位十进制数相加的实验等.doc

微机原理实验报告-两个多位十进制数相加的实验等微机原理实验报告班级:学号:姓名:实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序流程图图3-1四、参考程序清单DATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END E QU $-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],30HADD BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ A D3RETADDA ENDP CODE ENDSEND S TART五、实验结果分析我们计算的结果是:84256他们结果是一样的。
《微机原理与接口》实验报告模板

《微机原理与接口》实验报告学院:信息学院专业:班级学号:学生姓名:实验日期:指导老师:五邑大学信息学院接口与通信实验室实验一一、实验名称:微机原理实验平台操作及汇编程序设计二、实验目的:1、了解MFID实验平台组成结构及使用方法;2、熟悉MFID实验平台的工作原理和MF2K编程环境;3、熟悉80X86的汇编语言程序设计方法;4、掌握BCD码转换为二进制的的原理及汇编程序设计;5、理解INT 21H DOS 字串显示功能的调用。
三、实验内容:1、MFID实验平台MF2K编程环境的熟悉2、屏幕输出字串的简单汇编程序设计3、进行汇编语言程序的编辑、汇编、连接和运行实验;4、编制16进制转换为ASCII码的子程序HEX_ASCII;5、编制BCD转换为二进制的子程序BCD_B;6、调用BCD_B和HEX_ASCII子程序完成十进制数转换为二进制数四、实验设备:MFID 微型计算机与接口技术实验平台五、实验步骤:1、进入MF2K汇编语言开发环境,开始汇编程序设计;2、设计主程序框架:堆栈段、数据段和代码段;3、设计“字符串显示程序”,调试并在屏幕自己的“班级”、“学号”及“名字”的拼音字母;4、设计“十六进制转换为ASCII码子程序”HEX_ASCII,调试并通过5、设计“BCD码转换为二进制子程序”BCD_B;6、在主程序中将自己的“班级号+学号”定义成4位BCD码然后调用BCD_B子程序转换为二进制;7、调用HEX_ASCII在屏幕上显示学号转换的运行结果。
六、实验结果1、调试通过的汇编实验程序源代码如下:[将源代码粘帖到下面]2、班号学号屏幕输出结果:3、四位BCD班号+学号:5123 转换结果:七、分析讨论(不少于200字)八、本次实验成绩。
微机原理实验报告(江苏大学)
微机原理课程设计报告专业:学号:姓名:一:课程设计目的结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对微型计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。
学会使用命令调用DOS观察程序运行结果,学会使用汇编语言编写程序,弄懂汇编程序的执行过程,弄懂汇编程序的上机过程以及如何运用MASM软件进行汇编程序的调试。
二:设计内容1.字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。
详细源程序如下:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTS1 DB'MATCH',0DH,0AH,'$'S2 DB'NO MATCH',0DH,0AH,'$'S3 DB'INPUT STRING1:',0DH,0AH,'$'S4 DB'INPUT STRING2:',0DH,0AH,'$'MAXLEN1 DB 81ACTLEN1 DB?STRING1 DB 81 DUP (?)MAXLEN2 DB 81ACTLEN2 DB?STRING2 DB 81 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AH,09HMOV DX,OFFSET S3INT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN1INT 21HCRLFMOV AH,09HMOV DX,OFFSET S4INT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN2INT 21HCRLFMOV SI,OFFSET STRING1MOV AH,[SI-1]MOV DI,OFFSET STRING2MOV AL, [DI-1]CMP AH,ALJGE GE1MOV CL,ALGE1: MOV CL,AHKKK: MOV AL,[SI]mov AH,[DI]CMP aH,ALJNZ NE1INC SIINC DILOOP KKKMOV AH,09HMOV DX,OFFSET S1INT 21HJMP EXITNE1: MOV AH,09HMOV DX,OFFSET S2INT 21HEXIT: MOV AX,4CHINT 21HCODE ENDSEND START以下是程序运行结果:2.从键盘输入数据并显示的设计为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII 码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。
AD课程设计-- 八路模拟量转换为数字量电路设计
微机原理课程设计说明书11 级电气工程及其自动化专业 972 班级题目八路模拟量转换为数字量电路设计2011年12 月26 日摘要随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的作用。
多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。
本课程设计是基于微机原理与接口技术的简单应用。
运用所学的微机原理和接口技术知识完成ADC0809的采样,即基于0806最小系统将模拟电压表通过ADC0809的采样完成模拟量转换成的数字量并显示出来。
通过硬件与软件的结合,用我们刚刚学过的汇编语言编写程序模拟分析了ADC0809的芯片功能和硬件配置,结合硬件和软件阐述了该系统的工作原理,得出了一种简单实用的ADC0809的采样即实现数字电压表功能系统的硬件、软件电路设计方案。
该系统能测量0~5V的电压,结果显示于数码管上。
关键字:ADC0809、8086系统、频率发生器前言 (4)1.题义分析与解决方案 (5)1.1题义与需求分析 (5)1.2解决问题的方法与思路 (5)1.2.1硬件部分 (5)1.2.2软件部分 (5)2.硬件设计 (5)2.1电路原理 (5)2.2 8086最小系统模块 (6)2.3可编程并行接口芯片8255A (7)2.3.1 8255A的作用 (7)2.3.2 8255A的功能分析及技术参数 (7)2.4 模数转换芯片ADC0809 (9)2.4.1 ADC0809的内部结构和外部引脚 (9)2.5 模拟量( 0~5V)电压输出 (11)2.6 频率发生器 (11)2.7 七段LED显示器 (12)2.7.1 七段LED显示器的作用、功能分析及结构 (12)2.8 硬件总逻辑图及说明 (13)3.汇编程序设计 (14)3.1控制程序设计思路说明 (14)3.2 程序流程图 (15)4.ADC0809采样系统的设计总结 (21)附录: (23)1、8086最小系统框图 (23)2、0809功能模块框图: (24)3、接口与显示模块框图 (24)4. 程序流程图 (25)前言电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。
微机原理课教材
微机原理课1讲教案绪论§1-1 计算机的发展概况及分类§1-1-1 计算机的发展概况1946年,第一台计算机在美国诞生,至今已有近60年的历史。
60年来,计算机经历了迅猛的发展,得到了广泛的普及,对整个社会的进步和科学的发展产生了极其深远的影响。
在此期间,计算机经历了电子管计算机时代、晶体管计算机时代、集成电路计算机时代、大规模及超大规模集成电路计算机时代。
计算机的功能已经从早期的数值计算、数据处理发展到可以进行知识处理的人工智能阶段,不仅可以处理文字、字符、图形图象信息,而且可以处理音频、视频信息,形成了智能化的多媒体计算机。
在推动计算机技术发展的诸多因素中,除了计算机的系统结构和计算机的软件技术发展起到了重要的作用之外,电子技术特别是微电子技术的发展也起到了决定性的作用。
70年代初,随着大规模集成电路的出现,原来体积很大的中央处理器(CPU)电路集成为一个只有十几平方毫米的半导体芯片,称为微处理器(MPU)。
微处理器的出现,开创了微型计算机的新时代。
以微处理器为核心,再配上半导体存储器(RAM、ROM)、输入/输出接口电路(I/O接口电路)、系统总线以及其他支持逻辑,这样组成的计算机,称为微型计算机。
微型计算机的出现,是计算机技术发展史上的一个新的里程碑,为计算机技术的发展和普及开辟了崭新的途径。
由于微型计算机具有体积小、重量轻、价格便宜、耗电少、可靠性高、通用性和灵活性好等特点,加上超大规模集成电路工艺技术的迅速发展和成熟,使微型计算机技术得到了极其迅速的发展和广泛的应用。
从1971年美国INTEL公司首先研制成功世界上第一块微处理器芯片4004以来,在头十年中,差不多每隔2~3年就推出一代新的微处理器芯片,如今已经推出了多代微处理器产品。
微处理器是计算机的核心部件。
它的性能在很大程度上决定了微型计算机的性能,因此,微型计算机的发展是以微处理器的发展来更新换代的。
第一代(1971~1973)微处理器和微型计算机是4位微处理器和低档8位微处理器时代。
键盘录入数据的转换与显示程序设计说明书
课院专班姓学起指word完美格式南京工程学院止导课程设计报告书程名称微机原理及应用B(系、部、中心)自动化学院精心整理学习帮手-i -五•系统模块详细设计与调试:一).模块设计模块一.输入第一个数:MOV AH,09HINT 21H通过调用DOS系统的01H号功能--―键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中详细设计方案:DATA SEGMENTINPUT1 DB 0DH,0AH,'PLEASE IUPUT A FIRST NUMBER FROM -9999 TO9999!$' ;输入第一个数,在-9999至+9999范围内IN_ASC_BUF DB 6 ; 十进制数的输入缓冲区,共可接收6个字符DB ? ;保留,用于10号调用时DO蘋入实际输入字符个数DB6 DUP⑺,'$ ' ;一个符号位,四位数字ASCII码,加上一个回车符,共计6字符IN_ASC_BUF1 DB 6DB ?DB 12 DUP⑺,'$'B_BUF1 DW ? ; 将第一个数转换为一进制后,放于此处INPUT2 DB 0DH,0AH,'PLEASE IUPUT THE SECOND NUMBER FROM -9999TO 9999!$' ;输入第二个数,在-9999 至+9999范围OUT_ASC_SUM DB 6 DUP⑺,'$';将二个数的和转换为ASCII码后,放于此处,以供9号调用显示DATA ENDSMOV AX,DATAMOV DS,AX ;设置DS;取第一个输入数的首地址MOVDX,OFFSETNPUT1MOV AH,09HINT 21H ;提示输入一个数MOV DX,OFFSET IN_ASC_BUFMOV AH,0AHINT 21H 读取第一个数MOV CX,3 ;设置次数MOV DI,OFFSET IN_ASC BUF+2将第一个数的第一个字符LP1: MOV DX,OFFSET IN_ASC_BUFMOV AH,0AHINT 21H ;MOV CX,3MO\DI,OFFSETIN_ASC_BUF+2MO\SI,OFFSET IN_ASC_BUF1+7 MOV AX,[DI]MOV [SI],AXINC SIINC SIINC DIINC DILOOP LP1读取第二个数 ;设置次数 将第二个数的第一个 字符放于目的数 据区指针中 将第二个数的第一个 字符放于源数据 区指针中地址内容送入AX循环LP1,读取出第一个数模块二:输入第二个数针中 MOVSI,OFFSETIN_ASC_BUF1+2; 将第二个数的第一个字符 LP: MOV AX,[DI]放于源 数据区指针中 地址内容送入AX MOV [SI],AXINC SIINC SIINC DIINC DILOOP LP 循环LP,读取出第一模块二:输入第二个数个数MOV B_BUF1,AXMOV DX,OFFSETNPUT2 ; 取第二个输入数的首地MOV AH,09HINT 21H ; 址提示输入二个数模块三•两个二进制数求和并显示和:显示结果:MOV AH,09HMOV DX, OFFSET OUT_ASC_SUMINT 21HADD AX , BIN_BUF1 CALL BIN_TO_ASCII(((0*10+3)*10+5)*10+8) 要求补。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书学生姓名:易杨专业班级:电信 0802 指导教师:曾刚工作单位:信息工程学院题目:进制转换程序设计初始条件:具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、程序实现二进制、十进制、十六进制之间的转换2、在命令提示下输入相应进制数,回车后进行转换3、输入错误时应声响报警并拒绝输入4、程序采用汇编语言在PC机上完成5、完成符合学校要求的设计说明书时间安排:一周,其中2天程序设计,2天程序调试,1天完成课程设计报告书及答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1原理分析 (1)2程序设计流程 (3)2.1程序流程图 (3)2.2设计思路 (4)3程序设计 (5)3.1堆栈段数据段程序设计 (5)3.2主程序设计 (5)3.3输入二进制程序 (7)3.4输入十进制程序 (8)3.5输入十六进制程序 (8)3.6输出二进制程序 (9)3.7输出十进制程序 (9)3.8输出十六进制程序 (11)3.9回车键确定程序 (11)3.10报警程序 (12)4运行结果 (13)5心得体会 (15)参考文献 (16)摘要日常生活与实际应用中,往往需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。
但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析是不那么方便的。
本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,实现二进制、十进制与十六进制之间的相互转换,并在MF2KP软件上演示。
关键词:汇编程序进制转换MF2KP1 原理分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
数码是用不同的数字符号来表示一种数制的数值,这些数字符号称为”数码”。
基是数制所使用的数码个数称为”基”。
权是某数制每一位所具有的值称为”权”。
十六进制(Hexadecimal) 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F十进制(Decimal) 0.1.2.3.4.5.6.7.8.9八进制(Octal) 0.1.2.3.4.5.6.7二进制(Binary) 0.1在计算机内部采用二进制计数制,但在实际应用中,需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。
但在计算机中采用的是二进制计数制。
本次课程设计通过所学的微机原理,用汇编语言编写程序,实现二进制转换成十进制或十六进制,十进制转换成二进制或十六进制,十六进制转换成二进制或十进制。
十进制转换为二进制整数部分的方法叫做除2取余法,每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
小数部分的方法叫乘2取整法,就是将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。
换句话说就是0舍1入。
读数要从前面的整数读到后面的整数。
二进制转换为十进制不分整数和小数部分,方法(按权相加法)是将二进制每位上的数乘以权,然后相加之和即是十进制数。
二进制转换为十六进制用取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,得到的数就是一位十六位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。
如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。
将十六进制转换为二进制,取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。
十进制转换成十六进制的方法与十进制转换成二进制的方法相同,但不同的是每次除以16。
2 程序设计流程2.1 程序流程图2.2 设计思路首先对原理进行分析,了解不同进制数之间是如何进行转换。
充分认识汇编语言的指令系统,掌握各个汇编指令的功能及用法,了解各种程序结构(顺序、分支、循环和子程序)的特点。
首先定义堆栈段,再定义数据段,在数据段中输入MENU中要显示的内容。
再建一个表TABLE,TABLE中的内容为L0,L1,L2,L3,L4,L5,L6把然后根据题目要求设计简单的程序流程图,再根据流程图设计出每一模块的汇编语言程序,然后再通过调用、跳转、转移等方法将各个子程序连接在一起。
这样依据题目要求的汇编程序就初步完成了,本次用到的软件是MF2KP,首先在MF2KP环境下输入设计的汇编程序,然后编译、连接、运行。
3 程序设计3.1 堆栈段数据段程序设计首先定义堆栈段的程序,程序如下所示:STACK SEGMENT STACKDB 200 DUP(?)STACK ENDS在数据段中有后面程序要用到的数据MENU,mess1到mess6和error,还有数据表TABLE。
定义数据段程序如下所示:DATA SEGMENTMENU DB 'Please Input your Choice:',0dh,0ahdb '1: Bin2 -->Dec10',0dh,0ahdb '2: Bin2 -->Hex16',0dh,0ahdb '3: Dec10 -->Bin2',0dh,0ahdb '4: Dec10 -->Hex16',0dh,0ahdb '5: Hex16 -->Bin2',0dh,0ahdb '6: Hex16 -->Dec10',0dh,0ahdb '0: Exit. $'mess1 db 'Please input a Bin2 number:$'mess2 db 'Please input a Dec10 number:$'mess3 db 'Please input a Hex16 number:$'mess4 db 'Output Bin is: $'mess5 db 'Output Dec is: $'mess6 db 'Output Hex is: $'error db' error!please input your choice again$'TABLE DW L0,L1,L2,L3,L4,L5,L6DATA ENDS3.2 主程序设计在定义完堆栈段和数据段后,就是主程序的设计。
首先对寄存器AX清零,压栈。
读取数据,在屏幕上显示字符串MENU,根据MENU的提示,从键盘输入一字符串。
将该字符串减30H后于7进行比较,若小于7,则跳转到DONE程序,否则调用报警程序,发出声音报警并提示error。
在DONE程序中,若输入的数字为1,则立即跳转到L1,进行二进制转化为十进制;若输入的数字为2,则跳转到L2,进行二进制转换为十六进制;若为3,则跳转到L3进行十进制转换为二进制;若为4,则跳转到L4进行十进制转换为十六进制;若为5,则跳转到L5进行十六进制转换为二进制;若为6,则跳转到L6进行十六进制转换为十进制;如果为零,则退出程序,结束。
主程序的设计如下所示:CODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSXOR AX,AX ;清零PUSH AXMOV AX,DATAMOV DS,AXLKS:LEA DX,MENU ;取存储区首址MOV AH,09H ;显示字符串INT 21HMOV AH,01H ;从键盘输入字符串INT 21HSUB AL,30HCMP AL,07hJB DONE ;AL小于07H跳转到DONECALL SOUNDF ;调用报警程序LEA DX,errorMOV AH,09H ;显示字符串errorINT 21HJMP MAINDONE:LEA SI,TABLEMOV AH,0SHL AX,1ADD SI,AXJMP [SI];二进制转换成十进制L1:CALL INBIN ;调用输入二进制程序CALL CRLFCALL OUTDEC ;调用输出十进制程序CALL CRLFJMP LKS ;直接跳转到LKS;二进制转换成十六进制L2:CALL INBIN ;调用输入二进制程序CALL CRLFCALL OUTHEX ;调用输出十六进制程序CALL CRLFJMP LKS;十进制转换成二进制L3:CALL INDEC ;调用输入十进制程序CALL CRLFCALL OUTBIN ;调用输出二进制程序CALL CRLFJMP LKS;十进制转换成十六进制L4:CALL INDEC ;调用输入十进制程序CALL CRLFCALL OUTHEX ;调用输出十六进制程序CALL CRLFJMP LKS;十六进制转换成二进制L5:CALL INHEX ;调用输入十六进制程序CALL CRLFCALL OUTBIN ;调用输出二进制程序CALL CRLFJMP LKS;十六进制转换成十进制L6:CALL INHEX ;调用输入十六进制程序CALL CRLFCALL OUTDEC ;调用输出十进制程序CALL CRLFJMP LKSL0:RETMAIN ENDPCODE ENDS ;代码段结束END START ;程序结束3.3 输入二进制程序二进制数从键盘键入之后只需要直接完成从键盘向内存的循环输入即可,其代码如下:INBIN PROCLEA DX,MESS1MOV AH,09H ;显示字符串MESS1INT 21HMOV BX,0INBL1:MOV AH,01H ;从键盘输入字符INT 21HCMP AL,0DH ;比较输入的是否是回车键JZ INBEXIT ;等于零(回车键)跳转到INBEXITAND AL,01H ;保留低四位SHL BX,1 ;逻辑左移一位OR BL,ALJMP INBL1INBEXIT:RETINBIN ENDP3.4 输入十进制程序十进制数从键盘键入之后需要进行乘法运算之后转换成二进制数,再完成从键盘向内存的循环输入,其代码如下:INDEC PROCLEA DX,MESS2MOV AH,09H ;显示字符串MESS2INT 21HMOV BX,0INDL1:MOV AH,01H ;从键盘输入字符INT 21HCMP AL,0DH ;比较输入的是否是回车键JZ INDEXIT ;等于零(回车键)跳转到INDEXITSUB AL,30HCMP AL,9JBE INDL2 ;小等于9跳转到INDL2SUB AL,7INDL2:MOV AH,0XCHG AX,BX ;AX BX交换MOV CX,10MUL CX ;AX乘以CXADD BX,AXJMP INDL1INDEXIT:RETINDEC ENDP3.5 输入十六进制程序十六进制数从键盘键入之后需要进行从1位变为4位的移位运算转换成二进制数,再完成从键盘向内存的循环输入,其代码如下:INHEX PROCLEA DX,MESS3MOV AH,09H ;显示字符串MESS3INT 21HMOV BX,0IHL1:MOV AH,01H ;从键盘输入字符INT 21HCMP AL,0DH ;比较输入的是否是回车键JZ IHEXIT ;等于零(回车键)跳转到IHEXITSUB AL,30HCMP AL,9JBE IHL2 ;如果AL小等于9跳转到IHL2SUB AL,7IHL2:MOV CL,4SHL BX,CL ;BX逻辑左移CL位OR BL,ALJMP IHL1IHEXIT:RETINHEX ENDP3.6 输出二进制程序将内存中存储的2进制数输出为2进制数,只需要将内存中所存储的码循环输出显示出来即可,其代码如下:OUTBIN PROCLEA DX,MESS4MOV AH,09H ;显示字符串MESS4INT 21HMOV CX,16OBL1:ROL BX,1 ;BX循环左移一位MOV DL,BLAND DL,01HOR DL,30HMOV AH,02H ;字符输出INT 21HLOOP OBL1 ;循环OBL1RETOUTBIN ENDP3.7 输出十进制程序将内存中存储的2进制数输出为10进制数,需要将内存中的码进行除法运算,再循环输出显示,其代码如下:OUTDEC PROCLEA DX,MESS5MOV AH,09H ;显示字符串MESS5INT 21HPUSH BX ;压栈MOV AX,BXMOV DX,0MOV CX,10000DIV CX ;AX除以CXMOV BX,DXMOV DL,ALOR DL,30HMOV AH,02HINT 21HMOV AX,BXMOV DX,0MOV CX,1000DIV CXMOV BX,DXMOV DL,ALOR DL,30HMOV AH,02HINT 21HMOV AX,BXMOV DX,0MOV CX,100DIV CXMOV BX,DXMOV DL,ALOR DL,30HMOV AH,02HINT 21HMOV AX,BXMOV CL,10DIV CLMOV BL,AHMOV DL,ALOR DL,30HMOV AH,02HINT 21HMOV DL,BLOR DL,30HINT 21HPOP BXRETOUTDEC ENDP3.8 输出十六进制程序将内存中存储的2进制数输出为16进制数,需要将内存中的码进行移位运算,将4位2进制数合并为1位16进制数,再循环输出显示,其代码如下:OUTHEX PROCLEA DX,MESS6MOV AH,09H ;显示字符串MESS6INT 21HMOV CX,4OHL1:ROL BX,1 ;循环左移ROL BX,1ROL BX,1ROL BX,1MOV DL,BLAND DL,0FH ;保留低四位ADD DL,30HCMP DL,39HJBE OHL2ADD DL,7OHL2:MOV AH,02HINT 21HLOOP OHL1RETOUTHEX ENDP3.9 回车键确定程序当输入指定数制的数之后,需要依靠此程序来确定输入完成并执行转换过程并输出,其代码如下:CRLF PROCMOV AH,02H ;输出字符MOV DL,0DH ;确定(回车键)INT 21HMOV DL,0AH ;键盘缓冲输入INT 21HRETCRLF ENDP3.10 报警程序当输入的数不在所选范围(即数字0~6)时,会启动此程序进行报警并恢复到出错前的状况,其代码如下:SOUNDF PROC NEARIN AL,61H ;取得设备控制寄存器开关量MOV BL,ALMOV AL,0B6HOUT 43H,AL ;写入方式控制字MOV AX,1000H ;输出频率1000HzOUT 42H,AL ;先写入低8位MOV AL,AHOUT 42H,AL ;后写入高8位OR AL,3 ;接通扬声器OUT 61H,AL ;设置设备控制寄存器开关量MOV DX,2500LOOP1:DEC DXMOV CX,65535LOOP2:LOOP LOOP2 ;循环LOOP2CMP DX,0HJNZ LOOP1 ;DX不等于0跳转到LOOP1MOV AL,AHMOV AL,BLOUT 61H,AL ;恢复原状RETSOUNDF ENDP4 运行结果在微机原理实验平台集成开发环境MF2KP上输入该汇编程序,点击16位编码系统的汇编源程序,再点击连接目标码,再点运行程序。