内容正文:
举一反三考点练
《单片机技术与应用》单片机程序设计-讲义
1. 掌握查表程序读识;
2. 理解查表程序编写;
3. 掌握显示子程序、延时子程序读识;
知识点一 查表程序读识
1. 查表程序概述
查表程序是一种在单片机编程中常用的程序设计方法。它通过查表的方式,将一系列数据或代码存储在程序存储器中,程序运行时根据需要查找相应的数据或代码,从而实现特定的功能。
2. 查表程序的基本原理
查表程序利用程序存储器(ROM)中的表格数据,通过索引值(通常是累加器A或其他寄存器)来查找表格中的数据。查表过程可以分为以下几个步骤:
(1)确定表格的起始地址和结束地址。
(2)根据索引值计算表格中的偏移量。
(3)从表格起始地址加上偏移量,获取所需的数据或代码。
3. 查表程序的关键知识点
(1)表格数据:表格数据可以是常数、地址、字符编码等,根据实际需求进行定义。
(2)索引值:通常使用累加器A或其他寄存器作为索引值,用于查找表格中的数据。
(3)偏移量计算:索引值与表格起始地址的差值即为偏移量。
(4)查表指令:不同单片机的查表指令可能有所不同,常见的查表指令有MOVC(查表传送)等。
4. 查表程序的优点
(1)简化程序结构:查表程序可以将复杂的运算过程转化为简单的查表操作,降低程序复杂度。
(2)提高运行效率:查表操作通常比复杂的运算速度快,有利于提高程序运行效率。
(3)节省存储空间:通过查表方式,可以避免在程序中重复定义大量数据,节省存储空间。
5. 查表指令(2条)
这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:
MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中
MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中
本指令是将ROM的数据送入A中,本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格。
说明:
(1)此条指令引出了一个特殊的寻址方式,即变址寻址,在上节课时我们已进行过讲解,本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起来,就成为要查找单元的地址。
(2)查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。
例:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)
MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
TABLE:DB 0,1,4,9,16,25
设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也可以类推
标号的真实含义:从这个地方也可以看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了0,1,4,9,16,25这几个数据在ROM中存放的起点位置。我们经常看到的指令,如LCALL DELAY指令中,DELAY则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。事实上,CPU正是通过这个地址才找到这段程序的。
可以通过以下的例子再来看看标号的含义:
MOV DPTR,#100H
MOV A,R0
MOVC A,@A+DPTR
.....
ORG 0100H
DB 0,1,4,9,16,25
如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。
6. 查表程序的应用实例
以下是一个简单的查表程序实例,用于实现数码管显示:
ORG 0000H
START: MOV A, #0AH ; 索引值为10
MOVC A, @A+DPTR ; 查表操作,DPTR为表格起始地址
MOV P1, A ; 将查到的数据送至P1口,驱动数码管显示
SJMP START ; 无限循环
TABLE: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ; 0-9数码管编码表
END
1. (单项选择题)下列关于查表程序的说法,错误的是?( )
A. 查表程序可以简化程序结构
B. 查表程序可以提高程序运行效率
C. 查表程序只能用于查找常数,不能用于查找地址
D. 查表程序可以节省存储空间
【答案】C
【解析】查表程序不仅可以查找常数,也可以用于查找地址或其他数据。
【要点】考查查表程序的基本功能。
1. (单项选择题)在单片机中,下列哪个寄存器通常用作查表时的索引值?( )
A. 程序计数器(PC) B. 累加器(A) C. 堆栈指针(SP) D. 数据指针(DPTR)
【答案】B
【解析】累加器(A)通常用作查表时的索引值。
【要点】考查查表程序中索引值的寄存器。
2. (单项选择题)以下哪个指令不是用于查表操作的?( )
A. MOVC B. MOV C. MUL D. DIV
【答案】C
【解析】MOVC是用于查表传送的指令,而MUL是乘法指令,不用于查表操作。
【要点】考查查表程序中的指令。
3. (判断题)查表程序在单片机编程中只能用于查找数字编码。( )
【答案】×
【解析】查表程序可以用于查找各种类型的数据,不仅限于数字编码。
【要点】考查查表程序的应用范围。
1. (判断题)在查表程序中,偏移量是指表格起始地址与索引值的差值。( )
【答案】√
【解析】偏移量的确是指表格起始地址与索引值的差值。
【要点】考查查表程序中偏移量的定义。
2. (填空题)在单片机编程中,查表程序利用程序存储器中的______数据,通过索引值来查找所需的数据或代码。
【答案】表格
【解析】查表程序利用程序存储器中的表格数据。
【要点】考查查表程序的基本原理。
3. (填空题)查表程序中,MOVC指令的作用是从______地址加上偏移量处取出数据。
【答案】表格起始
【解析】MOVC指令用于从表格起始地址加上偏移量处取出数据。
【要点】考查查表程序中的指令功能。
· 查表程序的作用:查表程序能够简化程序逻辑,提高代码的复用性,通过查找预存的数据表来实现快速的数据检索,从而提高程序的运行效率和节省存储空间。
· 查表程序的基本原理:查表程序通过索引值(通常是累加器A或其他寄存器)与表格的起始地址相结合,计算出表格中的偏移量,从而访问到程序存储器中对应的数据。
· 查表程序的指令:在单片机编程中,MOVC指令是常用的查表指令,它用于从表格起始地址加上偏移量的位置取出数据。
· 查表程序的应用范围:查表程序不仅限于查找数字编码,它可以用于查找各种类型的数据,包括但不限于字符编码、功能码、地址信息等。
知识点二 查表程序编写
一、查表程序的基本概念
查表法:查表法是一种程序设计方法,它利用表格来存储一系列数据或指令,程序运行时通过查表的方式找到所需的数据或指令,从而实现某种功能。
查表程序:查表程序是指单片机中用于实现查表功能的程序段。它通常包括以下几个部分:表格定义、查表算法、查表结果处理。
二、查表程序的关键知识点
表格的定义
(1)表格类型:根据存储的数据类型,表格可分为数值表、地址表、指令表等。
(2)表格结构:表格可以是一维数组、二维数组或多维数组。
(3)表格初始化:在程序开始时,需要将表格中的数据初始化。
查表算法
(1)索引法:通过索引值直接访问表格中的元素。索引值可以是程序中的变量或常量。
(2)计算法:通过计算得到表格中的元素地址,然后访问该地址的数据。
(3)条件判断法:根据特定条件,选择不同的表格进行查表。
查表结果处理
(1)数据读取:从表格中读取数据后,根据需要进行处理,如显示、计算等。
(2)指令执行:查表得到的是指令时,需要将其送入单片机的指令寄存器执行。
(3)地址跳转:查表得到的是地址时,通过跳转指令实现程序流程的控制。
三、查表程序的编写步骤
分析问题,确定需要查表的场景和数据。
设计表格结构,初始化表格数据。
编写查表算法,实现数据的查找。
处理查表结果,实现所需功能。
测试查表程序,确保其正确性和稳定性。
查表程序示例:
四、注意事项
表格数据的范围和精度:确保表格数据满足实际需求。
查表速度:优化查表算法,提高程序运行速度。
内存空间:合理规划表格大小,避免占用过多内存。
程序的可读性和维护性:编写清晰的查表程序,便于后续维护和升级。
1. (单项选择题)在单片机查表程序中,下列哪个方法不是常用的查表算法?( )
A. 索引法 B. 计算法 C. 条件判断法 D. 递归法
【答案】D
【解析】递归法不是查表程序中常用的算法,索引法、计算法和条件判断法是常用的查表算法。
【要点】考查查表算法的种类。
1. (单项选择题)下列关于查表程序的说法,错误的是?( )
A. 查表程序可以用于存储和检索数据
B. 查表程序只能用于数值数据的查找
C. 查表程序可以提高程序的执行效率
D. 查表程序需要预先定义好数据表格
【答案】B
【解析】查表程序不仅可以用于数值数据的查找,还可以用于指令、地址等其他类型数据的查找。
【要点】考查查表程序的应用范围。
2. (单项选择题)以下关于查表程序表格初始化的描述,错误的是?( )
A. 表格初始化通常在程序开始时进行
B. 表格初始化可以动态进行
C. 表格初始化后,数据在程序运行过程中不能修改
D. 表格初始化是为了确保表格数据的正确性
【答案】C
【解析】表格初始化后,数据在程序运行过程中可以根据需要进行修改。
【要点】考查表格初始化的基本概念。
3. (判断题)查表程序中的表格可以是一维数组、二维数组或多维数组。( )
【答案】√
【解析】查表程序的表格可以是不同维度的数组,以适应不同的数据存储需求。
【要点】考查表格的结构。
1. (判断题)在查表程序中,查表算法的执行速度不会影响整个程序的运行效率。( )
【答案】×
【解析】查表算法的执行速度会直接影响整个程序的运行效率,因此需要优化查表算法。
【要点】考查查表算法对程序效率的影响。
2. (填空题)查表程序中,通过______法可以直接访问表格中的元素。
【答案】索引
【解析】索引法是通过索引值直接访问表格中的元素。
【要点】考查索引法的基本概念。
3. (填空题)在查表程序中,查表得到的是地址时,可以通过______指令实现程序流程的控制。
【答案】跳转
【解析】查表得到地址后,可以通过跳转指令改变程序的执行流程。
【要点】考查查表结果的处理方法。
· 查表程序的核心是表格的构建与算法的设计:查表程序通过预先定义的表格来存储数据,并通过设计的算法来实现数据的快速检索。
· 查表程序适用于多种数据类型和查找需求:查表程序不仅限于数值数据的查找,还可以应用于地址、指令等不同类型数据的检索,提高了程序的灵活性和适用性。
· 查表程序的效率和内存管理至关重要:优化查表算法可以提高程序执行效率,同时合理规划表格大小可以避免不必要的内存浪费。
· 查表程序的初始化和结果处理是关键环节:正确的表格初始化确保了数据的准确性,而有效的查表结果处理则是实现程序功能的关键。
知识点三 显示子程序、延时子程序读识
一、显示子程序
概念:显示子程序是指用于控制单片机与显示器件(如LED、LCD等)进行数据交互的子程序。它主要负责将单片机内部的数据转换成可显示的字符或图形,并在显示器件上实时显示。
主要功能:
初始化显示接口:配置显示器件的工作模式、显示格式等参数。
数据转换:将单片机内部的数据转换成显示器件所需的编码格式。
显示控制:根据显示需求,控制显示内容的位置、亮度、刷新频率等。
知识点:
显示接口:介绍单片机与显示器件的连接方式,如并行接口、串行接口等。
显示编码:讲解如何将单片机内部的数据转换成显示器件所需的编码格式,如ASCII码、格雷码等。
显示驱动:分析显示器件的驱动原理,如静态驱动、动态驱动等。
例:使用INT 21H功能调用实现每隔一秒显示A~Z共26个大写字母
思路: 调用子程序的格式
CALL <过程名>
<过程名> PROC
...
...
RET
<过程名> ENDP
· 实现延时1s操作,需要用到内外2个循环,3个寄存器BX和CX和AL,内循环设置参数为325,BX计数,相当于1ms,外循环设置循环次数为1000,CX计数,相当于循环1000次1ms,即为1s,AL存1,代表延时的秒数。
· 若需要延时n秒,则设置AL的次数为n,然后把延时1s的循环操作再循环n次即可,相当于3重循环。
· 在子程序中用到的CX,主程序中存了其他值,所以需要先PUSH CX的值保存下来,子程序中用完CX后再POP出来。
代码:
二、延时子程序
概念:延时子程序是指用于实现单片机程序中时间延迟功能的子程序。它通过软件方法在程序中插入一定时间的等待,以满足某些操作对时间的要求。
主要功能:
定时延时:实现固定时间的延迟。
变量延时:根据程序运行过程中变量的变化实现可调时间的延迟。
知识点:
延时方法:介绍常用的延时方法,如软件延时、硬件延时(如定时器/计数器)。
延时精度:分析影响延时精度的因素,如晶振频率、指令周期等。
延时优化:探讨如何优化延时程序,提高程序运行效率。
延时子程序编写注意事项:
选择合适的延时方法:根据实际需求选择软件延时或硬件延时。
估算延时时间:根据单片机的晶振频率和指令周期,计算延时子程序的延时时间。
避免过度占用CPU资源:在设计延时子程序时,尽量减少对CPU资源的占用,提高程序运行效率。
例:在屏幕上第一行显示倒计时3 2 1 go,每隔一秒显示一个数字。
在屏幕上第二行显示倒计时5 4 3 2 1,每隔一秒显示一个数字。
在屏幕上第三行显示time`s up
思路:
输出数字间的空格,需要在输出每一个数字之后使用2号功能单独输出空格,注意需要先PUSH一下DL的值,因为DL在前面输出数字时一直保存的是数字的ASCII码值,而且后面在输出下一个数字时还需要该值,所以在输出空格的时候需要把DL的值保存下来,输出完空格之后再POP出来,以免影响后续数字输出的工作
在输出“time's up”字符串过程中,在数据段定义字符串的时候,字符'会被当做字符串的分隔符号,因此需要先输出字符串time,再使用2号功能单独输出 ' ('字符的ASCII码值是21H),最后输出字符串s up
代码:
;在屏幕第一行显示倒计时3 2 1 go,每隔一秒显示一个数字。
;在屏幕第二行显示倒计时5 4 3 2 1,每隔一秒显示一个数字。
;在屏幕第三行显示字符串 'TIME'S UP!'
DATA SEGMENT
STR1 DB 'GO!', 0DH, 0AH, '$' ;0DH, 0AH为回车, 换行的ASCII码
STR2 DB 0DH, 0AH, 'TIME',27H,'S UP!','$' ;27H为单引号的ASCII码
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
N1MS = 275 ;建立延时1ms系数循环计数次数
START: MOV AX,DATA
MOV DS,AX
MOV CX,3 ;倒计时3个数
MOV DL,33H ;'3'的ASCII码值
CALL COUNTDOWN ;显示倒计时321
MOV DX,OFFSET STR1 ; 显示GO!
MOV AH,9
INT 21H
MOV CX,5 ;倒计时5个数
MOV DL,35H ;'5'的ASCII码值
CALL COUNTDOWN ;显示倒计时54321
MOV DX,OFFSET STR2 ; 显示TIME'S UP!
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
;延时显示倒计时数字子程序
COUNTDOWN PROC
A1: MOV AH,02H
INT 21H ;功能调用
PUSH DX ;因为下一步会用到DL寄存器,所以此时的子程序的DL要提前压入堆栈区保护起来。堆栈操作以字为单位,所以要压入DX。
MOV DL,20H ;空格的ASCII码值为20H
MOV AH,02H
INT 21H
POP DX
PUSH CX ;因为下一步调用的子延时程序DT1S中会用到CX和DX寄存器,所以此子程序的CX和DX要提前压入堆栈区保护起来。
PUSH DX
MOV AL, 1 ;延时1秒
CALL DT1S ;调用延时1S子程序
POP DX ;恢复压入堆栈区的CX和DX的值
POP CX
DEC DL ;切换下一个字母
LOOP A1
RET
COUNTDOWN ENDP
;延时1S子程序
DT1S PROC ;使用的工作寄存器为:CX、DX,入口参数为AL寄存器,AL的数值为需要延时的秒数。
D0: MOV CX, 1000 ;内循环延时约1ms,外循环为1000次,则内外循环一轮为1秒。
D1: MOV DX, N1MS ;建立延时1ms系数循环计数次数
D2: DEC DX
JNZ D2
DEC CX
JNZ D1
DEC AL
JNZ D0
RET
DT1S ENDP
CODE ENDS
END START
1. (单项选择题)下列关于显示子程序的说法,错误的是?( )
A. 显示子程序用于控制单片机与显示器件的数据交互
B. 显示子程序可以将单片机内部的数据直接显示在LED上
C. 显示子程序不需要进行数据转换
D. 显示子程序可以控制显示内容的位置和亮度
【答案】C
【解析】显示子程序需要将单片机内部的数据转换成显示器件所需的编码格式。
【要点】考查显示子程序的数据转换功能。
1. (单项选择题)关于延时子程序,以下说法正确的是?( )
A. 延时子程序只能实现固定时间的延迟
B. 延时子程序会影响CPU的运行效率
C. 延时子程序可以通过硬件方法实现
D. 延时子程序在程序中没有任何作用
【答案】C
【解析】延时子程序可以通过硬件方法(如定时器/计数器)实现。
【要点】考查延时子程序的实现方法。
2. (单项选择题)以下哪个接口不是单片机与显示器件的连接方式?( )
A. 并行接口 B. 串行接口 C. 网络接口 D. USB接口
【答案】C
【解析】单片机与显示器件的连接方式通常为并行接口或串行接口。
【要点】考查单片机与显示器件的连接方式。
3. (判断题)显示子程序在初始化显示接口时,需要配置显示器件的工作模式和显示格式。( )
【答案】√
【解析】显示子程序在初始化显示接口时,确实需要配置显示器件的工作模式和显示格式。
【要点】考查显示子程序初始化显示接口的功能。
1. (判断题)延时子程序的延时精度与单片机的晶振频率无关。( )
【答案】×
【解析】延时子程序的延时精度与单片机的晶振频率有关。
【要点】考查影响延时精度的因素。
2. (填空题)显示子程序中的数据转换功能,是指将单片机内部的数据转换成______所需的编码格式。
【答案】显示器件
【解析】数据转换功能是指将单片机内部的数据转换成显示器件所需的编码格式。
【要点】考查显示子程序的数据转换功能。
3. (填空题)在设计延时子程序时,应尽量减少对______资源的占用,提高程序运行效率。
【答案】CPU
【解析】在设计延时子程序时,应尽量减少对CPU资源的占用,提高程序运行效率。
【要点】考查延时子程序设计的注意事项。
· 显示子程序的关键作用:显示子程序是单片机与显示器件之间数据交互的桥梁,它负责将单片机内部的数据转换成显示器件可以识别的格式,并在显示器件上实时显示,从而实现用户界面的交互功能。
· 数据转换的重要性:在显示子程序中,数据转换是一个核心环节,它确保了单片机内部数据能够正确地显示在相应的显示器件上,这一过程涉及到编码格式、显示分辨率等多种因素。
· 延时子程序的设计要点:延时子程序在单片机应用中用于实现时间控制,设计时需考虑延时精度、CPU资源占用等因素,以达到既定的延时效果,同时不影响系统的整体运行效率。
· 显示与延时的结合应用:在实际的单片机应用中,显示子程序和延时子程序往往需要配合使用,例如,通过延时控制显示内容的刷新速度,或者实现动态显示效果,从而提升用户体验。
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$