第04章 单片机程序设计基础-01_第1页
第04章 单片机程序设计基础-01_第2页
第04章 单片机程序设计基础-01_第3页
第04章 单片机程序设计基础-01_第4页
第04章 单片机程序设计基础-01_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2022-2-1412022-2-1422022-2-1432022-2-1442022-2-145MCS-51的汇编语言采用四分段格式: 标号字段 操作码字段 操作数字段 注释字段 标号标号: : 操作码操作码 目的操作数目的操作数, , 源操作数源操作数 ; ;注释注释 规则:(1)标号字段和操作字码段之间要有冒号“:”相隔;(2)操作码字段和操作数字段间的分界符是空格;(3)双操作数之间用逗号相隔;(4)操作数字段和注释字段之间的分界符用分号“;”相隔。 操作码字段为必选项,其余各段为任选项。 请注意,字段分界符要在英文输入状态下键入。 不区分大小写2022-2-146标号字段标号字段

2、操作码字段操作码字段 操作数字段操作数字段 注释字段注释字段START: MOV A,#00H ;0A MOV R1,#10 ;10R1 MOV R2,#00000011B ;3R2LOOP: ADD A,R2 ;(A)+(R2)A DJNZ R1,LOOP ;R1内容减1不为 零,则循环 NOPHERE: SJMP HERE2022-2-1471标号字段 是语句所在地址的标志符号 (1)标号后边必须跟以冒号“:” (2)由18个ASCII字符组成 (3)同一标号在一个程序中只能定义一次 (4)不能使用汇编语言已经定义的符号作为标号2操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就是

3、根据这一字段来生成机器代码的。3操作数字段 通常有单操作数、双操作数和无操作数三种情况。如果是双操作数,则操作数之间,要以逗号隔开。基本语法规则:2022-2-148(1)十六进制、二进制和十进制形式的立即数的表示 采用十六进制形式来表示,某些特殊场合才采用二进制或十进制的表示形式。 十六进制,后缀“H”。 二进制,后缀“B”。 十进制,后缀“D”,也可省略。 若十六进制的操作数以字符AF中的某个开头时,则需在它前面加一个“0”。 ASCII码,以单引号标识。如:AB,1245(2)工作寄存器和特殊功能寄存器的表示 采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。 例如,累加器

4、可用A(或Acc)表示。也可用0E0H来表示,0E0H为累加器A的地址。2022-2-149(3)美元符号$的使用 用于表示该转移指令操作码所在的地址。 例如,如下指令: JNB F0,$ 与如下指令是等价的: HERE:JNB F0,HERE 再如: HERE:SJMP HERE 可写为: SJMP $4注释字段 必须以分号“;”开头,换行书写,但必须注意也要以分号“;”开头。 汇编时,注释字段不会产生机器代码。2022-2-14102022-2-1411顺序结构分支结构循环结构子程序结构2022-2-14122022-2-1413条件成立?条件成立?程序段程序段A下条指令下条指令条件成立?

5、条件成立?程序段程序段A程序段程序段BK=0?K=1?K=2?Y分支分支0Y分支分支1Y分支分支2NNN2022-2-14142022-2-14152022-2-14162022-2-14172022-2-14182022-2-14192022-2-1420在编写子程序时应注意以下问题:1子程序的第一条指令的地址称为子程序的入口 地址。该指令前必须有标号。2主程序调用子程序 两条子程序调用指令: (1)短调用指令:ACALL addr11 (2)长调用指令:LCALL addr163注意设置堆栈指针和现场保护4最后一条指令必须是RET指令5子程序可以嵌套,即子程序可以调用子程序6在子程序调用时

6、,还要注意参数传递的问题2022-2-1421子程序的基本结构 MAIN: ;MAIN为主程序或调用程序标号 LCALL SUB ;调用子程序SUB SUB:PUSH PSW ;现场保护 PUSH ACC 子程序处理程序段 POP ACC ;现场恢复 POP PSW RET ;最后一条指令必须为RET2022-2-14222022-2-14232022-2-1424例如: ORG 2000H START:MOV A,#00H 规定标号START代表地址为2000H开始。 在一个源程序中,可多次使用ORG指令,来规定不同的程序段的起始地址。但是,地址必须由小到大排列,地址不能交叉、重叠。2022

7、-2-14252022-2-14262022-2-1427例如: TEST EQU 2000H REG EQU R7 表示标号TEST=2000H,在汇编时,凡是遇到标号TEST时,均以2000H来代替。 EQU指令用于为程序中的任意标号赋值。 程序中的常量通常可以用标号代替,便于修改。 主程序前要先用equ指令为常量标号赋值。2022-2-14282022-2-1429例如: ORG 2000H DB 30H,40H,24,C,B汇编后: (2000H)=30H (2001H)=40H (2002H)=18H(10进制数24) (2003H)=43H(字符“C”的ASCII码) (2004H

8、)=42H(字符“B”的ASCII码) DB功能是从指定单元开始定义(存储)若干个字节,10进制数自然转换成16进制数,字母按ASCII码存储。2022-2-14302022-2-1431例如: ORG 2000H DW 1246H,27BH,10汇编后: (2000H)=12H;第1个字 (2001H)=46H (2002H)=02H;第2个字 (2003H)=7BH (2004H)=00H;第3个字 (2005H)=0AH2022-2-14322022-2-14332022-2-1434汇编语言与机器语言(机器码) CPU执行机器语言是由8位二进制代码组成,分为1字节、2字节、3字节。例如

9、: RET 22H MOV A,#0fh 74H 0FH MOV 74H,#0BH 75H 74H 0BH2022-2-14352022-2-1436汇编语言程序设计步骤(1)明确要求和要达到的目的(2)确定解决问题的计算方法和步骤(3)画出流程图(4)分配内存地址(5)按流程图编写程序(6)上机汇编、调试、修改直至最后确定源程序2022-2-1437例例4.4 4.4 设有两个设有两个4 4字节的二进制数,分别存放字节的二进制数,分别存放在片内以在片内以30H30H和和50H50H为起始地址的单元中(先存为起始地址的单元中(先存放低字节)。求这两个数的和,并将结果存入放低字节)。求这两个数的

10、和,并将结果存入以以30H30H为起始地址的单元中。为起始地址的单元中。 2022-2-14382022-2-1439例例4.5 4.5 设有两个设有两个N N字节无符号数,分别存放在字节无符号数,分别存放在片内片内RAMRAM单元中,低字节在前,高字节在后。单元中,低字节在前,高字节在后。由由R0R0指定被减数单元地址,由指定被减数单元地址,由R1R1指定减数单元指定减数单元地址,要求将差值存入原被减数单元中,假定地址,要求将差值存入原被减数单元中,假定最高字节没有借位。最高字节没有借位。 2022-2-14402022-2-1441例例4.7 4.7 假设被乘数存放于假设被乘数存放于R6R

11、6和和R7R7中,乘数存放中,乘数存放于于R4R4和和R5R5中,要求乘积存放于中,要求乘积存放于40H40H43H43H单元中,单元中,低字节在前。低字节在前。 2022-2-1442例例4.8 4.8 假设被除数存放于假设被除数存放于40H40H、41H41H中,除数存放中,除数存放于于44H44H、45H45H中,要求将商存放于中,要求将商存放于40H40H、41H41H单元中,单元中,余数存放于余数存放于42H42H、43H43H单元中,低字节在前。单元中,低字节在前。 2022-2-1443例例4.9 4.9 在片内在片内RAM 20HRAM 20H单元中,存放有单元中,存放有2 2

12、位十六进位十六进制数,将其转换成制数,将其转换成ASCIIASCII码,并存放于码,并存放于21H21H和和22H22H两个单元中。程序如下。两个单元中。程序如下。2022-2-14442022-2-1445例例4.10 4.10 将片外将片外RAM 30HRAM 30H3FH3FH单元中的单元中的ASCIIASCII码依码依次转换成十六进制数,并存入片内次转换成十六进制数,并存入片内RAMRAM的的60H 60H 67H67H单元中。程序如下:单元中。程序如下:2022-2-14462022-2-1447MOVMOVR7,R7,#time#time LOOP: LOOP:NOPNOPNOPN

13、OPDJNZDJNZ R7,R7,LOOPLOOPRETRET NOP NOP指令的机器周期为指令的机器周期为1 1,DJNZDJNZ指令的机器周期为指令的机器周期为2 2,则一次循环共则一次循环共4 4个机器周期。如果单片机的晶振频率为个机器周期。如果单片机的晶振频率为6MHz6MHz,则一个机器周期是,则一个机器周期是2S2S,所以一次循环的延迟,所以一次循环的延迟时间为时间为8S8S。定时程序的延迟时间是循环程序段执行。定时程序的延迟时间是循环程序段执行时间的整数倍,该程序的延迟时间为时间的整数倍,该程序的延迟时间为8 8timetime(SS)。)。这个程序的最长延迟时间为这个程序的最

14、长延迟时间为2048S2048S。2022-2-1448MOVMOVR7,R7,#time1#time1LOOP1:LOOP1:MOVMOVR6,R6,#time2#time2LOOP2:LOOP2:NOPNOPNOPNOPDJNZDJNZ R6,R6,LOOP2LOOP2DJNZDJNZ R7,R7,LOOP1LOOP1RET RET 2022-2-14492 2条查表指令:条查表指令:MOVCMOVC A,A,A+DPTRA+DPTRMOVCMOVC A,A,A+PCA+PC 这两个这两个MOVCMOVC指令的功能是完全相同的。它们在不改变指令的功能是完全相同的。它们在不改变DPTRDPT

15、R和和PCPC的状态下,只根据的状态下,只根据A A的内容就可以取出表格中的数据。但这两的内容就可以取出表格中的数据。但这两条指令在具体使用上也存在差异。前一条指令的基址寄存器条指令在具体使用上也存在差异。前一条指令的基址寄存器DPTRDPTR能提供能提供16bits16bits基址,而且还能在使用前给基址,而且还能在使用前给DPTRDPTR赋值,查表赋值,查表空间可达空间可达64KB64KB。后一条指令是以。后一条指令是以PCPC作为基址寄存器,虽然也能作为基址寄存器,虽然也能提供提供16bits16bits地址,但地址,但PCPC不能被赋值,所以其基址值是固定的。不能被赋值,所以其基址值是

16、固定的。由于由于A A的内容为的内容为8bits8bits无符号数,所以只能在当前指令下面的无符号数,所以只能在当前指令下面的256256个地址单元内进行查表,即数据只能放在该指令后面的个地址单元内进行查表,即数据只能放在该指令后面的256256个地个地址单元之内,而且表格只能被程序段所使用。址单元之内,而且表格只能被程序段所使用。 2022-2-1450 设设XiXi为路数,查表是为路数,查表是XiXi按按0 0,1 1,2 2,1515取路取路数,表中报警值是数,表中报警值是2 2字节数,依字节数,依XiXi顺序列成表格,顺序列成表格,放在放在TABTAB中。进入查表程序之前,路数中。进入查表程序之前,路数XiXi放在放在R2R2中,中,其输入值存于其输入值存于R0R0、R1R1中,查表结果若允许报警,将中,查表结果若允许报警,将P1.0P1.0置置1 1,否则清,否则清0 0。程序如下:。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论