单片机课堂中抽象指令具体化的教学方法探究
2021-06-16朱娟岳晓峰张炜唐新星
朱娟,岳晓峰,张炜,唐新星
(长春工业大学机电工程学院,吉林长春,130021)
0 引言
单片机课程主要培养学生对单片机的原理的理解及编程应用,其中单片机指令系统是编程过程中极其重要的内容,学生对单片机指令的理解需要透彻,准确,这里的学习如果模棱两可将严重影响学生后期对单片机的使用,所以对单片机指令系统的教学十分重要。为了提高单片机指令系统的教学方法,提出抽象指令到具体实物理解的教学方法。
MCS-51 单片机汇编指令共有111 条。包括数据传送类指令28 条,算术运算类指令24 条,逻辑运算类指令25 条,控制转移类指令17 条,位及布尔操作类指令17 条,在进行指令讲解时,要将清楚单片机的寻址方式,和指令的执行过程。一般的单片机教材将单片机的运算其、控制器、存储器等硬件资源安排在一章,指令系统安排在另一章,而两章之间有密切的联系,但是在教材中没有以语言、数据的形式描述,学生在读教材的时候,很难理解其中的工作机理。
这就要求教师在讲解的时候将不同的章节有机的融合起来,将指令所对应的硬件运行机理讲解清楚,让学生体验到具体的运行过程。
1 具体存储器盒子设计过程
单片机指令是针对单片机中的寄存器和RAM、ROM 等进行操作的,因此关于RAM 和ROM 的知识要融合到指令讲解过程中,而在51 单片机中,片内RAM 和特殊功能寄存器SFR 的使用频率尤其高,在教材中,一般低128 字节片内RAM 用图1 来表示。后面附上若干表格,对图中的各个空间进一步描述。
图1 低128 字节片内RAM 的地址空间结构
因此为片内RAM 和特殊功能寄存器SFR 设计存储器盒子,并由学生完成盒子的制作过程,片内RAM 地址从00H-7FH 共需128 个盒子,每8 个盒子排成一排,合计排成16 排,由学生对盒子进行摆位,排序并为每个盒子贴上字节地址标签。
接下来,根据为不同功能的盒子做不同的处理,其中,第一排00H-07H 分别对应R0-R7,第二排从08H-0FH 也分别对应R0-R7,第三排和第四排同上。为他们再次贴上其寄存器名称。经过这个步骤,细心的学生会发现,不同的盒子竟然会有相同的名称,那么怎么用名称来区分不同的盒子呢?这时,将程序状态字寄存器的RS1,RS0 两个位进行讲解,当RS1=0,RS0=0 时,第一组寄存器工作,当RS1=0,RS0=1 时,第二组寄存器工作,当RS1=1,RS0=0 时,第三组寄存器工作,当RS1=1,RS0=1 时,第四组寄存器工作。此时的盒子边上带有条件,如图3 所示。
图2 部分指令盒子的制作效果
图3 部分指令盒子的制作效果
接下来要设计支持位寻址的盒子,如果不支持位寻址,那么盒子中的内容要8 位作为一个字节整体取出,支持位寻址的盒子中每一位可以单独拿出来,将支持位寻址的盒子分成小盒子。在每一个小盒子中再次贴上位地址的标签,以字节地址是20H 的盒子为例。这里可以顺其自然的讲出来一个字节地址内存放8 个位,一个位地址内存放1 位,即要么‘0’,要么‘1’。
对于外部RAM 和ROM,其字节地址与片内RAM不同,因为空间大,所以需要的地址位数高,分别为0000H-FFFFH,这里只做部分存储器盒子即可,盒子的制作过程类似。
一共制作256 个片内RAM 盒子,一部分片外RAM 盒子和一部分ROM 盒子,将这些盒子分成三类,即片内RAM类,外部RAM 类,ROM 类,通过存储器盒子的制作过程,得出如下结论:在同一个类型中,不同的存储器盒子具有不同的字节地址,不同的位具有不同的位地址,位地址和字节地址即使是相同的数代表的内容也不同。在此基础上,分析单片机汇编指令与存储器盒子的关系。
2 单片机汇编指令与存储器盒子的关系
■2.1 片内RAM 中的数据传送
数据转移,即从哪个盒子提取内容,将盒子里的内容送到哪个盒子中去,如MOV A,R0 这条指令,假设RS1=0,RS0=0,将R0 的内容取出,在这里进行操作,取出盒子中的内容,而不是撕下标签,盒子中的内容是一个字节,或者说是8 位二进制数,将这个内容,(8 位二进制数)送到标签为A 的盒子中。
从执行过程中自然而然便会考虑,为什么从地址为00H 的盒子中取数,而不是从08H 或其他的R0 中取数,这里必须要查询RS1 和RS0 的取值才能确定;R0 中的数原来不能单独使用某一位,现在被转移到ACC(或A)中,可以使用某一位了,因为ACC 寄存器有位地址;找R0 寄存器时用寄存器的名称进行查找,不是用地址00H 查找的,所以叫寄存器寻址。如果语句改为MOV A,00H,那就是通过查找地址为00H 的盒子来取数,这就是直接寻址了。
MOV A,@R0,这条指令中有个符号@,那么R0 中存储的内容不是要传送的内容,而是一个地址,将这个地址所对应的内容传送到A 中,假设RS1=1,RS2=0,相应组R0中存储的内容是32H,则存储器盒子的使用方法如图6 所示,这里同时可以讲清楚寄存器间接寻址的寻址方式。
另外片内RAM 中有些盒子是有位地址的,这些位地址支持位运算,以MOV 20H,C 为例,将程序状态字寄存器PSW 中的进位标志位Cy 的值传送到位地址为20H 的单元中,操作如图7 所示。
汇编指令中,位寻址与直接寻址是极其容易混淆的两种寻址方式,尤其是在字节地址为20H-2FH 的寻址空间中,地址就更加难以区分,通过存储器盒子的转移过程,可使学生更加清楚的了解位寻址的寻址方式。
■2.2 片内RAM 与片外RAM 之间的数据传送
以MOVX A,@DPTR 为例,这个指令实现两个组的盒子之间的数据传送,因此需要两个组的盒子来进行操作,从前面的内容知道,@说明DPTR 中的内容是一个地址,而MOVX 中的X 说明这个地址指向片外RAM 区,所以这条指令执行时,需要在片外RAM 区找到相应地址,提取内容送到A 中,假设DPTR 中DPH 为03H,DPL 为25H,则执行过程为找到片外RAM 地址为0325H 的指令盒子的内容,将数据传送到片内A 中。
■2.3 ROM 数据及其传送
ROM 与RAM 类似,也是若干盒子,每个盒子也有自己的标签,即地址,盒子中存储的字节即8 位二进制数表达的意义是程序,某一个字节所对应的程序都是固定的,比如存储E8H 表示要执行汇编语言为MOV A,R0 的操作,称E8H 是机器语言,是编程的时候不易阅读的,也不需要记忆,但却是在ROM中存储的,因此ROM中的数据表示的是程序,如指令MOV A,@R0;代码E7H,ROM 中的数据可以传送到累加器A 中,如指令MOVC A,@A+DPTR,A 和DPTR 的和对应地址,MOVC 中的C 表示ROM 区数据,所以可以将这个地址所对应的ROM 数据传送至累加器A 中,假设累加器A 中的内容为03H,DPTR 值为1010H。执行MOVC A,@A+DPTR 后,首先找到PC 指针为1010H+03H 及1013H处对应的指令,将数据提取出来,转移至A 中。
3 总结
通过存储器盒子的制作,可以让学生将抽象的单片机指令以非常直观具体的方式操作出来,每条指令对应的储器盒子的操作过程即是单片机指令内部运行的过程,对学生学习单片机指令系统有重要作用,这种边学习边操作的模式,提升了学生的动手能力,激发了学生的探究意识,但本文只是以部分指令为例进行论述,对于111 条单片机指令的学习还需要任课老师逐一带领学生学习。