微机实验数码转换
- 格式:pdf
- 大小:1.27 MB
- 文档页数:12
数码转换程序实验一、实验目的1、掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。
2、进一步熟悉键盘的使用方法。
3、进一步熟悉调试程序的方法。
二、实验设备TDN86/51教学实验系统一台三、实验内容及步骤1、将累加器A中的8位二进制转换成3位BCD码格式的十进制。
其中,百位数的BCD码放在21H单元中,十位和个位数放在22H 单元中。
参考程序:ORG 0000HLJMP MAINORG 1000HMAIN: MOV A, #0FFHMOV B, #64HDIV ABMOV 21H, AMOV A, #0AHXCH A, BDIV ABSWAP AADD A, BMOV 22H, AL1: SJMP L1END实验步骤:(1)输入程序检查无错误,经汇编、连接后装入系统。
(2)在1012处设段点。
(3)GB=0000↙,运行程序。
(4)用R0721↙查看21H单元,应为02,用R0722查看22H 单元,应为55。
(5)改变A中的数,考察程序的正确。
2、将累加器A中存放的两个BGD码拆开,求他们的乘积,并把乘积以压缩的BCD码形式送回A中。
参考程序:ORG 0000HLJMP MAINORG 1000HMAIN: MOV A, #23HMOV B, #10HDIV ABMUL ABMOV B, #0AHDIV ABSWAP AORL A, BL1: SJMP L1END实验步骤:(1)输入程序检查无错误,经汇编、连接后装入系统。
(2)在100E处设段点。
(3)GB=0000↙,运行程序。
(4)用R↙命令查看A中的数应为06(2×3)。
(5)改变A中的数,检查程序的正确性。
微机原理-数码转换实验报告-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。
《微型计算机原理实验》报告学院:华工电子与信息学院专业班级:信息工程2班学号:姓名:实验名称:实验日期:2013/4/16一、实验内容:将ASCII码表示的十进制数转换为二进制数二、实验步骤1、从键盘输入五位的十进制数,保存在地址为3500H的存储单元2、把这个十进制数转换为十六进制数,所得结果保存在地址为3510H的存储单元中3、把这个十六进制的结果的每位取出来,转换为ACSII码值,存储在地址为3514H的存储单元中4、把以3514H为起始地址的字符串输出到屏幕,即可得到5位十进制数转换为二进制数的结果三、代码运算过程四、程序代码:DATA SEGMENT ORG 34FEH BUF DB 10 DB ?DB 10 DUP (?)ORG 3510HBBF DB 20 DUP (?),0DH,0AH,'$'IBF DB 'Please input one number:',0DH,0AH,'$'ICF DB 0DH,0AH,'The result is:',0DH,0AH,'$' DATA ENDSSTACK SEGMENT STACK 'STACK' STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START :MOV AX,DATA MOV DS,AX MOV DX,OFFSET IBF MOV AH,9 INT 21H MOV DX,0 MOV AH,0AH LEA DX,BUF INT 21H MOV SI,3500H MOV DX,0 MOV CX,04H MOV BX,000AH MOV AH,00HLOOP CIRCLEMOV AL,[SI] SUB AL,30H ADD AX,DX LEA SI,BBFMOV [SI],AX MOV DX,AX MOV CH,04H MOV CL,04H MOV BX,3514H NEXT:ROL AX,CL MOV DL,AL AND DL,0FH CMP DL,09H JBE PLADD DL,07H PL: ADD DL,30H MOV [BX],DL INC BX DEC CH JNZ NEXTMOV DX,OFFSET ICF MOV AH,9 INT 21H MOV AH,09HCIRCLE:MOV AL,[SI] SUB AL,30H ADD AX,DX MUL BX MOV DX,AX INC SI MOV AH,0五:实验2-5实验2:将从键盘输入的五位十进制数的ASCII 码已存在3500起始的内存单元中。
实验一数码转换编程及程序调试一、实验目的掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。
熟悉程序调试的方法。
二、实验设备Pc微机一台,TD-PITE实验装置一套。
三、实验内容及步骤计算机输入设备输入的信息一般是由ASSII码或BCD码表示的数据或字符,CPU一般均用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII 码、BCD码或七段显示码等。
因此,在应用软件中,各类数制的转换是必不可少的。
计算机与外设间的数制转换关系如图所示2-1所示,数制对应关系如表2-1所示。
图2-1 数制转换关系1. 将ASCII码表示的十进制数转换为二进制数十进制表示为:Di代表十进制数0,1,2, (9)上式转换为:由此可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
参考流程:实验程序:PUBLIC SADDSSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSDA TA SEGMENTSADD DB 30H,30H,32H,35H,36H ;十进制数:00256DA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AX, OFFSET SADDMOV SI, AXMOV BX, 000AHMOV CX, 0004HMOV AH, 00HMOV AL, [SI]SUB AL, 30HA1: IMUL BXMOV DX, [SI+01]AND DX, 00FFHADC AX, DXSUB AL, 30HINC SILOOP A1A2: JMP A2CODE ENDSEND START实验步骤:(1)绘制程序流程图,编写实验程序,经编译、链接无误后装入系统;(2)待转换数据存放于数据段,根据自己要求输入,默认为30H,30H,32H,35H,36H;(3)运行程序,然后停止程序;(4)查看AX寄存器,即为转换结果,应为:0100 ;(5)反复试几组数据,验证程序的正确性。
实验一基本程序编程和程序调试一、实验目的1、掌握数码转换等基本程序设计的技巧和方法。
2、熟悉DEBUG命令。
3、学会和掌握用DEBUG调试程序的方法。
二、实验设备PC机一台,装有DOS基本系统三、实验内容及步骤用DEBUG建立、汇编和运行调试程序的操作。
DEBUG是DOS系统支持的用于汇编语言源程序调试的系统软件。
它共有19条命令完成相应的功能,命令及其格式可参阅附录一。
(一)DEBUG操作练习1)实验调试程序程序的功能是从3500H内存单元开始建立0-15共16个数据。
程序如下:地址(H)机器码(H)助记符2000BF0035MOV DI,35002003B91000MOV CX,00102006B80000MOV AX,000020099E SAHF200A8805MOV BYTE[DI],AL200C47INC DI200D40INC AX200E27DAA200F E2F9LOOP 200A2011F4HLT2)实验步骤:(1)输入与修改①启动DOS,在DOS提示符下输入D E B U G后回车,屏幕立即显示DEBUG提示符“—”,表明已进入DEBUG状态,可以执行DEBUG的各种命令。
②用DEBUG中的汇编命令“A 地址”将程序建立在内存单元中。
在提示符“—”下键入:“A 2000 ”此时显示器上将会显示程序的段地址CS和偏移地址IP,你就可以输入以上的程序了。
即显示169C :2000 键入MOV DI,3500169C:2003 MOV CX,0010169C:2011HLT:::③用反汇编命令“U 地址”检查程序在提示符“—”下,键入“U 2000↵”,将从2000内存单元开始的内容反汇编,屏幕上显示169C:2000 BF0035 MOV DI,3500169C:2003 B91000 MOV CX,0010169C:2006 B8000 MOV AX,0000::::::169C:2011 F4 HLT当发现程序有错时,可用汇编命令“A 地址”进行修改,如要修改200A单元中的指令,则键入“A 200A↵”,屏幕显示169C:200A ,然后再键入MOV BYTE[DI],AL↵,就把错误的程序改正了。
微机原理实验报告实验题目:数/模转换器DAC0832系部:电子与信息工程系学生姓名:专业班级:学号:指导教师:2013.12.30一. 实验目的1.掌握D/A转换原理;2.熟悉D/A芯片接口设计方法;3.掌握DAC0832芯片的使用方法。
二. 实验设备1.PC微机一台;2.TD-PIT实验装置一台;3.示波器一台。
三. 实验要求用DAC0832设计一个D/A转换接口电路,采用单缓冲工作方式,产生方波、三角波、锯齿波和正弦波。
四.实验原理1.DAC3802的结构及性能(1)输入/输出信号。
D7-D为8位数据输入线;IOUT1为DAC电流输出1,I OUT2为DAC电流输出2,IOUT1和IOUT2之和为一常量;RFB为反馈信号输入端,反馈电阻在芯片内。
(2)控制信号。
ILE为允许输入锁存信号;WR1和WR2分别为锁存输入数据信号和锁存输入寄存器到DAC寄存器的写信号;XFER为传送控制信号;CS为片选信号。
(3)电源。
VCC 为主电源,电压范围为+5V到+15V;VREF为参考输入电压,范围为-10V到+10V。
DAC0832管脚及其内部结构框图2.工作方式外部五个控制信号:ILE,CS,WR1,WR2,XFER连接方式的不同,可工作于多种方式:直通方式,单缓冲方式,双缓冲方式(1)直通方式ILE接高、CS、WR1、WR2、XFER接地,两级寄存器均直通;(2)单缓冲方式两级寄存器一个受控,一个直通;(3)双缓冲方式两级寄存器均受控。
0832为电流输出型D/A ,要得模拟电压,必需外加转换电路(运放)。
五. 实验内容1.硬件电路图:2.软件程序设计(1)产生方波stack segment stack 'stack'dw 32 dup(?)stack endscode segmentbegin proc farassume ss:stack,cs:codepush dssub ax,axpush axMOV DX,0D800H;片选信号输入地址MOV AL,0NEXT:OUT DX,ALMOV DX,0D800HOUT DX,ALLOOP $;延时NOT AL;求反,由高电平转为低电平或有低电平转为高电平 PUSH AX;保护数据MOV AH,11INT 21HCMP AL,0;有按键退出POP AXJZ NEXTretbegin endpcode endsend begin(2)产生三角波stack segment stack 'stack'dw 32 dup(?)stack endsdata segmentdata endscode segmentbegin proc farassume ss:stack,cs:code,ds:datapush dssub ax,axpush axMOV DX,0D800HMOV AL,0NEXT:OUT DX,ALCALL DELAY;调用延时CMP AL,0FFHJNE NEXT;自增至15NEXT1:OUT DX,ALCALL DELAY;调用延时DEC ALCMP AL,0JNE NEXT1PUSH AXMOV AH,11INT 21HCMP AL,0POP AXJZ NEXT;自减至0retbegin endpDELAY PROCPUSH CXMOV CX,10000LOOP $POP CXRETDELAY ENDP;延时子程序code endsend begin(3)产生锯齿波stack segment stack 'stack' dw 32 dup(?)stack endscode segmentbegin proc farassume ss:stack,cs:code push dssub ax,axpush axMOV DX,0D800HMOV AL,0UP:OUT DX,ALINC ALPUSH AX;保护数据MOV AH,11INT 21HCMP AL,0JZ UP;循环从0自增至15retbegin endpcode endsend begin(4)产生正弦波stack segment stack 'stack'dw 32 dup(?)stack endsdata segmentDATA DB7FH,87H,8FH,97H,9FH,0A6H,0AEH,0B5H,0BCH,0C3H,0CAH,0D0H,0D6H,0DCH,0E1H,0E6H,0EBH,0EFH,0F2H,0F6H,0F8H,0FAH,0FCH,0FDH,0FEH,0FFH,0FEH,0FDH,0FCH,0FAH,0F8H,0F6H,0F2H,0EFH,0EBH,0E6H,0E1H,0DCH,0D6H,0D0H,0CAH,0C3H,0BCH,0B5H,0AEH,0A6H,9FH,97H,8FH,87H,7FH,77H,6FH,67H,5FH,58H,50H,49H,42H,3BH,34H,2EH,28H,22H,1DH,18H,13H,0FH,0CH,8H,6H,4H,2H,1H,0,0,0,1H,2H,4H,6H,8H,0CH,0FH,13H,18H,1DH,22H,28H,2EH,34H,38H,42H,49H,50H,58H,5FH,67H,6FH,77H;建表,在正弦波一个周期内均匀采样100个点,用matlab将每点的值转换为相应的波形数字量(该处用16进制数表示)data endscode segmentbegin proc farassume ss:stack,cs:code,ds:datapush dssub ax,axpush axmov ax,datamov ds,axAG:MOV SI,OFFSET DATA;将表DATA放入SI中MOV DX,0D800HMOV BX,0NEXT:MOV AL,BYTE PTR[SI]OUT DX,ALCALL DELAY;调用延时INC BXINC SICMP BX,100JE AGPUSH AX;保护数据MOV AH,11CMP AL,0POP AXJZ NEXT;循环100次将表中的值输出 retbegin endpDELAY PROCPUSH CXMOV CX,10000LOOP $POP CXRETDELAY ENDP;延时子程序code endsend begin六. 实验结果用示波器观测波形,截图如下:1.方波2.三角波3.锯齿波4.正弦波七. 实验总结在本次实验中,首先自己在课外将实验原理充分掌握,提前画好电路图,并思考软件部分的代码核心,进入实验室后,进行电路连接及与软件的连调。
上海大学微机实践报告实验五A/D转换器实验【实验目的】了解模/数转换基本原理,掌握ADC0809的使用方法。
掌握A/D转换与计算机的接口方法,了解ADC0809芯片的转换性能及编程,了解计算机如何进行数据采集。
【实验内容】编写程序,用查询方式采样输入模拟电压(模拟量电压从实验装置的电位器接入),并将其转换为二进制数字量,用发光二极管显示。
【实验区域电路连接图】PA0→L2;PA1→L6;PA2→L10;PA3→L14;绿灯PA4→L3;PA5→L7;PA6→L11;PA7→L15;红灯IN0→AOUT1(可调电压,VIN→+5V);IOWR→IOWR;IORD→IORD;CLK→500K(单脉冲与时钟单元);ADDA、ADDB、ADDC→GND;CS4→8000HJX6→JX17(数据总线)当采用查询模式时:EOC→PB3【实验步骤】1、按连线图接好,检查无误后打开试验箱电源。
通过在计算机上进行设置将试验箱与电脑连接。
2、根据功能要求在 PC 端软件开发平台上编写程序代码,编译通过后下载到试验箱。
在试验箱上检测程序运行的结果。
3、在试验箱上检测程序运行的结果。
即运行程序后,通过调节电压旋转旋钮,改变输入电压的大小,LED灯的亮灭也会随之而改变。
观察LED灯的亮灭情况并记录不同电压值下LED灯的亮灭情况。
4、如果运行结果不正确就要检查连线和程序,修改直到正确。
【程序框图】【程序代码】CODE SEGMENTASSUME CS:CODEORG 11E0HSTART: MOV DX,0FF2BHMOV AL,10000000B //设置8255方式字:A口出OUT DX,ALLOP1: MOV DX, 8000H //0809口地址MOV AL,0 //选择通道0OUT DX,ALMOV BL,100DELAY: DEC BLJNZ DELAYMOV DX,8000H //读取0809转换结果IN AL,DXNOT ALMOV DX,0FF28HOUT DX,AL //将AL的值输出到A口JMP LOP1CODE ENDSEND START//采用查询方式CODE SEGMENTASSUME CS:CODEORG 11E0HSTART: MOV DX,0FF2BHMOV AL,10000010B //设置8255方式字:A口出OUT DX,ALLOP1: MOV DX, 8000H //0809口地址MOV AL,0 //选择通道0OUT DX,ALLOP2:MOV DX,0FF29HIN AL,DXTEST AL,00001000BJZ LOP2MOV DX,8000HIN AL,DXNOT ALMOV DX,0FF28HOUT DX,AL //将AL的值输出到A口JMP LOP1CODE ENDSEND START【问答题】1、0809获取A/D转换数据的方法有哪几种?比较这些方法的优劣。
实验三8255并行接口实验一、实验目的1、学习并掌握8255的工作方式及其应用。
2、学习在系统接口实验单元上构造实验电路。
二、实验设备TDN86/51或TND86/88教学实验系统。
三、实验内容与实验步骤1、基本输入输出实验。
编写程序,使8255的A口为输入,B口为输出,完成波动开关到数据灯的数据传输。
要求只要开关拨动,数据灯的显示就发生相应改变。
实验原理:并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。
8255的内部结构及引脚如图3-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图3-2所示。
图3-1 8255的内部结构和外部引脚(a)工作方式控制字(b)c口按位置位/复位控制字图3-2 8255控制字格式8255实验单元电路图如下图所示:图3-3 8255实验单元电路图实验步骤1. 基本输入输出实验本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。
用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。
(1)按图连接实验线路图;8255基本输入/输出实验接线图SSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV AL,82HOUT 63H, ALA1: IN AL, 61HOUT60H, ALJMPA1CODE ENDSEND START(2)编写实验程序,经编译、连接无误后装入系统;(3)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。
(4)点机“调试”下拉菜单中的“固定程序”项,将程序固化到系统存储器中。
微机ad转换实验报告微机AD转换实验报告一、引言AD转换是现代电子技术中非常重要的一部分,广泛应用于各种领域,如通信、仪器仪表、自动控制等。
本实验旨在通过使用微机进行AD转换实验,探究其原理和应用。
二、实验目的1. 了解AD转换的基本原理;2. 掌握使用微机进行AD转换的方法;3. 分析AD转换的精度和速度。
三、实验原理AD转换是将模拟信号转换为数字信号的过程。
在本实验中,我们将使用微机的AD转换器将模拟信号转换为数字信号。
微机的AD转换器通常是一个多通道的模数转换器,能够将多个模拟信号转换成相应的数字信号。
四、实验步骤1. 连接硬件设备:将待转换的模拟信号通过信号调理电路连接到微机的AD转换器输入端;2. 打开实验软件:启动微机上的AD转换实验软件;3. 设置参数:根据实验要求,设置采样率、分辨率等参数;4. 进行AD转换:点击软件界面上的“开始转换”按钮,开始进行AD转换;5. 数据分析:获取转换后的数字信号,进行数据分析和处理。
五、实验结果与分析通过实验,我们得到了一系列数字信号。
根据这些数字信号,我们可以进行各种数据处理和分析。
例如,我们可以绘制出信号的波形图、频谱图等,进一步分析信号的特性和性能。
六、实验中的问题与解决方法在实验过程中,我们可能会遇到一些问题,如信号失真、噪声干扰等。
针对这些问题,我们可以采取一些解决方法,如增加滤波电路、调整采样率等,以提高AD转换的精度和稳定性。
七、实验总结通过本次实验,我们深入了解了AD转换的原理和应用,掌握了使用微机进行AD转换的方法。
AD转换在现代电子技术中具有广泛的应用前景,掌握AD转换的原理和技术对于我们的学习和工作都具有重要意义。
八、实验心得本次实验让我对AD转换有了更深入的了解。
通过实际操作,我进一步掌握了使用微机进行AD转换的方法,并且了解到了AD转换的精度和速度对于实际应用的重要性。
在今后的学习和工作中,我将更加注重AD转换技术的应用与研究,为现代电子技术的发展做出自己的贡献。
微机原理实验报告实验九:数码转换
电子信息工程
150210班
金峥
15021005
一、实验题目
实验九——数码转换
二、实验目的
1、掌握计算机常用数据编码之间的相互转换方法。
2、进一步熟悉DEBUG软件的使用方法。
三、实验步骤
1、编辑源文件,经汇编连接产生EXE文件。
2、用DEBUG调试、检查、修改程序。
四、实验流程图
实验9——1流程图
五、实验源代码
实验(一)ASCⅡ码转换为非压缩型BCD码
编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入DATA1单元中,按回车停止键盘输入。
将其转换成非压缩型(非组合型) BCD 码后,再存入DATA2开始的单元中。
若输入的不是十进制数,则相应单元中存放FFH。
调试程序,用D命令检查执行结果。
代码
DATA SEGMENT PARA 'DATA' ;定义数据段
DATA1 DB 16 DUP(0) ;输入的ACSII码
DATA2 DB 16 DUP(0) ;转换后输出的BCD码
DATA ENDS
STACK SEGMENT PARA STACK 'STACK' ;定义堆栈段
STACK1 DB 256 DUP(0) ;为堆栈准备256字节
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME SS:STACK,CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,DATA1 ;DATA1首地址存入SI
LEA DI,DATA2 ;DATA2首地址存入DI
MOV CX,16 ;循环次数
STEP1: MOV AH,01H ;输入字符,AL=输入的ASCII码
INT 21H
MOV [SI],AL
CMP AL,0DH ;与回车作比较
JE STEP3 ;若为回车则跳转到STEP3
CMP AL,'0' ;比较AL与0的大小
JB STEP2 ;若AL<0,跳转到STEP2
CMP AL,'9' ;比较AL与9的大小
JA STEP2 ;若AL>9,跳转到STEP2
SUB AL,30H ;将输入字符的ASCII码转换为十进制数
MOV [DI],AL ;将结果存入DATA2中
INC SI
INC DI ;为下一次数码转换做准备
LOOP STEP1 ;跳转到STEP1,进行循环
STEP2: MOV [DI],0FFH ;若输入的不是十进制数,相应单元存入0FFH INC SI
INC DI
LOOP STEP1 ;跳转到STEP1,进行循环
STEP3: MOV AH,4CH ;带返回码的结束
INT 21H
CODE ENDS
END START
代码截图
实验(二)BCD码转换为二进制数
编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码DATA1,转换成二进制数存入DATA2字单元中调试程序,用D命令检查执行结果。
代码
DATA SEGMENT PARA 'DATA' ;定义数据段
DATA1 DW 2497H ;DATA1中存放的4位BCD码
DATA2 DW 0 ;转换后输出的十六进制码
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CL,4 ;4位BCD码
MOV CH,3 ;循环次数3次
MOV SI,0AH ;设置乘数10
XOR BX,BX ;累加数BX清0
MOV AX,DATA1 ;取DATA1中的十进制数
LP0: ROL AX,CL ;将AX左移4位,进行取数
MOV DI,AX ;保存当前AX数值
AND AX,0FH ;保留低位
ADD AX,BX ;进行累加
MUL SI ;AX乘10
MOV BX,AX ;将AX存入BX,以便下次循环进行累加
MOV AX,DI ;将AX重置回之前的数值
DEC CH ;循环次数减1
JNZ LP0
ROL AX,CL ;此处开始为取个位数,但不用乘10,所以直接累加
AND AX,0FH
ADD AX,BX
MOV DATA2,AX
MOV AH,4CH
INT 21H
ENDS
END START
代码截图
实验(三)十六进制数转换为ASCⅡ码
编写并调试正确的汇编语言源程序,使之将内存DATA1字单元中存放的4位十六进制数,转换为ASCⅡ码后分别存入DATA2为起始地址的4个单元中,低位数存在低地址的字节中,并在屏幕上显示出来。
代码
DATA SEGMENT PARA 'DATA' ;定义数据段
DATA1 DB 23H,0ADH ;存放的4位十六进制数
DATA2 DB 4 DUP(0) ;存入ASCII码
DB '$'
DATA3 DB 4 DUP(0) ;DATA3的四个字节分别存放每个十六进制数
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,DATA1
LEA DI,DATA3
MOV CL,2 ;循环2次,取两次2位十六进制数
STEP1: MOV AL,[SI] ;取2位16进制数
AND AL,0F0H ;低四位为0
ROR AL,4 ;右移四位
MOV [DI],AL ;高位数存放在高字节中
INC DI
MOV AL,[SI] ;再取一次这个数
AND AL,0FH ;高四位为0
MOV [DI],AL ;低位数存放在低字节中
INC SI
INC DI
DEC CL
JNZ STEP1
LEA SI,DATA3 ;将DATA3首地址偏移量存入SI
LEA DI,DATA2 ;将DATA2首地址偏移量存入DI
MOV CL,4
STEP2: MOV AL,[SI] ;取DATA3中的十六进制数
CMP AL,9
JG STEP3 ;若AL>9,跳转到STEP3
ADD AL,30H ;0-9H+30H=ASCII
JMP STEP4
STEP3: ADD AL,37H ;A-FH+37H=ASCII
STEP4: MOV [DI],AL ;ASCII码存入DATA2中
INC DI
INC SI
DEC CL ;依次存入
JNZ STEP2 ;循环存数
LEA DX,DATA2
MOV AH,09H
INT 21H ;显示DATA2
MOV AH,4CH
INT 21H
CODE ENDS
END START
代码截图
六、实验结果
实验9-1结果截图
地址:0711:0000
结果:2497H=(09C1)16
地址:0710:0002。