Download presentation
Presentation is loading. Please wait.
Published byΒαρσαββάς Παπαγεωργίου Modified 6年之前
2
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置
3
一、任务描述 报警铃音实际上是人耳能够听到的两种固定频率的声音信号的交替输出。
经分析可将报警铃音产生化简为:当按下开关(开关闭合为模拟满足报警条件),单片机输出1KHz信号100ms,接着输出500Hz信号200ms,如此循环下去,就形成我们所需的报警声了;当开关弹起,停止输出信号。 返回
4
二、任务分析 报警功能是煤矿安全监控系统很重视的功能,只要实现井下瓦斯超限报警、通风异常(如无风)报警、超温报警、火灾报警、CO超限报警、水位异常报警及监控设备故障报警、生产设备或环节的异常或故障报警等。报警功能包括报警设定、报警判别和报警信息输出三方面;报警判别目前采用的判别模型均为门限判别,达到某一预定值或预定状态,即发出报警信息指令,启动报警程序。单纯的顺序结构程序只能解决一些简单的算术、逻辑运算,或者简单的查表、传送操作等。实际问题一般都是比较复杂的,总是伴随有逻辑判断或条件选择,要求计算机能根据给定的条件进行判断,选择不同的处理路径,从而表现出某种智能。本任务的主要内容是讲述分支程序的设计方法,即在对检测量不断进行比较,达到控制门限并满足控制条件时和可靠性要求,即之形象对应的分之程序并发出控制指令,输出控制信号。 返回
5
三、任务演示 返回
6
四、相关知识 (一)指令格式 不同指令翻译成机器码后字节数也不一定相同。按照机器码个数,指令可以分为以下三种: 7 单字节指令: 操作码
数据或寻址方式 单字节指令: 双字节指令: 三字节指令: 返回
7
MCS-51单片机指令系统包括49条单字节指令、46条双字节指令和16条三字节指令。采用助记符表示的汇编语言指令格式如下:
标号: 操作码 操作数或操作数地址 ;注释 标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字母,不能是数字或其它符号;标号后必须用冒号。 操作码表示指令的操作种类,如MOV表示数据传送操作、ADD表示加法操作等。 操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。 注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。
8
(二)寻址方式 从指令格式知道,操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。寻找操作数地址的方式称为寻址方式。一条指令采用什么样的寻址方式,是由指令的功能决定的,寻址方式越多,指令功能就越强。 MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。实训中,我们初步接触了寄存器寻址、立即数寻址、直接寻址和寄存器间接寻址等四种寻址方式。
9
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。
1、寄存器寻址 寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。 例如:指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。 如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H——0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM 09H单元的值就变为20H,如图3-1所示。 图3-1 寄存器寻址示意图
10
2、直接寻址 直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。 例如:指令MOV A,3AH执行的操作是将内部RAM 中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。 设内部RAM 3AH单元的内容是88H,那么指令MOV A,3AH的执行过程如图3-2所示 图3-2 直接寻址示意图
11
3、立即数寻址 立即数寻址是指将操作数直接写在指令中。
例如:指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如图3-3所示。 3AH A 图3-3 立即数寻址示意图
12
设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV A,@R0的执行结果是累加器A的值为65H,该指令的执行过程如图3-4所示。
4、寄存器间接寻址 寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。 设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV 图3-4 寄存器间址寻址示意图
13
5、变址寻址 变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。 例如:指令MOVC 设累加器A=02H,DPTR=0300H,外部ROM (0302H)=55H,则指令MOVC 图3-5 变址寻址示意图
14
相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。
6、相对寻址 相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。 例如:指令SJMP 54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。 设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。该指令的执行过程如图3-6所示。 图3-6 相对寻址示意图
15
7、位寻址 位寻址是指按位进行的操作,而上述介绍的指令都是按字节进行的操作。MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。 位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,可以参见前面有关章节中位地址定义。 设内部RAM 27H单元的内容是00H,执行SETB 3DH后,由于3DH对应着内部RAM 27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图3-7所示。 图3-7 位寻址示意图
16
指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3-1的约定。
表3-1 指令描述约定 符号 含 义 Rn 表示当前选定寄存器组的工作寄存器R0~R7 Ri 表示作为间接寻址的地址指针R0~R1 #data 表示8位立即数,即00H~FFH #data16 表示16位立即数,即0000H~FFFFH addr16 表示16位地址,用于64K范围内寻址 addr11 表示11位地址,用于2K范围内寻址 direct 8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址 Rel 带符号的8位偏移量(-128~+127) Bit 位寻址区的直接寻址位 (X) X地址单元中的内容 ((X)) 将X地址单元中的内容作为地址,该地址单元中的内容 ← 将 ← 后面的内容传送到前面去
17
MOV <目的操作数>,<源操作数>
(三)数据传送类指令 数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部RAM、寄存器、外部RAM以及程序存储器之间的数据传送。 数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。 数 据 目的地址 源地址 1、内部8位数据传送指令 内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本格式: MOV <目的操作数>,<源操作数>
18
(1)以累加器A为目的地址的传送指令(4条)如表3-2所示
助记符格式 机器码 相应操作 指令说明 机器周期 MOV A,Rn 11101rrr ARn n=0~7 rrr=000~111 1 MOV A,direct direct A direct MOV i A (Ri) i=0,1 MOV A,#data #data A #data 注意:以上传送指令的结果影响程序状态字寄存器PSW的P标志
19
① MOV A,#20H 例3.1 已知相应单元的内容如表3-3,请指出每条指令执行后相应单元内容的变化。 累加器A 40H 寄存器R0
内部RAM:40H 30H 内部RAM:50H 10H ① MOV A,#20H ② MOV A,40H ③ MOV A,R0 ④ MOV 解释: ① MOV A,#20H执行后A=20H ② MOV A,40H执行后A=30H ③ MOV A,R0执行后A=50H ④ MOV
20
(2)以Rn为目的地址的传送指令(3条)如表3-4所示
助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV Rn,A 11111rrr Rn A N=0~7 rrr=000~111 1 MOV Rn,direct 10101rrr direct Rn direct MOV Rn,#data 01111rrr #data Rn #data 注意:以上传送指令的结果不影响程序状态字寄存器PSW标志
21
(3)以直接地址为目的地址的传送指令(5条)如表3-5所示
助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV direct,A direct direct A 1 MOV direct,Rn 10001rrr direct direct Rn N=0~7 rrr=000~111 MOV irect2,direct1 direct1 direct2 direct2 direct1 2 MOV i direct direct (Ri) i=0,1 MOV direct,#data direct #data direct #data 注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。
22
(4)以寄存器间接地址为目的地址的传送指令(3条)如表3-6所示
表3-6以寄存器间接地址为目的地址的传送指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 i (Ri)A i=0,1 1 i direct (Ri)(direct) 2 i #data (Ri)#data 注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。
23
例3.2 已知相应单元的内容如表3-7,请指出下列指令执行后各单元内容相应的变化。
寄存器R0 50H 寄存器R1 66H 寄存器R6 30H 内部RAM:50H 60H 内部RAM:66H 45H 内部RAM:70H 40H ① MOV A,R6 ② MOV R7,70H ③ MOV 70H,50H ④ MOV ⑤
24
解: ① MOV A,R6执行后A=30H ② MOV R7,70H执行后R7=40H ③ MOV 70H,50H执行后(70H)=60H ④ MOV ⑤ MOV @R1,#88H执行后(66H)=88H
25
注意:以上指令结果不影响程序状态字寄存器PSW标志。 2、外部数据传送指令(4条)如表3-9
(5)16位数据传送指令(1条)如表3-8 表3-8 16位数据传送指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV DPTR,#data16 data15~8 data7~0 (DPTR) #data16 把16位常数装入数据指针 2 注意:以上指令结果不影响程序状态字寄存器PSW标志。 2、外部数据传送指令(4条)如表3-9 表3-9 外部数据传送指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOVX A(DPTR) 把DPTR所对应的外部RAM地址中的内容传送给累加器A 2 MOVX i A (Ri) i=0,1 (DPTR) A 结果不影响P标志。 (Ri) A i=0,1,结果不影响P标志。
26
注意:1)外部RAM只能通过累加器A进行数据传送。
2)累加器A与外部RAM之间传送数据时只能用间接寻址方式,间接寻址寄存器为DPTR,R0,R1。 3)以上传送指令结果通常影响程序状态字寄存器PSW的P标志。 例3.3 把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去。 解: MOV DPTR,#2040H MOVX ;先将2040H单元的内容传送到累加器A中 MOV DPTR,#2560H ;再将累加器A中的内容传送到2560H单元中
27
注意:以上指令结果影响程序状态字寄存器PSW的P标志。 (2)半字节交换指令(1条)如表3-11
3、交换和查表类指令 (1)字节交换指令(3条)如表3-10 表3-10 字节交换指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XCH A,Rn 11001rrr ARn A与Rn内容互换 1 XCH A,direct direct Adirect XCH i A(Ri) i=0,1 注意:以上指令结果影响程序状态字寄存器PSW的P标志。 (2)半字节交换指令(1条)如表3-11 表3-11 半字节交换指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XCHD i A3-0(Ri)3-0 低4位交换,高4位不变 1 注意:上面指令结果影响程序状态字寄存器PSW的P标志。 (3)累加器A中高4位和低4位交换(1条)如表3-12
28
例3.4 设内部数据存储区2AH、2BH单元中连续存放有4个BCD码,试编写程序把这4个BCD码倒序排序,即:
助记符格式 机器码(B) 相应操作 指令说明 机器周期 SWAP A (A) 3-0(A) 7-4 高、低4位互相交换 1 例3.4 设内部数据存储区2AH、2BH单元中连续存放有4个BCD码,试编写程序把这4个BCD码倒序排序,即: a3 a2 a1 a0 a0 a1 a2 a3 2AH BH AH BH 解:MOV R0,#2AH ;将立即数2AH传送到寄存器R0中 MOV ;将2AH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与低4位交换 MOV @R0,A ;将累加器A的内容传送到2AH单元中 MOV R1,#2BH MOV ;将2BH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与低4位交换 XCH ;将累加器A中的内容与2AH单元的内容交换 MOV @R1,A ;累加器A的内容传送到2BH单元
29
注意:1、以上指令结果影响程序状态字寄存器PSW的P标志。 2、查表指令用于查找存放在程序存储器中的表格
4、查表指令(2条)如表3-13 表3-13 查表指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOVC A (A+PC) A+PC所指外部程序存储单元的值送A 2 MOVC A (A+DPTR) A+DPTR所指外部程序存储单元的值送A 注意:1、以上指令结果影响程序状态字寄存器PSW的P标志。 2、查表指令用于查找存放在程序存储器中的表格 5、堆栈操作指令(2条)如表3-14 表3-14 堆栈操作指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 PUSH direct direct SPSP+1 (SP))(direct) 将SP加1,然后将源地址单元中的数传送到SP所指示的单元中去 2 POP direct (direct) (SP) SPSP-1 将SP所指示的单元中的数传送到direct地址单元中,然后SPSP-1
30
栈、出栈指令可以写成: PUSH/POP ACC 或 PUSH/POP 0E0H 而不能写成: PUSH/POP A 堆栈通常用于临时保护数据及子程序调用时保护现场/恢复现场。 以上指令结果不影响程序状态字寄存器PSW标志。 例3.5 设堆栈指针为30H,把累加器A和DPTR中的内容压入,然后根据需要再把它们弹出,编写实现该功能的程序段。 解:MOV SP,#30H ;设置堆栈指针,SP=30H,为栈底地址 PUSH ACC ;SP+1→SP,SP=31H,ACC →(SP) PUSH DPH ;SP+1→SP,SP=32H,DPH →(SP) PUSH DPL ;SP+1→SP,SP=33H,DPL →(SP) …… POP DPL ;(SP)→DPL,SP-1→SP,SP=32H POP DPH ;(SP)→DPH,SP-1→SP,SP=31H POP ACC ;(SP)→ACC,SP-1→SP,SP=30H
31
控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。
(四)控制转移类指令 控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。 1、无条件转移指令(4条) (1)长转移指令如表3-15 表3-15 长转移指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 LJMP addr16 addr15~8 addr7~0 PCaddr16 程序跳转到地址为addr16开始的地方执行 2 注意: 1)该指令结果不影响程序状态字寄存器PSW。 2)该指令可以转移到64K中程序存储器中的任意位置
32
1、该指令结果不影响程序状态字寄存器PSW。 2、该指令转移范围是2K字节。
(2)绝对转移指令 (1条)如表3-16 表3-16 绝对转移指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 AJMP addr11 a10a9a800001 addr7~0 PC10-0addr11 程序跳转到地址为PC15~11addr11开始的地方执行, 2k内绝对转移 2 注意: 1、该指令结果不影响程序状态字寄存器PSW。 2、该指令转移范围是2K字节。
33
例3.9 指令KWR: AJMP KWR1的执行结果。
解:设KWR标号地址=1030H,KWR1标号地址=1100H,该指令执行后PC首先加2变为1032H,然后由1032H的高5位和1100H的低11位拼装成新的PC值= B,即程序从1100H开始执行。
34
(1)该指令结果不影响程序状态字寄存器PSW。 (2)该指令的转移范围是以本指令的下一条指令为中心的-128~+127字节以内。
2、相对转移指令 (1条)如表3-17 表3-17 相对转移指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 SJMP rel rel PCPC+rel -80H(-128)~7FH(127)短转移 2 注意: (1)该指令结果不影响程序状态字寄存器PSW。 (2)该指令的转移范围是以本指令的下一条指令为中心的-128~+127字节以内。 (3)在实际应用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用标号来代替的,不一定写出它们的具体地址。
35
(4)间接寻址的无条件转移指令(1条)如表3-18
表3-18 间接寻址的无条件转移指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 JMP @A+DPTR PCA+DPTR 64K内相对转移 2 注意:1)该指令结果不影响程序状态字寄存器PSW。 2)该指令通常用于散转(多分支)程序。 3、条件转移指令(8条) (1)累加器A判0指令(2条)如表3-19 表3-19 累加器A判0指令 助记符格式 机器码(B) 相应操作 机器周期 JZ rel 若A=0,则PCPC+rel, 否则程序顺序执行 2 JNZ rel 若A≠0,则PCPC+rel, 否则程序顺序执行 注意:(1)以上指令结果不影响程序状态字寄存器PSW。 (2)转移范围与指令SJMP相同。
36
注意:1、以上指令结果影响程序状态字寄存器PSW的Cy标志。 2、转移范围与SJMP指令相同。
(2)比较转移指令(4条)如表3-20 表3-20 比较转移指令 记符格式 机器码(B) 相应操作 机器周期 CJNE A,#data,rel data rel 若A≠#data, 则PCPC+rel,否则顺序执行;若 A<#data,则Cy=1,否则Cy=0 2 CJNE Rn,#data,rel 10111rrr 若 Rn≠#data,则PCPC+rel,否则顺序执行;若Rn<#data,则Cy=1,否则Cy=0 i 若(Ri)≠#data,则PCPC+rel,否则顺序执行;若(Ri)<#data,则Cy=1,否则Cy=0 CJNE A,direct,rel direct rel 若A≠(direct),则PCPC+rel,否则顺序执行;若(A)<(direct),则Cy=1,否则Cy=0 注意:1、以上指令结果影响程序状态字寄存器PSW的Cy标志。 2、转移范围与SJMP指令相同。
37
1、DJNZ指令通常用于循环程序中控制循环次数。 2、转移范围与SJMP指令相同。 3、以上指令结果不影响程序状态字寄存器PSW。
(3)减1非零转移指令(2条)如表3-21 表3-21 减1非零转移指令 助记符格式 机器码(B) 相应操作 机器周期 DJNZ Rn,rel 11011rrr rel RnRn-1,若Rn≠0,则PCPC+rel, 否则顺序执行 2 DJNZ direct,rel direct rel (direct)(direct)-1,若(direct)≠0,则PCPC+rel,否则顺序执行 注意: 1、DJNZ指令通常用于循环程序中控制循环次数。 2、转移范围与SJMP指令相同。 3、以上指令结果不影响程序状态字寄存器PSW。
38
注意:1、该指令结果不影响程序状态字寄存器PSW。 2、调用范围与AJMP指令相同。 (2)长调用指令(1条)如表3-23
4、调用和返回指令(5条) (1)绝对调用指令(1条)如表3-22 表3-22 绝对调用指令 助记符格式 机器码(B) 相应操作 机器周期 ACALL addr11 A10a9a810001addr7-0 PC PC+2 SP SP+1,SPPC0-7 SP SP+1,SPPC8-15 PC0-10 addr11 2 注意:1、该指令结果不影响程序状态字寄存器PSW。 2、调用范围与AJMP指令相同。 (2)长调用指令(1条)如表3-23 表3-23 长调用指令 助记符格式 机器码(B) 相应操作 机器周期 LCALL addr16 Addr15-8 Addr7-0 PCPC+3 SP SP+1,SPPC0-7 SP SP+1,SPPC8-15 PC addr16 2 注意:1、该指令结果不影响程序状态字寄存器PSW。 2、调用范围与LJMP指令相同。
39
注意:该指令结果不影响程序状态字寄存器PSW。 (4)空操作(1条)如表3-25
(3)返回指令(2条)如表3-24 表3-24 返回指令 助记符格式 机器码(B) 相应操作 机器周期 RET PC8-15 SP, SP SP-1 PC0-7 SP, SP SP-1 子程序返回指令 2 RETI 中断返回指令 注意:该指令结果不影响程序状态字寄存器PSW。 (4)空操作(1条)如表3-25 表3-25 空操作 助记符格式 机器码(B) 相应操作 指令说明 NOP 空操作 消耗1个机器周期 注意:该指令结果不影响程序状态字寄存器PSW。
40
对于特殊功能寄存器SFR中可位寻址的寄存器的每个位也有名称定义,如表3.27所示。
(五)位操作类指令 位操作指令的操作数是“位”,其取值只能是0或1,故又称之为布尔变量操作指令。位操作指令的操作对象是片内RAM的位寻址区(即20H-2FH)和特殊功能寄存器SFR中的11个可位寻址的寄存器。片内RAM的20H~2FH共16个单元128个位,我们为这128个位的每个位均定义1个名称,00H~7FH,称为位地址,如表3.26所示。 对于特殊功能寄存器SFR中可位寻址的寄存器的每个位也有名称定义,如表3.27所示。
41
表3-26 特殊功能寄存器 位地址/位名称 字节地址 D7 D6 D5 D4 D3 D2 D1 D0 7F 7E 7D 7C 7B 7A
79 78 2FH 77 76 75 74 73 72 71 70 2EH 6F 6E 6D 6C 6B 6A 69 68 2DH 67 66 65 64 63 62 61 60 2CH 5F 5E 5D 5C 5B 5A 59 58 2BH 57 56 55 54 53 52 51 50 2AH 4F 4E 4D 4C 4B 4A 49 48 29H 47 46 45 44 43 42 41 40 28H 3F 3E 3D 3C 3B 3A 39 38 27H 37 36 35 34 33 32 31 30 26H 2F 2E 2D 2C 2B 2A 29 28 25H 27 26 25 24 23 22 21 20 24H 1F 1E 1D 1C 1B 1A 19 18 23H 17 16 15 14 13 12 11 10 22H 0F 0E 0D 0C 0B 0A 09 08 21H 07 06 05 04 03 02 01 00 20H
42
表3-27 SFR中的位地址分布 SFR 位地址/位名称 字节 地址 D7 D6 D5 D4 D3 D2 D1 D0 B F7H F6H
ACC E7H E6H E5H E4H E3H E2H E1H E0H ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 PSW D7H D6H D5H D4H D3H D2H D1H D0H CY AC F0 RS1 RS0 OV F1 P IP BFH BEH BDH BCH BBH BAH B9H B8H —— PS PT1 PX1 PT0 PX0 P3 B7H B6H B5H B4H B3H B2H B1H B0H P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
43
IE AFH AEH ADH ACH ABH AAH A9H A8H EA —— ES ET1 EX1 ET0 EX0 P2 A7H A6H A5H A4H A3H A2H A1H A0H P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 SCON 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H SM0 SM1 SM2 REN TB8 RB8 TI RI P1 97H 96H 95H 94H 93H 92H 91H 90H P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 P0 87H 86H 85H 84H 83H 82H 81H 80H P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
44
对于位寻址,有以下三种不同的写法: 第一种是直接地址写法, 如 MOV C,0D2H 其中0D2H表示PSW中OV位址; 第二种是点操作符写法,如 MOV C , 0D0H.2 第三种是位名称写法,在指令格式中直接采用位定义名称,这种方式只适应于可以位寻址的SFR,如 MOV C,OV。
45
注意:位传送指令必须与进位位C进行,不能在其它两个位之间传送。 进位位C也称为位累加器。
1、位传送指令(2条)如表3-28 表3-28 位传送指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV C,bit Cy bit 位传送指令,结果影响Cy标志。 2 MOV bit,C bit Cy 位传送指令,结果不影响PSW。 注意:位传送指令必须与进位位C进行,不能在其它两个位之间传送。 进位位C也称为位累加器。 2、位置位和位清零指令(4条)如表3-29 表3-29 位置位和位清零指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 CLR C Cy 0 位清0指令,结果影响Cy标志。 1 CLR bit bit bit 0 位清0指令,结果不影响PSW。 SETB C Cy1 位置1指令,结果影响Cy标志。 SETB bit bit bit 1 位置1指令,结果不影响PSW。
46
注意:以上指令结果通常影响程序状态字寄存器PSW的Cy标志。
3、位运算指令(6条)如表3-30 表3-30 位运算指令 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit bit C y C ybit 位与指令 2 ANL C,/bit bit C y C y— bit ORL C,bit bit C y C ybit 位或指令 ORL C,/bit bit C y C y— bit CPL C C y — Cy 位取反指令 CPL bit Bit— bit 位取反指令,结果不影响Cy 注意:以上指令结果通常影响程序状态字寄存器PSW的Cy标志。
47
(2)以上指令结果不影响程序状态字寄存器PSW。
4、位转移指令(3条)如表3-31 表3-31 位转移指令 助记符格式 机器码(B) 相应操作 机器周期 JB bit,rel bit rel 若bit=1,则PCPC+rel,否则顺序执行 2 JNB bit,rel bit rel 若bit=0,则PCPC+rel,否则顺序执行 JBC bit,rel bit rel 若 bit=1,则PCPC+rel,(bit) 0,否则 顺序执行 注意: (1)JBC与JB指令区别; (2)以上指令结果不影响程序状态字寄存器PSW。
48
注意:以上结果不影响程序状态字寄存器PSW。
5、判CY标志指令(2条)如表3-32 表3-32 判CY标志指令 助记符格式 机器码(B) 相应操作 机器周期 JC rel 若CY=0,则PCPC+rel,否则顺序执行 2 JNC rel 若 CY≠0,则PCPC+rel,否则顺序执行 注意:以上结果不影响程序状态字寄存器PSW。 解: 程序段如下: MOV C,B.0 ORL C,P2.1 ANL C,ACC.0 ORL C,/P3.2 MOV P1.7,C 例3.10 用位操作指令编程计算逻辑方程P1.7=ACC.0 x (B.0+P2.1)+/P3.2,其中“+”表示逻辑或,“x”表示逻辑与。
49
(六)常用伪指令 1、定位伪指令ORG 格式:[标号:] ORG 地址表达式 功能:规定程序块或数据块存放的起始位置 例如:ORG 1000H;表示下面指令 MOV A,#20H;存放于1000H开始的单元。 2、定义字节数据伪指令DB 格式:[标号:] DB 字节数据表 功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。 例如:ORG 1000H TAB:DB 2BH,0A0H,‘A’,2*4;表示从1000H单元开始的地方存放数据2BH,0A0H,41H(字母A的ASCII码),08H。
50
3、定义字数据伪指令DW 格式:[标号:] DW 字数据表 功能: 与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。 例如:ORG 1000H DATA:DW 324AH,3CH;表示从1000H单元开始的地方存放数据32H,4AH,00H,3CH(3CH以字的形式表示为003CH)。 4、定义空间伪指令DS 格式:[标号:] DS 表达式 功能:从指定的地址开始,保留多少个存储单元作为备用的空间。 例如: ORG 1000H BUF:DS 50 TAB:DB 22H;表示从1000H开始的地方预留50(1000H~1031H)个存储字节空间,22H存放在1032H单元。
51
5、符号定义伪指令EQU或= 格式:符号名 EQU 表达式符号名=表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,该语句通常放在源程序的开头部分。 例如: LEN=10 SUM EQU 21H ……… MOV A,#LEN ;执行指令后,累加器A中的值为0AH
52
6、数据赋值伪指令DATA 格式:符号名 DATA 表达式 功能:将表达式的值或某个特定汇编符号定义一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据可以放在程序末尾进行数据定义。 举例: ……… MOV A,#LEN ……… LEN DATA 10 尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。
53
7、数据地址赋值伪指令XDATA 格式:符号名 XDATA 表达式 功能:将表达式的值或某个特定汇编符号定义一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。 举例:DELAY XDATA 0356H ……… LCALL DELAY ;执行指令后,程序转到0356H单元执行 8、汇编结束伪指令END 格式:[标号:] END 功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。
54
(七)分支程序设计 通常,单纯的顺序结构程序只能解决一些简单的算术、逻辑运算,或者简单的查表、传送操作等。实际问题一般都是比较复杂的,总是伴随有逻辑判断或条件选择,要求计算机能根据给定的条件进行判断,选择不同的处理路径,从而表现出某种智能。 根据程序要求改变程序执行顺序,即程序的流向有两个或两个以上的出口,根据指定的条件选择程序流向的程序结构我们称为分支程序结构,本节通过实例介绍分支程序设计方法。 1、分支程序结构 分支程序比顺序程序的结构复杂得多,其主要特点是程序的流向有两个或两个以上的出口,根据指定的条件进行选择确定。编程的关键是如何确定供判断或选择的条件以及选择合理的分支指令。 通常根据分支程序中出口的个数分为单分支结构程序(两个出口)和多分支结构程序(三个或三个以上出口)。
55
单分支结构在程序设计中应用最广,拥有的指令也最多。单分支结构一般为: 一个入口,两个出口。如图3-8所示,单分支程序结构有以下两种典型形式:
2、单分支结构程序的形式 单分支结构在程序设计中应用最广,拥有的指令也最多。单分支结构一般为: 一个入口,两个出口。如图3-8所示,单分支程序结构有以下两种典型形式: 图(a)当条件满足时执行分支程序1,否则执行分支程序2,例4.3就是这样一种结构。 图(b)当条件满足时跳过程序段2,从程序段3往下执行,否则顺序执行程序段2和3。 图(a) 图(b) 图3-8 单分支程序结构的典型形式
56
3、散转程序 在实际应用中,常常需要从两个以上的出口中选一,称为多分支程序或散转程序。MCS-51单片机指令系统中专门提供了散转指令,使得散转程序的编制更加简洁。 为了克服上述局限性,除了可以使用“LJMP”指令组成跳转表外,还可采用双字节的寄存器存放散转值,并利用对DPTR进行加法运算的方法,直接修改DPTR,然后再用散转指令实现散转。 散转程序除了转移指令表法之外,还可以采用地址偏移量表法、转向地址表法及利用“RET”指令(子程序返回指令)实现散转程序等。 4、转移条件的形成 分支程序中的转移条件一般都是程序状态字(PSW)中的标志位的状态,因此,保证分支程序正确流向的关键如下: 在判断之前,应执行对有关标志位影响的指令,使该标志位能够适应问题的要求,这就要求编程员要十分了解指令对标志位的影响情况。 当某一标志位处于某一状态时,在未执行下一条影响此标志位的指令前,它一直保持原状态不变。 正确理解PSW中各标志位的含义及变化情况,才能正确地判断转移。
57
(八)延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求0.2秒的延时,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 石英晶体为12MHz,因此,1个机器周期为1微秒。 机器周期 微秒 MOV R6,#20 2个 D1: MOV R7,# 个 DJNZ R7,$ 2个 DJNZ R6,D1 2个 因此,上面的延时程序时间为10.002ms。
58
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下: DELAY:MOV R5,#20 D1:MOV R6,#20 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET 返回
59
(十)KX4010型声光报警器 1、主要功能 KX4010型声光报警器为本质安全型,可在煤矿井下及其它场合进行声光报警。 2、技术指标 (1)供电电源 ①输入电源为本安电源(KDWl5型或其它本安电源); ②电压:直流14V~18V; ③报警最大工作电流:≤50mA; ④静态工作电流:≤3.5 mA。
60
(2)控制信号 ①电平信号:电压为4~14V(电流2mA时)能正常工作: ②或电源替代。 (3)输出信号 ①光信号强度应在黑暗中20m处可见,交替时间为0.5±0.1s的闪烁光信号; ②声信号采用变调,频率分别为3.4±0.5kHz和2.8±0.5kHz的报警信号,音响响度≥90dB。 3、工作原理 由分站或其它设备输入控制信号,通过光耦隔离后,触发4060及555时基电路产生振荡,从而启动蜂鸣器和发光管进行声光报警。
61
五、任务布置 1、列写煤矿安全监控系统中所包含的报警功能。 2、简述报警铃音的设计原理及设计方法。
3、写出MCS-51单片机指令系统的指令格式要求。 4、写出MCS-51单片机的7种寻址方式。 5、写出数据传送类指令、控制转移类指令、位操作类指令、常用伪指令四类指令中各项指令的格式及功能,同类指令写出其区别。 返回
Similar presentations