单片机 查表程序设计实验

合集下载

单片机实验指导书

单片机实验指导书

μ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数字显示

实验二查表程序实现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数字显示

实验二查表程序实现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语言程序设计---单片机实验报告

单片机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单片机实验及课程设计指导书

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、写出上述两试验程序各条指令的含义(与预习时相比是否一致)。

4-05 查表程序设计

4-05 查表程序设计
如果DPTR已被使用,则在查表前必须保护DPTR,且结束后恢复DPTR, 上例可改成如下形式:
7
查表程序设计
- x和y均为单字节数的查表程序设计
TAB1:
PUSH PUSH MOV MOVC POP POP RET DB DB
DPH DPL DPTR,#TAB1 A,@A+DPTR DPL DPH
4
查表程序设计
- x和y均为单字节数的查表程序设计
1. x和y均为单字节数的查表程序设计 【例】 设计一子程序,功能是根据累加器A中的数x(0~9之间)查x的
平方表y,根据x的值查出相应的平方y。本例中的x和y均为单字节数。
地址 Y3Y2Y1Y0 Y3Y2Y1Y0+2 Y3Y2Y1Y0+3 Y3Y2Y1Y0+4
子程序 ADD A,#01H MOVC A,@A+PC RET DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H ;数0~9的平方表
5
查表程序设计
- x和y均为单字节数的查表程序设计
地址 Y3Y2Y1Y0 Y3Y2Y1Y0+2 Y3Y2Y1Y0+3 Y3Y2Y1Y0+4
查表程序如下:
9
查表程序设计
- x和y均为双字节数的查表程序设计
10
查表程序设计
- x和y均为双字节数的查表程序设计
表格长度不能超过256B,且表格只能存放于“MOVC A,@A+PC”指令以 下的256个单元中,如需把表格放在程序存储器空间的任何地方,应使用指 令“ MOVC A,@A+DPTR”。
3
查表程序设计
- 概述 指令“MOVC A,@A+PC”的优缺点:

实验二 分支程序,查表程序编写实验

实验二 分支程序,查表程序编写实验

实验二分支程序,查表程序编写实验一、实验目的1.掌握跳转指令2.掌握子程序调用指令3.掌握查表程序运用二、实验设备单片机IDE集成开发软件三、实验要求验证“实验原理”一节中给出的实例程序,熟悉各种跳转指令、子程序调用指令,以及查表程序编写方法。

四、实验原理作为软件实验,可以在没有硬件及仿真仪的情况下,利用集成开发环境进行。

1.跳转指令控制转移的指令包括无条件转移指令和有条件跳转指令。

(1)长跳转指令LJMP addr16长跳转,把16位(2个字节)的地址送入PC中。

〔2〕绝对转移指令AJMP addr11在存储空间2kB内转移。

与PC当前值高5位共同组成16位目标地址。

(3)短跳转指令SJMP rel8位补码表示的地址。

可以在-128到127之间跳转。

(4)间接跳转指令JMP @A+DPTR这是一条很有用的散转指令。

跳转地址在程序运行时动态决定。

(5)累加器判零转移指令JZ rel,JNZ rel,JZ rel,累加器为0转移,JNZ rel,累加器不为0转移。

(6)比较转移指令,CJNE <目的字节>,<源字节>,rel。

CJNE A,#data,relCJNE A,direct,relCJNE @Ri,#data,relCJNE Rn,#data,rel(8)循环转移指令DJNZ Rn,rel。

首先Rn减1,然后判断是否是零,不是则跳转。

DJNZ direct , rel。

首先直接地址中的数据减1,然后判断是否是零,不是则跳转。

(9)位控制转移指令JC rel,若Cy=1,则(PC)<--(PC)+2+rel若Cy=0,则(PC)<--(PC)+2JNC rel若Cy=0,则(PC)<--(PC)+2+rel若Cy=1,则(PC)<--(PC)+2JB bit,rel; 若(bit)=1,则(PC)<--(PC)+3+rel若(bit)=0,则(PC)<--(PC)+3JNB bit,rel若(bit)=0,则(PC)<--(PC)+3+rel若(bit)=1,则(PC)<--(PC)+3JBC bit,rel; 若(bit)=1,则(PC)<--(PC)+3若(bit)=0,则(PC)<--(PC)+3+rel,(bit)←02.子程序调用和返回指令。

单片机原理实验报告

单片机原理实验报告

实验一:系统认识实验一、设计目的:1. 学习 Keil C51 集成开发环境的操作;2. 熟悉 TD-51 系统板的结构及使用。

二、设计内容:编写程序,将 00H~0FH 共 16 个数写入单片机内部 RAM 的 30H~3FH 空间。

三、设计步骤:1. 创建 Keil C51 应用程序(1)运行 Keil C51 软件,进入 Keil C51 集成开发环境。

(2)选择工具栏的 Project 选项,弹出下拉菜单,选择 NewProject 命令,建立一个新的μVision2 工程。

这时会弹出文件保存对话框,选择工程目录并输入文件名 Asm1 后,单击保存。

(3)工程建立完毕后,μVision2 会马上弹出器件选择窗口。

器件选择的目的是告诉μVision2 使用的 80C51 芯片的型号是哪一个公司的哪一个型号,不同型号的 51 芯片内部资源是不同的。

此时选择 SST 公司的 SST89E554RC。

(4)到此建立好一个空白工程,现在需要人工为工程添加程序文件,如果还没有程序文件则必须建立它。

选择工具栏的 File 选项,在弹出的下拉菜单中选择 New 目录。

(5)输入程序,完毕后点击“保存”命令保存源程序,将 Text1 保存成Asm1.asm。

Keil C51 支持汇编和 C 语言,μVision2 会根据文件后缀判断文件的类型,进行自动处理,因此保存时需要输入文件名及扩展名.ASM 或.C。

保存后,文件中字体的颜色会发生一定变化,关键字会变为蓝色。

(6)程序文件建立后,并没有与 Asm1.Uv2 工程建立任何关系。

此时,需要将 Asm1.asm 源程序添加到 Asm1.Uv2 工程中,构成一个完整的工程项目。

在Project Window 窗口内,选中Source Group1 点击鼠标右键,选择 Add Files to Group‘Source Group1’命令,此时弹出添加源程序文件对话框,选择文件Asm1.asm,点击 Add 命令按钮即可将源程序文件添加到工程中。

单片机 查表程序设计 软件实验

单片机 查表程序设计 软件实验

实验八查表程序设计一、实验目的1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.学会用MOVC指令编写查表程序。

二、实验内容求平方值查表程序图2-5 查表程序框图(20H)=03HORG 0000HMOV A,20H (A)=(20H)=03H 2字节MOVC A,@A+PC (A)=(A)+(PC)=05H+04H=09H 1字节SJMP $DB 0,1,4,9,16DB 25,36,49,64 81,DB 100,121,144,169,196,225END测量温度查表程序查-10 (30H)=02HORG 0000HMOV DPTR,#TAB (DPTR)=(TAB)=20H 3字节CLR C (Cy)=00H 1字节MOV A,30H (A)=(30H)=02H (PSW)=01H (P)=01H 2字节MOV R0,A (R0)=(A)=02H 1字节ADD A,R0 (A)=(A)+(R0)=02H+02H=04H 1字节MOV F0,C (F0)=(Cy)=00H 2字节ADD A,DPL (A)=(A)+(DPL)=04H+20H=24H (PSW)=00H 2字节MOV DPL,A (DPTR)=(A)=24H 2字节CLR A (A)=00H 1字节ADDC A,DPH (A)=(A)+(DPH)+(Cy)=00H 2字节MOV C,F0 (Cy)=(F0)=00H 2字节MOV DPH,A (DPH)=(A)=00H 2字节CLR A (A)=00H 1字节MOVC A,@A+DPTR (A)=((A)+(DPTR))=0FFH 1字节MOV R2,A (R2)=(A)=0FFH 1字节CLR A (A)=00H 1字节INC DPTR (DPTR)=(DPTR)+01H=24H+01H=25H 1字节MOVC A,@A+DPTR (A)=((A)+(DPTR))=0F6H 1字节MOV R3,A (R3)=(A)=0F6H 1字节SJMP $TAB:DW 56H ,1324H,-10H,25END思考题1、当表的长度〉255个字节时应选哪一条指令查表?答:使用MOVC A,@A+DPTR置零,并且需要对DPH、DPL进行运算处理,求出表目地址2、用PC指针查表编程时应注意什么?答:表的长度必须在255B之内,。

单片机实验报告

单片机实验报告

实验报告实验项目名称:P1口实验同组人:实验时间:实验室:K2-407单片机室指导教师:胡蔷一、实验目的:(l)学习P1口的使用方法; 熟悉Proteus软件电路设计和Keil软件程序调试方法。

(2)学习软件延时程序的编写。

重点:延时程序,P1口结构二、实验顶备知识:(l)Pl口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。

(2)Proteus软件应用,Keil软件程序调试应用。

三、实验内容:㈠模拟开关灯的Proteus仿真及C语言程序设计1、设计要求:监视开关K1(接在P3.0端口上),用发光二级管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。

2、仿真电路原理图元器件选取:①AT89C52:单片机;②RES:电阻;③CRYSTAL:晶振;④CAP、CAP-ELEC:电容、电解电容;⑤LED-GREEN:绿色发光二级管;⑥SWITCH:开关。

模拟开关灯的电路原理图3、程序设计内容①开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨动开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。

单片机可以采用if(K1= =1)或者if(K1= =0)指令来完成对开关状态的检测。

②输出控制当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二级管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二级管L1亮。

模拟开关灯的程序流程图4、程序清单㈡广告灯(利用查表方式)的Protues仿真及程序设计1、设计要求:利用查表的方法,使端口P1作单一灯的变化;左移2次,右移2次,闪烁2次(延时的时间0.2 s)。

2、仿真电路原理图元器件选取:①AT89C52:单片机;②RES:电阻;③CRYSTAL:晶振;④CAP、CAP-ELEC:电容、电解电容;⑤LED-GREEN:绿色发光二级管。

单片机 查表程序设计实验

单片机 查表程序设计实验

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码;22. 通过查表的方法实现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 0000HLJMP MAINORG 0100HMAIN: MOV DPTR, #ASCTAB ;表格首地址送DPTRMOV A, R7 ;R7中为待转换的数ANL A, #0FH ;取低4位MOVC A, @A+DPTR ;查表MOV R5, A ;低4位转换结果送R1MOV A, R7ANL A, #0F0H ;取待转换数的高4位SWAP A ;高4位与低4位交换MOVC A, @A+DPTR ;查表MOV R6, A ;高4位转换结果送R2SJMP MAIN ;设置断点观察结果;ASCII码表ASCTAB: DB 30H, 31H, 32H, 33H, 34HDB 35H, 36H, 37H, 38H, 39HDB 41H, 42H, 43H, 44H, 45H, 46HEND实验步骤:(1)编写实验程序,编译、链接无误后联机调试;(2)将待转换的数存放在 R7 中,如令 R7 中的值为 0x86;(3)在语句行 SJMP MAIN设置断点,运行程序;(4)程序停止后查看寄存器 R6、R5 中的值,R6 中为高 4 位转换结果 0x38,R5 中为低 4位转换结果 0x36;(5)反复修改 R7 的值,运行程序,验证程序功能。

51单片机实验程序

51单片机实验程序

用查表方式编写y=x13+x23+x33。

(x为0~9的整数)#include<reg51。

h>void main(){int code a[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255或-128~+127之间的话就用char,而现在的值明显超过这个范围,用int较合适.int的范围是0~65535或-32768~32767。

int y,x1,x2,x3;//此处定义根据习惯,也可写成char x1,x2,x3但是变量y一定要用int 来定义。

x1=2;x2=4;x3=9;//x1,x2,x3三个的值是自定的,只要是0~9当中的数值皆可,也可重复.y=a[x1]+a[x2]+a[x3];while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。

}//结果的查询在Keilvision软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch的框架内双击“double-click or F2 to add”文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。

1、有10个8位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的数据(1的个数为偶数)都要存到内RAM50H开始的数据区中。

试编写有关程序。

#include〈reg51。

h>void main(){int a[10]={0,1,5,20,24,54,64,88,101,105};//将所要处理的值存入RAM中,这些可以根据个人随意设定,但建议不要超过0~255的范围.char i; //定义一个变量char *q=0x50;//定义一个指针*q指向内部0x50这个地址。

for(i=9;i〉=0;i--)//9~0循环,共十次,也可以用for(i=0;i〈10;i++){ACC=a[i];//将a[i]的值赋给累加器ACCif (P==0)//PSW0位上的奇偶校验位,如果累加器ACC内数值1的个数为偶数那么P为0,若为奇数,P为1。

单片机c语言查表法实现arctan arcsin 反正切 反正弦计算

单片机c语言查表法实现arctan arcsin 反正切 反正弦计算

单片机c语言查表法实现arctan arcsin 反正切反正弦计算在单片机中,由于计算器的资源有限,直接计算反三角函数(如arctan、arcsin)是非常困难的。

然而,我们可以利用查表法来近似计算这些反三角函数,从而在单片机中实现它们的功能。

首先,我们需要明确反三角函数的定义。

对于给定的一个角度x,其反三角函数的值可以表示为一个实数y,满足sin(y) = x 或 tan(y) = x。

我们可以利用这个性质,通过查表法来逼近求解y的值。

具体实现上,我们可以先预先计算一张表格,表格中的每个元素对应一个特定的角度值x,并且计算出对应的反三角函数值y。

这样,当我们需要计算某个角度x的反三角函数时,直接查表即可得到对应的y值。

然而,由于单片机的存储资源有限,我们不能直接存储所有可能的角度值和对应的反三角函数值。

因此,我们需要在表格中存储一些特定的角度值,并且使用插值算法来逼近其他角度值的反三角函数值。

一种常用的插值算法是线性插值法。

假设我们需要计算的角度值x落在表格中的两个已知角度值x1和x2之间,对应的反三角函数值分别为y1和y2。

线性插值法可以通过以下公式来计算x对应的反三角函数值y:y = y1 + (y2 - y1) * (x - x1) / (x2 - x1)通过这种方式,我们可以利用表格中的已知数据来逼近计算出更多角度值对应的反三角函数值。

需要注意的是,由于插值算法的误差会随着插值范围的增大而增大,因此我们需要在设计表格时,尽量使得表格中的角度值分布均匀,以减小误差。

综上所述,通过查表法和插值算法,我们可以在单片机中实现反三角函数的计算。

这种方法虽然存在一定的误差,但对于一般的应用场景来说已经足够准确。

同时,这种方法也能够节省计算资源,提高计算效率,非常适合在单片机中使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 中的值,运行程序,验证程序功能。

相关文档
最新文档