单片机 查表程序设计实验
单片机实验指导书

μVision2 支持所有的Keil 80C51 的工具软件,包括C51 编译器、宏汇编器、链接器/定位器、软硬件调试器和目标文件到HEX 格式文件转换器等,μVision2 可以自动完成编译、汇编、链接程序等操作。
μVision2 具有强大的软件环境、友好的操作界面和简单快捷的操作方法。
双击桌面上的Keil μVision2 快捷图标,可以进入如图1-1 所示的集成开发调试环境,各种调试工具、命令菜单都集成在此开发环境中。
菜单栏提供了各种操作菜单,如编辑器操作、工程维护、程序调试、窗体选择以及操作帮助等。
工具栏按钮和快捷键可以快速执行μVision2命令。
常用的菜单栏及相对应的工具栏按钮与快捷键介绍如表1-1~表1-6所列。
图1-1μVision2 集成环境界面表1-1 文件菜单和文件命令(File)表1-2 编辑菜单和编辑器命令(Edit)表1-3视图菜单(View)表1-4工程菜单和工程命令(Project)表1-5 调试菜单和调试命令(Debug)表1-6外围器件菜单(Peripheral)第2章单片机原理实验通过本章的实验,旨在使学生掌握Keil C51 的操作方法,学习80C51 的指令系统及汇编语言的程序设计方法。
2.1系统认识实验2.1.1实验目的1. 学习Keil C51 集成开发环境的操作;2. 熟悉TD-51 系统板的结构及使用。
2.1.2实验设备PC机一台2.1.3实验内容编写实验程序,将00H~0FH共16个数写入单片机内部RAM的30H~3FH空间。
通过本实验,学生需要掌握Keil C51软件的基本操作,便于后面的学习。
2.1.4实验步骤1. 创建Keil C51 应用程序在Keil C51 集成开发环境下使用工程的方法来管理文件,所有的源文件、头文件甚至说明性文档都可以放在工程项目文件里统一管理。
下面创建一个新的工程文件C51.Uv2,以此详细介绍如何创建一个Keil C51 应用程序。
实验三 查表及串操作(信计)

实验三串操作及查表一、实验目的:掌握串操作及查表程序设计的方法,学会编写串操作及查表程序。
二、实验题目:题目一:(题6.8)编写程序,将字符串STING1的内容复制到字符串STRING2中。
要求由子程序来实现字符串的复制,并采用寄存器来传递参数。
编程要求:1)根据功能正确切分程序,并根据题意画流程图,将主程序和子程序分别画,使得程序思路清晰,便于根据流程图编写汇编程序。
2)在编写子程序后,要对子程序说明,子程序说明是为了更好的使用子程序,便于别人使用该子程序时了解子程序的功能和调用方法,子程序说明应包括:子程序名、功能、入口参数、出口参数、执行时间等。
3)在子程序中用到的寄存器,在执行子程序之前应保存,以免破坏子程序以外的信息,执行完子程序再恢复原有信息。
编程提示:参考例题:例5-151)串传送时采用串传送指令REP MOVSD。
2)用寄存器传递的参数:字符串STRING1和STRING2的首地址,字符串STRING1的长度。
程序代码:DATA SEGMENTSTRING1 DB 'duxuejie'STRING2 DB ?N EQU($-STRING1)/4DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,NCLDMOV SI,OFFSET STRING1MOV DI,OFFSET STRING1MOV AX,DSMOV ES,AXMOV SI,OFFSET STRING1MOV DI,OFFSET STRING1MOV CX,NCLDREP MOVSWMOV AX,4C00HINT 21HCODE ENDSEND START程序结果截图思考题:1)串传送时采用串传送指令REP MOVSD,因此在使用该指令之前要设置?2)传递参数还可以用什么方法?请修改程序。
查表程序设计

查表程序设计在计算机编程的世界里,查表程序设计是一项非常实用且重要的技术。
它就像是我们日常生活中的字典,当我们需要查找某个特定的信息时,能够快速而准确地获取到。
首先,让我们来理解一下什么是查表。
简单来说,查表就是在一个预先准备好的数据集合中,通过特定的索引或者关键字,找到我们所需要的数据。
这个数据集合可以是一个数组、一个链表,甚至是一个复杂的数据结构,比如二叉树或者哈希表。
那么,为什么我们需要使用查表这种方式呢?想象一下,如果我们需要根据不同的输入值来计算一个复杂的函数结果,每次都重新计算的话,会耗费大量的时间和计算资源。
而如果我们事先将这些可能的输入值和对应的计算结果存储在一个表中,那么在需要的时候,只需要通过查找这个表,就能迅速得到结果,大大提高了程序的运行效率。
在设计查表程序时,第一步是确定表的结构和存储方式。
这取决于我们要存储的数据类型和数量,以及查找的频繁程度和效率要求。
例如,如果我们要存储的是一些固定的常量值,而且数量不多,那么一个简单的数组可能就足够了。
但如果数据量很大,而且需要频繁地进行插入、删除和查找操作,那么可能就需要使用更复杂的数据结构,如链表或者哈希表。
接下来,就是如何构建这个表。
这通常需要我们根据具体的问题和需求,将相关的数据按照一定的规则组织起来。
比如,如果是一个按照数值大小排序的表,我们可以使用二分查找算法来提高查找效率;如果是一个无序的表,可能就需要遍历整个表来查找。
在查找表中的数据时,算法的选择至关重要。
常见的查找算法有顺序查找、二分查找、哈希查找等。
顺序查找就是从表的开头依次比较每个元素,直到找到目标元素或者遍历完整个表。
这种方法简单直观,但效率较低,适用于小型的、无序的表。
二分查找则是针对有序表的一种高效查找算法,它通过不断将表中间的元素与目标元素进行比较,将查找范围缩小一半,直到找到目标元素。
哈希查找则是通过将关键字映射到一个特定的哈希值,然后在对应的哈希表位置进行查找,其查找效率通常很高,但需要处理哈希冲突的情况。
实验二 查表程序实现LED数字显示

实验二查表程序实现LED数字显示一、实验要求通过拨码开关表示16进制数0—F,利用LED数码管显示该数字。
包括硬件电路和程序设计。
二、实验目的理解8段LED数码管的显示原理和LED显示的转化方法,学习查表程序的设计。
三、实验原理图2-1 8段LED数码管显示原理和笔画分布由电路图2-2可以看出,这里需要通过传送指令将P1口拨码开关的状态读入累加器A,利用查表指令转换为LED数码管的显示笔画代码,再传送到P2口驱动数码管。
所谓显示代码就是根据该数字的笔画确定LED数码管中8个笔画段a—h中的哪些段点亮,如数字1要求点亮笔画b和c。
我们可以根据数字与笔画的对应关系列出各数字的笔画代码真值表如表2-1所示,在每个数字需点亮的笔画处填入1,不需要点亮的位填入0,然后转换为16进制数就是该数字的显示代码。
若采用共阳极LED,则由于是0点亮,显示代码也就不同,笔画真值表与表2-1相反。
显然,若各笔画连接的口线不同,显示代码也不同。
图2-2 通过LED数码管显示数字电路图表2-1 LED笔划显示真值表(共阴)有了代码表,还需要通过查表程序将数字转换为显示代码。
查表程序一般是将表格中数据顺序放置在程序存储器的某个区域中,形成一数据表。
程序中需要查表时,将表格首地址送入数据指针DPTR,即使DPTR指向表格首地址,在A中放入待查表格项的序号,例如要显示2,利用“MOVC A,@A+DPTR”指令,即以(A+DPTR)为地址,将数据表中第2字节的表格项数据5BH取出放入A,从而实现查得2的显示代码5BH,然后送端口P2驱动笔画段显示出数字2。
四、实验步骤1.在Proteus ISIS中设计硬件电路(参考图2-2)(1)选择电路元器件并放入原理图编辑区:单片机:AT89C52。
一位共阴极数码管:7SEG-COM-CAT-GRN。
8位拨码开关:DIPSWC_8。
接地:Ground(Terminal模型中)。
(2)参考图2-2完成原理图。
实验二 查表程序实现LED数字显示

实验二查表程序实现LED数字显示一、实验要求通过拨码开关表示16进制数0—F,利用LED数码管显示该数字。
包括硬件电路和程序设计。
二、实验目的理解8段LED数码管的显示原理和LED显示的转化方法,学习查表程序的设计。
三、实验原理图2-1 8段LED数码管显示原理和笔画分布由电路图2-2可以看出,这里需要通过传送指令将P1口拨码开关的状态读入累加器A,利用查表指令转换为LED数码管的显示笔画代码,再传送到P2口驱动数码管。
所谓显示代码就是根据该数字的笔画确定LED数码管中8个笔画段a—h中的哪些段点亮,如数字1要求点亮笔画b和c。
我们可以根据数字与笔画的对应关系列出各数字的笔画代码真值表如表2-1所示,在每个数字需点亮的笔画处填入1,不需要点亮的位填入0,然后转换为16进制数就是该数字的显示代码。
若采用共阳极LED,则由于是0点亮,显示代码也就不同,笔画真值表与表2-1相反。
显然,若各笔画连接的口线不同,显示代码也不同。
图2-2 通过LED数码管显示数字电路图表2-1 LED笔划显示真值表(共阴)有了代码表,还需要通过查表程序将数字转换为显示代码。
查表程序一般是将表格中数据顺序放置在程序存储器的某个区域中,形成一数据表。
程序中需要查表时,将表格首地址送入数据指针DPTR,即使DPTR指向表格首地址,在A中放入待查表格项的序号,例如要显示2,利用“MOVC A,@A+DPTR”指令,即以(A+DPTR)为地址,将数据表中第2字节的表格项数据5BH取出放入A,从而实现查得2的显示代码5BH,然后送端口P2驱动笔画段显示出数字2。
四、实验步骤1.在Proteus ISIS中设计硬件电路(参考图2-2)(1)选择电路元器件并放入原理图编辑区:单片机:AT89C52。
一位共阴极数码管:7SEG-COM-CAT-GRN。
8位拨码开关:DIPSWC_8。
接地:Ground(Terminal模型中)。
(2)参考图2-2完成原理图。
再谈查表程序的设计技术

A, # H 91 @ DP R 十^ T
扩展数据 衰蠢衰技术
在表 中元 素数 目太于 26的情况 5
下, 表中序号仅用累加器 A来表示是不够的 . 一般要用双字节 来表示表中序号 。这样 . 使用 MO C . V A @A+ P R指令查表 DT 时, 要用 D I P' R直接加 1 6位序号才能够 正确完成查表运算。 因 此 查表之前必 须进行 双字节地 址的加法运 算。磐程时 要注意
于 MO C指 令地址 的 一18一+17之内。并且 A中序号必须 V 2 2
进行地址偏移量的补偿 运算 , 这样才 能正确地完成查 表运算 。 扩展查衰技术 一般情况下 , 为
单片机程序设计中被广眨应用 , 每一个 单片机应用系统 的开发
者都要学会灵活地利用查表技 术解决实际问题
了使程序结构清晰 , 单片机应用程序
的地址分 配如 图 2 。散据表与程序在 存储器中是分开放置的, 因此数据 表 应当不受程序位置的限制 , 可以在程 序存储器 6 K地址范围 内任意安排。 4
在单片机中 , 表格具有 只读的性质 , 所以通 常将其 固化在
R M 中。常见 的表格有函散关 系表 、 O 数码 显示 笔划表 , 系统常 量表三种 。 醋数美 蕞衰 当某个散据处理算法非常 复杂 , 甚至根本没 有计算公式时 , 人们往往通过实验将函数关 系列戒一张表 , 并 将其固化在 R M中。如置度表等 。 O 数码量 示笔划衰 单片机 一般采用散码 管或液 晶数 码板 做显示输出设备。为了接需要显示 出各种数字碱符号 , 一般将
新填写。
(CB P )设计 中广泛使用 的一种 优秀软件 。在 学习使用 Po | r| e 9 19设计 B板时会 出现很 多同题 ,特别是对韧学者更 是 89 如此 ,如果不能解 决这些同题 设计 工作就 不能顺利地进行 下 去 。笔者根据多年的教学经验 , Po | 8 9 学 习过程 中易 对 rt 9 / 9 e 出现的一些 问题 、 因及其解决 办法作如下介绍。 耀
单片机c语言程序设计---单片机实验报告

单片机c语言程序设计---单片机实验报告实验目的:1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器实验内容:一.定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。
(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。
)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。
方式2有自动重装初值的功能,初始化后不必再置初值。
将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。
TMOD=60H。
定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。
程序:#include<REGX51.H>void main(){P1_0=0;TMOD=0x60;TH1=0xFD;TL1=0xFD;ET1=1;EA=1;TR1=1;while(1){}}void timer1_Routine()interrupt3{P1_0=~P1_0;}实验2.中断定时使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。
分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。
主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。
实验要求:完成计数实验和中断计数实验。
具体包括绘制仿真电路图、编写c源程序、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,对仿真结果进行总结。
程序:#include<REGX51.H>#include"Delay.h"int i;int j=0;void main(){ P1=0; P2=0;P3=0; P0=0; TMOD=0x01;TH0=0x3C;TL0=0xB0;ET0=1;EA=1;TR0=1;while(1) {}}void timer0_Routine()interrupt1 {TH0=0x3C;TL0=0xB0;j++;if(j>=150){ j=0; for(i=0;i<20;i++){P1=~P1;P2=~P2;P3=~P3;P0=~P0;Delay(200); } }}实验分析:心得体会:。
MCS51单片机实验及课程设计指导书

MCS—51单片机实验及课程设计指导书杨打生王忠远康瑞芳内蒙古电子信息职业技术学院2006.3目录实验实验一:WAVE软件使用实验二:常用指令的使用练习实验三:循环程序实验四:查表程序实验五:数制转换程序实验六实用子程序:(编程器的使用)实验七:输入检测与输出显示程序实验八:中断/定时程序课设一、课程设计目的和意义二、实验电路系统的结构和使用方法三、设计参考题目介绍和设计提示性思考题四、设计任务书及要求五、课程设计报告格式及要求六、考核办法七、课程设计内容及学时安排实验一:WAVE软件使用一、预习内容1、试验目的:学习WAVE软件安装和基本使用。
2、WAVE软件的安装选择WAVE文件夹下的SETUP.EXE文件并双击接着下一步最后到完成。
3、安装后写出软件窗口中工具栏中各按钮的名称。
参考说明书4、写出下面二实例各条指令的含义二、试验内容实例一指令的含义ORG 0000HMOV R0,#01HL1: MOV A,R0MOV P0,AINC R0AJMP L1END实例二ORG 0000H 指令的含义MOV R0,#01HL2: MOV A,R0MOV P2,ARL AMOV R0,ALJMP L2END1、打开WAVE见面,新建一个文件后输入实例一程序内容,并保存在我的文档名为A1.ASM ,执行编译按钮或项目菜单中的编译2、编译后,如正确扫描过去,不正确提示出错信息修改后再编译直到不提示错误为止。
3、打开窗口中的CPU窗口和数据窗口的CODE和DADE写出每条指令的机器操作代码。
4、打开窗口中的平排窗口,这样程序窗口、CPU窗口、数据存储器窗口就并排在整个屏幕。
5、点击单步按钮或F8键进行单步操作。
6、观测CPU窗口的A、P0和数据存储器窗口R0的状态并列表1记录每循环一次下列寄存器的值。
8、新建一个文件后输入实例二程序内容,并保存在我的文档名为A2.ASM ,执行编译按钮或项目菜单中的编译三、实验报告要求1、写出上述两试验程序各条指令的含义(与预习时相比是否一致)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.4 查表程序设计实验
2.4.1 实验目的
学习查表程序的设计方法,熟悉 51 的指令系统。
2.4.2 实验设备
PC 机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或
“TD-PITE 教学实验系统+TD-51 系统平台”
2.4.3实验内容
1. 通过查表的方法将 16 进制数转换为 ASCII码;
2
2. 通过查表的方法实现y=x ,其中x为 0~9 的十进制数,以BCD码表示,结果仍以BCD
码形式输出。
2.4.4 实验步骤
1. 采用查表的方法将 16 进制数转换为 ASCII 码
根据 ASCII码表可知,0~9 的 ASCII码为 30H~39H,A~F的 ASCII码为 41H~46H,算
法为(假定待转换的数存放在 R7 中):
当 R7≤9 时,相应的 ASCII码为:R7+30H;
当 R7>9 时,相应的 ASCII码为:R7+30H+07H。
实验程序清单:(Asm4-1.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV DPTR, #ASCTAB ;表格首地址送DPTR
MOV A, R7 ;R7中为待转换的数
ANL A, #0FH ;取低4位
MOVC A, @A+DPTR ;查表
MOV R5, A ;低4位转换结果送R1
MOV A, R7
ANL A, #0F0H ;取待转换数的高4位
SWAP A ;高4位与低4位交换
MOVC A, @A+DPTR ;查表
MOV R6, A ;高4位转换结果送R2
SJMP MAIN ;设置断点观察结果
;ASCII码表
ASCTAB: DB 30H, 31H, 32H, 33H, 34H
DB 35H, 36H, 37H, 38H, 39H
DB 41H, 42H, 43H, 44H, 45H, 46H
END
实验步骤:
(1)编写实验程序,编译、链接无误后联机调试;
(2)将待转换的数存放在 R7 中,如令 R7 中的值为 0x86;
(3)在语句行 SJMP MAIN设置断点,运行程序;
(4)程序停止后查看寄存器 R6、R5 中的值,R6 中为高 4 位转换结果 0x38,R5 中为低 4
位转换结果 0x36;
(5)反复修改 R7 的值,运行程序,验证程序功能。
2. 通过查表实现y=x
x 为 0~9 的十进制数,存放与 R7 中,以 BCD 码的形式保存,结果 y 以 BCD 码的形式存
放于寄存器 R6 中。
实验程序清单:(Asm4-2.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV DPTR, #SQR ;取表格首地址
MOV A, R7 ;要计算的值
MOVC A, @A+DPTR ;查表
MOV R6, A ;结果保存
SJMP MAIN
;平方表
SQR: DB 00H, 01H, 04H, 09H, 16H
DB 25H, 36H, 49H, 64H, 81H
END
实验步骤:
(1)编写实验程序,经编译、链接无误后,进入调试状态;
(2)改变 R7 的值,如 0x07;
(3)在语句行 SJMP MAIN处设置断点,运行程序;
(4)程序停止后,查看寄存器 R6 中的值,应为 0x49;
(5)反复修改 R7 中的值,运行程序,验证程序功能。