实验二 数码转换编程及程序调试
实验(二)DA转换实验

实验二D/ A转化实验一、实验目的:(1)掌握D/A转换与单片机的接口方法。
(2)了解D/A芯片PCF8591转换性能及编程方法。
(3)了解单片机系统中扩展D/ A转换芯片的基本方法二、实验内容利用实验仪上的PCF8591做D/A转换实验,写入DA的数模值,然后累加该值,显示该值到数码管,延时100m后循环写入变化后的DA值,观察LED9的变化。
三、实验说明A/ D转换器大致分有三类:一是双积分A/ D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近式A/ D转换器,精度、速度、价格适中;三是并行A/ D 转换器,速度快,价格也昂贵。
PCF8591属第二类,PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。
PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。
PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。
在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
四、实验步骤(1)单片机P0口与J3相连,用作数码管显示(2)单片机P2.2与J2(B)相连,P2.2与J2(A)相连。
(3)跳帽J50 连接,给数码管供电。
(4)单片机P2.0与J8(SCL)相连,最为时钟输出,单片机P2.1与J8(SDL)相连最为数据输入输出。
(5)J31中AD0与W4用跳帽相连,选择AD通道。
(6)利用keil软件编写程序,并且用STC程序下载工具下载程序。
(7)观察LED9的变化。
华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)

微机原理实验报告班 级: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 环境,写字板,记事本等中输入源程序。
(实验二)二进制码转换为BCD码实验报告

实验二二进制码转换为BCD码一、实验目的1、掌握数码转换基本方法,加深对数码的理解。
2、用于十进制BCD码显示。
二、实验内容将AX的内容转换为十进制BCD码。
三、实验程序框图四、实验步骤脱机模式:(1)在P.态,按SCAL键,输入2CE0,按EXEC键。
(2)复位RST键,由于AX中给定数为0FFFF,查看BCD码结果保留在4100H~4104H 单元中,故其值应为06、05、05、03、05。
联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S2.ASM 文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)复位“系统复位”键,由于AX中给定数为0FFFF,查看BCD码结果保留在4100H~4104H单元中,故其值应为06、05、05、03、05。
注:操作过程参照“实验一二进制多位加法运算”。
五、实验程序清单X:\DICE-8086K3微机原理与接口实验箱CDROM\CODE\86kasm\S2.ASM;将AX拆为5个BCD码,并存入Result开始的5个单元DATA SEGMENT AT 0 ;S2.ASM,BIN-->BCDORG 4000HRESULT DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATAORG 2CE0HSTART PROC NEARMOV AX, DATAMOV DS, AXMOV DX,0000HMOV AX, 65535MOV CX, 10000DIV CXMOV RESULT, AL ; 除以 10000, 得WAN位数MOV AX,DXMOV DX,0000HMOV CX, 1000DIV CXMOV RESULT+1, AL ; 除以 1000, 得QIAN位数MOV AX,DXMOV DX,0000HMOV CX, 100DIV CXMOV RESULT+2, AL ; 除以 100, 得BAI位数MOV AX,DXMOV DX,0000HMOV CX, 10DIV CXMOV RESULT+3, AL ; 除以 10, 得SHI位数MOV RESULT+4, DL ; 得GE位数JMP $CODE ENDSEND START。
实验二数码转换编程及程序调试

实验二数码转换编程及程序调试实验二数码转换编程及程序调试一、实验目的1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。
2. 熟悉键盘使用方法。
3. 熟悉调试程序的方法二、实验设备TDN86/51或TDN86/88教学实验系统一台三、实验内容及步骤计算机输入设备输入的信息一般是由ASCII 码或BCD 码表示的数据或字符,CPU 一般均用二进制进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII 码、BCD 码或七段显示码等。
因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。
计算机与外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。
1. 将ASCII 码表示的十进制数转换为二进制数十进制表示为:∑=--?=?++?+?ni i i n n n n D D D D 0001110101010 ┅┅┅┅┅┅┅┅┅(1) Di 代表十进制数1,2,3,┅9,0;上式转换为:011010)10)10((((10D D D D D n n i n i i+?++?+?=?-=∑ ┅┅┅┅┅┅┅┅┅(2)由式(2)可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn 开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
实验步骤(1)输入程序并检查无误,经汇编、连接后装入系统。
(2)在3500-3504H 单元存入十进制数12的ASCII 码,即E3500↙,并输入30 30 3031 32。
(3)G=0000:2000↙,运行以上程序,并用CTRL+C 来中断程序,返回监控状态。
(4)用D3510↙查看结果,应为:3510 0C 00。
(5)反复试几组数,考察程序的正确性。
图2-1 数码转换关系二进制2. 将十进制数的ASCII 码转换为BCD 码设从键盘输入的五位十进制数的ASCII 码已存放在3500H 起始的内存单元内,把它转换为BCD 码后,再按位分别存入350AH 起始的内存单元内。
实验二 模_数转换实验

实验二模/数转换实验一.实验要求了解A/D芯片ADC0809转换性能及编程。
编制程序通过0809采样输入电压并转换成数字量值。
二.实验说明电路实现见主板模块B5,具体说明请见用户手册。
ADC0809的片选CS0809接0A0H。
由于0809的A、B、C三脚依次接至A0、A1、A2,所以模拟输入通道IN0~IN7的端口地址为0A0~0A7。
其中IN0与模拟地之间预先接一个500欧电阻,并提供接线端子,供外接电烤箱使用。
IN1~IN5为标准接法,有效输入电平为0V~+5V。
IN6、IN7为双极性输入接法,有效输入电平为-5V~+5V。
模数转换结束信号EOC引出至EOC插孔,并经反向后引出至EOC/孔。
A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度,速度,价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的AD C0809属第二类,是八位A/D转换器。
典型采样时间需100us。
编程中应该保证A/D转换的完成,这可以在程序中插入适当延时代码或监视EOC信号的电平来实现。
后一种方式尤其适合采用中断处理。
三.实验步骤1. 接线:模块B5的IN0接电位器模块C5的Y 。
C5的X 和Z 分别用短路套套接到Vcc 和GND 。
2. 示例程序:见Cp2源文件。
程序流程如下图所示。
3. 现象:由电位器模块C5提供0V ~+5V 可调的电平值;经模块B5中0809的通道0采样;采样值送到从86000开始的扩展存贮器单元贮存。
程序执行方法:打开LCAACT 软件中“设置”->“实验机”,将其中的程序段地址设为8100,偏移地址0000。
然后选择“工具”->“加载目标文件”,本实验加载C:\AEDK\LCAACT\试验软件\CP2.EXE, 然后在对话窗口中输入G8100:0000,回车,等待几秒钟后按实验机的复位键,此时程序运行结束,再输入D8600:0000用户可以察看该段存贮器内容来观察实际采样转换的结果。
单片机二进制BCD码转换实验程序流程图

二进制BCD码转换一、实验目的1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一字节二进制数,转换成二十进制(BCD)码。
将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
三、实验内容及步骤1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。
2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。
在所建的Project文件中添加TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA) (在MEMORY#3中输入D:30H 回车),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。
用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。
修改源程序中给累加器A的赋值,重复实验,观察实验效果。
3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序(见光盘中的程序文件夹)1.源程序RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $END2.流程图。
单片机实验二数制转换类程序设计

单片机实验二数制转换类程序设计【实验目的】1.了解数制转换的基本概念及原理。
2.掌握单片机对数制转换的程序设计方法。
【实验器材】1.STC89C52单片机实验箱2. Keil C51开发环境3.电源、连接线等【实验原理】数制转换是将一个数值在不同进制间互相转换的过程。
常见的进制包括二进制、八进制、十进制和十六进制。
在程序设计中,经常需要进行不同进制间的转换,例如从二进制转换为十进制、从十进制转换为十六进制等。
【程序设计】本实验设计一个数制转换类的程序,实现二进制、八进制、十进制和十六进制之间的转换。
基本思路:1.输入数字和当前进制。
2.根据当前进制将输入的数字转换为十进制。
3.根据目标进制将十进制数转换为目标进制并输出。
【程序示例】```#include <reg52.h>#include <stdio.h>//二进制转十进制int binaryToDecimal(char *binary)int length = 0;while (binary[length] != '\0')length++;}int decimal = 0;int base = 1;for (int i = length - 1; i >= 0; i--) if (binary[i] == '1')decimal += base;}base *= 2;}return decimal;//十进制转二进制void decimalToBinary(int decimal, char *binary) int index = 0;while (decimal > 0)binary[index++] = (decimal % 2 == 1) ? '1' : '0'; decimal /= 2;}binary[index] = '\0';//反转二进制字符串int i = 0;int j = index - 1;while (i < j)char temp = binary[i];binary[i] = binary[j];binary[j] = temp;i++;j--;}//十进制转八进制void decimalToOctal(int decimal, char *octal)int index = 0;while (decimal > 0)octal[index++] = (decimal % 8) + '0';decimal /= 8;}octal[index] = '\0';//反转八进制字符串int i = 0;int j = index - 1;while (i < j)char temp = octal[i];octal[i] = octal[j];octal[j] = temp;i++;j--;}//十进制转十六进制void decimalToHexadecimal(int decimal, char *hexadecimal)int index = 0;while (decimal > 0)int remainder = decimal % 16;if (remainder < 10)hexadecimal[index++] = remainder + '0';} elsehexadecimal[index++] = remainder - 10 + 'A'; }decimal /= 16;}hexadecimal[index] = '\0';//反转十六进制字符串int i = 0;int j = index - 1;while (i < j)char temp = hexadecimal[i];hexadecimal[i] = hexadecimal[j]; hexadecimal[j] = temp;i++;j--;}void maichar input[100];int currentBase; // 当前进制int targetBase; // 目标进制printf("请输入一个数字:");scanf("%s", input);printf("请输入当前进制:");scanf("%d", ¤tBase);printf("请输入目标进制:");scanf("%d", &targetBase);printf("转换结果为:");switch (currentBase)case 2://二进制转十进制int decimal = binaryToDecimal(input); //十进制转目标进制switch (targetBase)case 8:char octal[100];decimalToOctal(decimal, octal);printf("%s\n", octal);break;}case 10:printf("%d\n", decimal);break;}case 16:char hexadecimal[100]; decimalToHexadecimal(decimal, hexadecimal); printf("%s\n", hexadecimal);break;}}break;case 8://八进制转十进制decimal = atoi(input);//十进制转目标进制switch (targetBase)case 2:char binary[100];decimalToBinary(decimal, binary);printf("%s\n", binary);break;}case 10:printf("%d\n", decimal);break;}case 16:char hexadecimal[100]; decimalToHexadecimal(decimal, hexadecimal); printf("%s\n", hexadecimal);break;}}break;case 10://十进制转目标进制switch (targetBase)case 2:char binary[100];decimalToBinary(atoi(input), binary); printf("%s\n", binary);break;}case 8:char octal[100];decimalToOctal(atoi(input), octal); printf("%s\n", octal);break;}case 16:char hexadecimal[100];decimalToHexadecimal(atoi(input), hexadecimal); printf("%s\n", hexadecimal);break;}}break;case 16://十六进制转十进制decimal = atoi(input);//十进制转目标进制switch (targetBase)case 2:char binary[100];decimalToBinary(decimal, binary);printf("%s\n", binary);break;}case 8:char octal[100];decimalToOctal(decimal, octal);printf("%s\n", octal);break;}case 10:printf("%d\n", decimal);break;}}break;}```【实验结果】1.运行程序后,程序会提示输入一个数字、当前进制和目标进制。
单片机实验二 数制转换类程序设计

实验二数制转换类程序设计一.实验目的1.掌握各种常用数制的编码特点和相互转换的方法。
2.掌握逻辑运算类指令的使用方法。
3.掌握子程序的调用方法。
4.熟悉用仿真器调试应用程序的过程。
二.实验内容8031片内20H~24H单元放有五字节的压缩BCD码,编程实现下列操作:1.将上述BCD码转换成非压缩BCD码,放入片内30H开始的单元中;2.将30H单元开始的非压缩BCD码变成ASCII码,放入片内40H开始的单元中;3.将20H单元存放的压缩BCD码转换成对应的二进制数,放入片内50H开始的单元中;4.将片内50H单元开始的5字节二进制数转换成ASCII码,放入片内60H单元开始处。
三.编程提示1.要求分别用子程序实现各种数转换,以供调用。
2.8031片内20H~24H单元的压缩BCD码,可直接在内部数据存储器中给定。
3.观察30H~6FH数据区,以了解程序运行过程。
四.参考程序流程图开始主程序1.将BCD码转换成非压缩BCD码:可以用除法,或用分别取高低位的方式;2.将非压缩BCD码变成ASSII码:加30H;3.将压缩BCD码转换成对应的二进制数:取出高位乘以10,加上低位;4.将二进制数转换成ASCII码:将二进制数除以10,得到商和余数,分别转换为ASCII,注意大于9的数的转换。
MOV 20H,#12HMOV 21H,#30HMOV 22H,#56HMOV 23H,#78HMOV 24H,#99H1.在DATA区查看。
五、实验C语言程序#include<reg51.h>#define uchar unsigned charuchar i,count;uchar data *point1,*point2;uchar data table[5] _at_ 0x20;void bcd_cbcd();void bcd_assii();void bcd_b();void b_assii();void main(){table[0]=0x12;table[1]=0x30;table[2]=0x56;table[3]=0x78;table[4]=0x99;count=5;point1=0x20;point2=0x30;bcd_cbcd();count=10;point1=0x30;point2=0x40;bcd_assii();count=5;point1=0x20;point2=0x50;bcd_b();count=5;point1=0x50;point2=0x60;b_assii();while(1){;}}void bcd_cbcd() //BCD码转换成非压缩BCD码{for(i=0;i<count;i++){*point2=*point1/16;point2++;*point2=*point1%16;point2++;point1++;}}void bcd_assii() //非压缩BCD码变成ASCII码{for(i=0;i<count;i++){*point2=*point1+0x30;point1++;point2++;}}void bcd_b() //压缩BCD码转换成对应的二进制数{for(i=0;i<count;i++){*point2=(*point1/16)*10+*point1%16;point1++;point2++;}}void b_assii() //二进制数转换成ASCII码{for(i=0;i<count;i++){if(*point1/10<10)*point2=*point1/10+0x30;else*point2=*point1/10+0x37;point2++;if(*point1%10<10)*point2=*point1%10+0x30;else*point2=*point1/10+0x37;point2++;point1++;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 数码转换编程及程序调试
一、实验目的
1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。
2. 熟悉键盘使用方法。
3. 熟悉调试程序的方法
二、实验设备
TDN86/51或TDN86/88教学实验系统一台
三、实验内容及步骤
计算机输入设备输入的信息一般是由ASCII 码或BCD 码表示的数据或字符,CPU 一般均用二进制进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII 码、BCD 码或七段显示码等。
因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。
计算机与外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。
1. 将ASCII 码表示的十进制数转换为二进制数
十进制表示为:
∑=--⨯=⨯++⨯+⨯n
i i i n n n n D D D D 00
01110101010 ┅┅┅┅┅┅┅┅┅(1) Di 代表十进制数1,2,3,┅9,0;
上式转换为:
011010)10)10((((10D D D D D n n i n i i
+⨯++⨯+⨯=⨯-=∑ ┅┅┅┅┅┅┅┅┅(2)
由式(2)可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn 开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
实验步骤
(1) 输入程序并检查无误,经汇编、连接后装入系统。
(2) 在3500-3504H 单元存入十进制数12的ASCII 码,即E3500↙,并输入30 30 30
31 32。
(3) G=0000:2000↙,运行以上程序,并用CTRL+C 来中断程序,返回监控状态。
(4) 用D3510↙查看结果,应为:3510 0C 00。
(5) 反复试几组数,考察程序的正确性。
图2-1 数码转换关系
二进制
2. 将十进制数的ASCII 码转换为BCD 码
设从键盘输入的五位十进制数的ASCII 码已存放在3500H 起始的内存单元内,把它转换为BCD 码后,再按位分别存入350AH 起始的内存单元内。
若输入的不是十进制数的ASCII 码,则对应存放结果的单元内容为“FF ”。
由表2-1可知,一字节ASCII 码取其低四位即变为BCD 码。
实验步骤
(1) 输入程序并检查无误,经汇编,连接后装入系统。
(2) 在3500-3504H 单元中存放五位十进制数的ASCII 码,即:E3500↙,并输入31
32 33 34 35。
(3) G=0000:2000↙,运行以上程序。
(4) 用D3510↙查看结果,显示结果应为:
0000:350A 00 01 02 03 04 05 CC …
(5) 反复试几组数,考察程序的正确性。
3. 将十六位二进制数转换为ASCII 码表示的十进制数
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。
算法:五位十进制数可表示为:
01122334410101010D D D D D N D +⨯+⨯+⨯+⨯=
i D :表示十进制数0~9
因此,将十六位二进制数转换为五位ASCII 码表示的十进制数,就是求1D -4D ,并将它们转换为ASCII 码。
实验步骤:
(1) 输入程序并检查无误,经汇编,连接后装入系统。
(2) 在3500-3504H 单元中存放0C00,运行程序并检查结果,影看到3510H-3514H 单元中的数以此为30 30 30 31 32。
(3) 反复试几组数,并运行程序,观察结果。
4. 十六进制数椟换为ASCII 码
设经过CPU 处理后的十六进制存放在起始地址为3500H 的内存中,把它们转换成ASCII 码之后,再分别存入起始地址为3510的内存单元中。
实验步骤:
(1) 输入程序并检查无误,经汇编、链接后装入系统。
(2) 在3500~3501H 单元中存入四位16进制数203B ,即:E500,并输入3B ,20。
(3) G =0000:2000↙,运行以上程序。
(4) D350A ,显示结果为: 0000:350A 42 33 30 32 CC ……输入数与结果ASCII 码对应顺序相反。
(5) 反复试几组数,考察程序的正确性。
5. BCD 码转换为二进制码
设四个二位十进制的BCD 码存放在起始地址为3500H 的单元中,转换出的二进制数码存入起始为3510的内存单元中。
实验步骤:
(1) 输入程序并检查无误,经汇编,连接后装入系统。
(2) 在3500~3501H 单元中存入四个十进制数(12,34,56,78)的BCD 码,即:E3500
↙,输入01.02.03.04.05.06.07.08。
(3)G=0000:2000,运行程序
(4)D3510↙,显示结果为3510 0C 00 22 00 38 00 4E 00。
(5)反复试几组数,考察程序的正确性。
四.思考题
1.程序2将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?为什么?
D的值?
2.将一个十六位二进制数转换为ASCII码十进制数时,如何确定
1
3.在十六进制数转换为ASCII码时,存转换结果后,为什么要把DX向右移四次?。