版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用单片机原理及应用程序设计程序设计第四章 MCS-51汇编语言程序设计 4.1 汇编语言程序设计概述 4.2 简单程序设计 4.3 循环程序设计 4.4 查表程序设计 4.5 子程序的设计 4.6 分支转移程序设计 4.7 综合编程举例单片机原理及应用单片机原理及应用程序设计程序设计程序设计概述设计语言 最早人们只能用最早人们只能用机器语言机器语言(二进制)编写程序;(二进制)编写程序; 为了方便记忆,人们开始用助记符形式的汇编语言为了方便记忆,人们开始用助记符形式的汇编语言编写程序,称为编写程序,称为低级语言低级语言。然后再用汇编系统将其翻译。然后再用汇编系统将其翻译成机器语言
2、,该过程称为成机器语言,该过程称为汇编汇编; 为了用更接近人的语言编写程序,程序设计师们发为了用更接近人的语言编写程序,程序设计师们发明了明了高级语言高级语言,如:,如: BASIC、FORTRAN、PASCAL、C、JAVA。 然后再用编译系统将其翻译成机器语言,然后再用编译系统将其翻译成机器语言,该过程称为该过程称为编译编译; 机器只能识别机器语言。所以必须用编译系统将高机器只能识别机器语言。所以必须用编译系统将高级语言编写的源程序编译成机器语言,用汇编系统将用级语言编写的源程序编译成机器语言,用汇编系统将用汇编语言编写的源程序汇编成机器语言;汇编语言编写的源程序汇编成机器语言; 由低级或
3、高级语言构成的程序称为由低级或高级语言构成的程序称为源程序源程序,由机器,由机器语言构成的程序称作语言构成的程序称作目标程序目标程序;单片机原理及应用单片机原理及应用程序设计程序设计 源程序 目标程序 低级语言机器语言汇编高级语言机器语言编译单片机原理及应用单片机原理及应用程序设计程序设计4.1 汇编语言程序设计概述 4.1.1 4.1.1 概述概述 MCS-51单片机的汇编语言指令系统,每一条指令就是汇编语言的一条命令语句。由于汇编语言是面向机器硬件的语言,因此使用汇编语言进行程序设计,必须熟悉MCS-51单片机的硬件结构、指令系统、寻址方式等,才用编写出符合要求的程序。单片机原理及应用单片
4、机原理及应用程序设计程序设计 汇编语言语句有两种基本类型: 1.1.指令语句指令语句 每一条指令在汇编时都产生一个指令代码,也称为机器代码,该机器代码对应着机器的一种操作。 2.2.伪指令语句伪指令语句 伪指令语句没有目标代码,它主要是为汇编程序服务的,在汇编过程中起控制作用。 MCS-51的汇编语言语句是符合典型的汇编语言的4分段格式: 标号字段标号字段操作码字段操作码字段操作数字段操作数字段注释字段注释字段(LABLE)(OPCODE)(OPRAND)(COMMENT)单片机原理及应用单片机原理及应用程序设计程序设计 在MCS-51汇编语言中应有向汇编程序发出的指示信息, 告诉它如何完成汇
5、编工作,这一任务是通过使用伪指令来实现的。“伪”体现在汇编时,伪指令没有相应的机器代码产生。 伪指令具有控制汇编程序的输入输出、定义数据和符号、条件汇编、分配存储空间等功能。不同汇编语言的伪指令也有所不同,但一些基本的内容却是相同的。 :,;MOV A #00H标号字段标号字段 操作码字段操作码字段 操作数字段操作数字段ATART注释字段注释字段0A单片机原理及应用单片机原理及应用程序设计程序设计 下面介绍在MCS-51汇编语言程序中常用的伪指令。 ORGORG 汇编起始地址命令 ENDEND 汇编语言程序结束伪指令 EQUEQU 赋值伪指令 DB 定义字节伪指令 DW 定义字伪指令 BIT
6、位地址符号伪指令 DATA 定义标号数值伪指令单片机原理及应用单片机原理及应用程序设计程序设计ORG 汇编起始地址命令 功能:功能:规定程序的起始地址。如果不用ORG规定,则汇编的得到的目标程序将从0000H开始。通用形式ORG M ,M为十或十六进制数.例如: ORG 2000H START:MOV A,#00H 注意:在一个源程序中,可以多次使用ORG指令,来规定不同的程序段的起始地址。但是,地址必须由小到大排列,不能交叉、重叠。单片机原理及应用单片机原理及应用程序设计程序设计END 汇编语言程序结束伪指令 功能:功能:用在程序末尾,表示程序已经结束。汇编程序对END以后的指令不再汇编。单
7、片机原理及应用单片机原理及应用程序设计程序设计EQU 赋值伪指令 功能:功能: 把操作数段中的地址或数据赋值给标号字段中的标号。 格式:格式: 标号 (字符名称) EQU 数或汇编符号 例:例: AA EQU R1 ;R1与AA等值单片机原理及应用单片机原理及应用程序设计程序设计DB 定义字节伪指令 功能:功能:从指定单元开始定义(存储)若干字节的数值或ASCII码字符。用于定义数据常数。 格式:格式: 操作码操作码 操作数操作数 DB DB 字节常数或字节常数或ASCIIASCII字符字符 例:例: ORG 1000H DB 76H,73,C,B DB 0ACH 则(1000H)=76H (
8、1001H) =49H (1002H)=43H (1003H) =42H (1004H)=0ACH 单片机原理及应用单片机原理及应用程序设计程序设计 DW 定义字伪指令 功能:功能:从指定单元开始定义(或存储)若干个字的数据或ASCII码字符。 格式:格式: 操作码操作码 操作数操作数 DW DW 字常数或字常数或ASCIIASCII字符字符 单片机原理及应用单片机原理及应用程序设计程序设计 BIT 位地址符号伪指令 功能:功能: 把位地址赋予所规定的字符名称。 格式:格式: 字符名称 操作码 操作数 BIT 位地址 例:例: ABC BIT P1.0 Q4 BIT P2.2 汇编后,位地址P
9、1.0、P1.2分别赋给变量ABC和Q4。 单片机原理及应用单片机原理及应用程序设计程序设计4.1.2 汇编语言程序设计步骤 使用汇编语言作为程序设计语言的步骤与高级语言编程步骤类似,但略有差异。其程序设计步骤大致可分为以下几步: 1分析课题,确定算法或解题思路。 2画工作流程图(图形的符号规定均同于高级语言流程图) 3分配内存单元,确定程序与数据区存放地址。 4 编写源程序。 5 上机调试、修改,最后确定源程序。 程序设计时,必须根据实际问题和所使用的计算机的特点来确定算法,然后按照尽可能使程程序简短和缩短运行时间序简短和缩短运行时间两个原则编写程序。单片机原理及应用单片机原理及应用程序设计
10、程序设计 语言源程序翻译成机器代码(指令代码)的过程称为“汇编”。 手工汇编手工汇编 通过查指令的机器代码表,逐个把助记符指令翻译成机器代码,再进行调试和运行。 缺点:繁琐、容易出错。缺点:繁琐、容易出错。 所以只有小程序或受条件限制时才使用。所以只有小程序或受条件限制时才使用。在实际的程序设计中,都是采用机器汇编来在实际的程序设计中,都是采用机器汇编来自动完成。自动完成。单片机原理及应用单片机原理及应用程序设计程序设计机器汇编机器汇编 借助于微计算机来代替手工汇编。它实际上是通过执行汇编程序来对源程序进行汇编的。由于使用微型计算机完成了汇编,而汇编后得到的机器代码却是在单片机上运行,所以这种
11、机器汇编又称为交叉汇编。 交叉汇编后,通过微机的串口(或并口)将汇编得到的机器代码送到用户样机(或在线仿真器)在进行程序的调试和运行。有时,在分析现成产品的ROM/EPROM中的程序时,要将二进制数的机器代码语言程序翻译成汇编语言源程序,该过程称为成汇编语言源程序,该过程称为反汇编反汇编。 单片机原理及应用单片机原理及应用程序设计程序设计4.2 简单程序设计 顺序结构的程序是一种最简单、最基本的程序(也称为简单程序)。它的特点是按程序编写的顺序一次执行,程序流向不变。这类程序是所有复杂程序的基础。 结构特点结构特点: 按指令的先后顺序依次执按指令的先后顺序依次执行。行。单片机原理及应用单片机原
12、理及应用程序设计程序设计 将将20H20H单元的两个压缩单元的两个压缩BCDBCD码拆开变成码拆开变成ASCIIASCII码,存入码,存入21H21H、22H22H单元。单元。( (假设假设20H20H中的中的BCDBCD码为码为00110100)00110100)什么是BCD码?什么是ASII码? 0011压缩BCD码001100110100低四位ASII码高四位ASII码单片机原理及应用单片机原理及应用程序设计程序设计方法方法1 1:将BCD码除以10H,恰好是将BCD码分别移到了A、B的低4位。然后再各自与30H相或或,即成为ASCII码。方法方法2 2:利用半字节交换指令来实现。单片机
13、原理及应用单片机原理及应用程序设计程序设计ORG 0000HMOV A,20HMOV B,#10HDIV ABORL B,#30HMOV 22H,BORL A,#30HMOV 21H,ASJMP $ 开始 (20H)A10HB A/B (A中为高4位BCD码,B中为低4位BCD码) B+30HB B(22H) A+30HA A(21H) 结束简单程序例1-方法1源程序如下:0011010000110100000100000011000000000100001101000011单片机原理及应用单片机原理及应用程序设计程序设计 ORG 0000H MOV R0,#20H MOV A,#30H XC
14、HD A,R0 MOV 22H,A MOV A,R0 SWAP A ORL A , #30H MOV 21H, A SJMP $简单程序例1-方法2 开始 #20HR0#30HA A的低4位(20H)的低4位 A(22H)(20H)A A的低4位A的高4位 A(21H) 结束 A+30HA源程序如下:00110010000000110100000001000011 01000011 00000011 00000011 0011单片机原理及应用单片机原理及应用程序设计程序设计 地址 机器码 周期数 源程序 ORG 2000H 2000H 74 20 1 MOV A, 20H 2002H 75 F
15、0 10 2 MOV B,#10H 2005H 84 4 DIV AB 2006H 43 F0 30 2 ORL B, #30H 2009H 85 22 F0 2 MOV 22H, B 200CH 44 30 1 ORL A,#30H 200EH F5 21 1 MOV 21H, A END 此程序占用字节数此程序占用字节数1616,执行总周期数为,执行总周期数为1313。 单片机原理及应用单片机原理及应用程序设计程序设计 方法二方法二 采用先把20H中低4位BCD码交换出来加以转换、存放,然后再把高4位BCD码交换至低4位加以转换、存放。 地 址 机器码 周期数 源程序 ORG 2000H
16、2000H 78 22 1 MOV R0,#22H 2002H 76 00 1 MOV R0, #0 2004H E5 20 1 MOV A, 20H 2006H D6 1 XCHD A,R0 2007H 43 22 30 1 ORL 22H, #30H 200AH C4 1 SWAP A 200BH 44 30 1 ORL A, #30H 200DH F5 21 1 MOV 21H, A END 此程序占用字节数为此程序占用字节数为15,执行总周期为,执行总周期为9。单片机原理及应用单片机原理及应用程序设计程序设计有两组BCD码分别存放在23H、22H单元和33H、32H单元,求它们的和并送
17、入43H、42H单元中去。(高位在前,低位在后)分析分析: :00111000011001010001000110000111BCD码83HBCD码11H单片机原理及应用单片机原理及应用程序设计程序设计 ORG 0000H ORG 0000H MOV A MOV A,22H22H ADD A ADD A,32H32H DA A DA A MOV 42H MOV 42H,A A MOV A MOV A,23H23H ADDC A ADDC A,33H33H DA A DA A MOV 43H MOV 43H,A A SJMP $ SJMP $ END END 此条加法指令可否此条加法指令可否改用
18、带进位的改用带进位的(ADDC)?(ADDC)? 开始(22H)A(32H)+AA十进制调整(33H)+AA A(43H) 结束 A(42H)(23H)A 十进制调整单片机原理及应用单片机原理及应用程序设计程序设计 ORG 2000H CLR C MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A END100000110101011000010001011110001000001101111000+11111011011000010001000101010110011001110110100011111
19、011011000010110100001100111单片机原理及应用单片机原理及应用程序设计程序设计程序设计概述-基本步骤 题意分析 画出流程图 分配内存及端口 编制源程序 仿真、调试程序 固化程序单片机原理及应用单片机原理及应用程序设计程序设计4.3 循环程序设计 在很多实际程序中会遇到需多次重复执行某段程序的情况,可把这段程序设计为循环结构程序,这样可大大缩短程序。 单片机原理及应用单片机原理及应用程序设计程序设计 循环程序的基本结构:循环初态循环初态 设置循环过程中的初始值。例如:设置循环次数计数器、地址指针赋初值。 循环体循环体 重复执行的程序段部分称为循环体,完成主要的操作(包括对
20、地址指针的修改)。 循环控制部分循环控制部分 用于控制循环的执行和结束。在循环初态已经给出了循环结束条件,即循环次数初值。循环程序没执行一次,都检查结束条件。当条件不满足时,修改地址指针和控制变量;当条件满足时,停止循环。 单片机原理及应用单片机原理及应用程序设计程序设计 若循环程序的循环体中不再包含循环程序,即为单重循环程序。如果在循环体中还包含循环程序,那么这种现象称为循环嵌套。 注意:多重循环程序中,只允许外重循环嵌套内重循环程序,不允许循环互相相交,也不允许从循环程序的外部跳入循环程序的内部。 单片机原理及应用单片机原理及应用程序设计程序设计X Xi i为单字节数,顺序存放在为单字节数
21、,顺序存放在RAMRAM从从50H50H开始开始的单元,的单元,n n放在放在R2R2中现在要求它们的和(双中现在要求它们的和(双字节)并放在字节)并放在R3R4R3R4中,则有:中,则有: MOV R3,#0 MOV R4,#0 MOV R0,#50H LOOP: MOV A,R4 ADD A,R0 MOV R4,A INC R0 CLR AADDC A,R3MOV R3,A DJNZ R2,LOOPEND单片机原理及应用单片机原理及应用程序设计程序设计 例例2 2: 多重循环-延时程序(50ms延时)。 我们知道使用12MHz晶振时,1个机器周期为1 us,执行1条DJNZ指令的时间就为2
22、 us。用双重循环可以写出如下程序段: DEL: MOV R7,#200 DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2; 1252=250us DJNZ R7,DEL1; 0.25ms200=50 ms RET由于没有考虑到除“DJNZ R6,DEL2”指令外的其他指令的时间,如把其它指令的时间计算在内,则延时时间为:(250+1+2250+1+2)* *200+1=50.601ms200+1=50.601ms单片机原理及应用单片机原理及应用程序设计程序设计 比较精确的延时,可修改程序如下:比较精确的延时,可修改程序如下: DEL: MOV R7,#200 DEL1
23、: MOV R6,#123 NOP DEL2: DJNZ R6,DEL2; 2123+2=248us DJNZ R7,DEL1; (2482482 2)2002001 150.001ms50.001ms 注意:用软件实现延时程序,不允许有注意:用软件实现延时程序,不允许有中断,否则将严重影响定时的准确性。中断,否则将严重影响定时的准确性。单片机原理及应用单片机原理及应用程序设计程序设计 例3: 从22H单元开始有一无符号数据块,其长度在20H单元,求出数据块中最大值,并存入21H单元。 源程序: ORG 2000H CLR C MOV A,22H MOV R2,20H DEC R2 MOV R
24、1,#23H LP: CLR C SUBB A,R1 JNC NEXT单片机原理及应用单片机原理及应用程序设计程序设计 MOV A,R1 SJMP NEXT1 NEXT: ADD A,R1 NEXT1: INC R1 DJNZ R2,LP MOV 21H,A LP1: SJMP LP1 END 思考:如何在该例的基础上改为求最小值?单片机原理及应用单片机原理及应用程序设计程序设计数数据据传传送送程程序序例例4:不同存储区域之间的数据传输不同存储区域之间的数据传输: 将内部将内部RAM30HRAM30H单元开始的内容传送到外部单元开始的内容传送到外部RAM0100HRAM0100H单元开始的区域
25、,直到遇到传送的内容是单元开始的区域,直到遇到传送的内容是0 0为止。为止。 A 初始化部分循环体循环控制循环结束单片机原理及应用单片机原理及应用程序设计程序设计例例5:编程实现编程实现P1口连接的口连接的8个个LED显示方式如下:从显示方式如下:从P1.0到到P1.7的顺序,依次点亮其连接的的顺序,依次点亮其连接的LED。 次数单片机原理及应用单片机原理及应用程序设计程序设计 ORG 0000H START: MOV R2,#08H ;设置循环次数设置循环次数 MOV A,#0FEH ;送显示模式字送显示模式字 NEXT:MOV P1,A ;点亮二极管点亮二极管 ACALL DELAY RL
26、 A ;左移一位,改变显示模式字左移一位,改变显示模式字 DJNZ R2,NEXT ;次数减次数减1,不为零,继续,不为零,继续 SJMP START ;下面一个二极管下面一个二极管 DELAY: MOV R3,#0FFH ;延时子程序开始延时子程序开始 DEL2: MOV R4,#0FFH DEL1: DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 单片机原理及应用单片机原理及应用程序设计程序设计 4.4 查表程序设计 所谓查表法,就是对一些复杂的函数运算,例如sin x 和x + x等,事先把其全部可能范围的函数值按一定规律存放在程序存储器。当程序中要用到这些函数时,可
27、以直接按编排好的索引值进行查找。当然,索引值和函数值应该有直接的对应关系。 查表法的优点: 节省运算步骤,程序简洁,执行速度提高。 查表法的缺点: 占用较多的存储单元。 随着存储器价格的大幅度下降,这个问题已 微不足道,所以查表法的应用越来越广泛。 单片机原理及应用单片机原理及应用程序设计程序设计例例1 1: 用查表法计算平方用查表法计算平方( (一一) ) ORG 0000HORG 0000H MOV MOV DPTR DPTR,#TABLE ;#TABLE ;表首地址送表首地址送DPTRDPTR MOV A MOV A,#05#05; ;被查数字被查数字0505A A MOVC A MOV
28、C A,A+DPTRA+DPTR ; ;查表求平方查表求平方 SJMP $ SJMP $ TABLETABLE:DB 0,1,4,9,16,25,36,49,64,81 DB 0,1,4,9,16,25,36,49,64,81 END END 单片机原理及应用单片机原理及应用程序设计程序设计 ORGORG 0000H 0000H1000H MOV A1000H MOV A,#05#05 ;05 ;05 A A1002H ADD1002H ADD A A,#02#02 ; ;修正累加器修正累加器A A1004H MOVC A1004H MOVC A,A+PCA+PC ; ;查表求平方查表求平方1
29、005H SJMP $ 1005H SJMP $ 1007H1007H: DB 0,1,4,9,16,25,36,49,64,81DB 0,1,4,9,16,25,36,49,64,81 END END单片机原理及应用单片机原理及应用程序设计程序设计 例例2 2:设有一个循环检测报警装置,需对16路输入进行控制,每路有一个最大允许值,它为双字节数,控制时需根据测量的路数,找出该路的最大允许值,看输入值是否大于允许值,如大于即报警路数X(0X15)放于R2中。 Y为最大允许值,放在表格中查表后最大值放于R3R4中。 单片机原理及应用单片机原理及应用程序设计程序设计 TAB: MOV A,R2 A
30、DD A,R2 MOV R3,A ADD A,#06 MOVC A,A+PC XCH A,R3 ;1字节 ADD A,#03 ;2字节 MOVC A,A+PC ;1字节 MOV R4,A ;1字节 RET ;1字节 TAB1: DW 1520,3721,4264,7850 DW 3483,32657,883,9943 DW 10000,40511,6758,8931 DW 4468,5871,13284,27808 单片机原理及应用单片机原理及应用程序设计程序设计 这个查表程序具有局限性,表格长度不能超过255B,表格只能存放在 MOVC A, A+PC 指令以下的256个单元。如果表格长度超
31、过256B,则需要把表格放在64KB程序存储器空间的任何地方,则应使用指令“MOVC A, A+DPTR”且对DPH、DPL进行计算,求出表目的地址。 单片机原理及应用单片机原理及应用程序设计程序设计4.5 子程序的设计 在实际问题中,常常会遇到在一个程序中多次用到相同的运算或操作,若每遇到这些运算或操作,都从头编起,将使程序繁琐、浪费内存。因此在实际中,经常把这种多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调用这些独立的程序段。这种可以被调用的程序段称为子程序子程序。主要内容:主要内容: 1. 1. 主程序与子程序的关系主程序与子程序的关系 2. 2. 子程序嵌套子程序嵌
32、套 3. 3. 子程序的调用与返回子程序的调用与返回单片机原理及应用单片机原理及应用程序设计程序设计 由于子程序的资源需要被所有调用程序共享,所以子程序在功能上具有通用性、在结构上应具有独立性。 子程序的结构与一般程序的主要区别:子程序的结构与一般程序的主要区别: 子程序的末尾有一条子程序返回指令 (RET)。 单片机原理及应用单片机原理及应用程序设计程序设计主程序与子程序的关系 子程序SUB 主程序MAINLCALL SUB 调用子程序子程序入口地址RET单片机原理及应用单片机原理及应用程序设计程序设计 ORG0000H MAIN:MOVA,#0FEH ;送显示初值;送显示初值 LP:MOV
33、R0,#10;送闪烁次数;送闪烁次数 LP0:MOVP1,A;点亮;点亮LEDLCALLDELAY;延时;延时MOVP1,#0FFH;熄灭灯;熄灭灯LCALLDELAY;延时;延时DJNZR0,LP0 RLA SJMPLP实例:实例:LED灯的闪烁点亮(一)灯的闪烁点亮(一)延时次数-1=0点亮相应的LEDYN熄灭相应的LED延时初值左移1位指向下一个LED设闪烁次数送显示初值开始单片机原理及应用单片机原理及应用程序设计程序设计子程序嵌套 子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。 子程序SUB1 主程序MAINLCALL SUB1 RET 子程序SUB2RET
34、LCALL SUB2 单片机原理及应用单片机原理及应用程序设计程序设计子程序嵌套范例:子程序嵌套范例:LEDLED灯闪烁灯闪烁( (二二) ) ORG 0000HMAIN:MOVA,#0FEH;送显示初值;送显示初值COUN:ACALLFLASH;调闪烁子程序;调闪烁子程序RLA;A左移,下一个灯闪烁左移,下一个灯闪烁SJMPCOUN;循环不止;循环不止FLASH:MOVR0,#10;送闪烁次数;送闪烁次数FLASH1:MOV P1,A;点亮;点亮LEDLCALLDELAY;延时;延时MOVP1,#0FFH;熄灭灯;熄灭灯LCALLDELAY;延时;延时DJNZR0,FLASH1 ;闪烁次数不
35、够;闪烁次数不够10次,继续次,继续RETDELAY:MOVR3,#0FFH;延时子程序;延时子程序DEL2:MOVR4,#0FFHDEL1:NOPDJNZR4,DEL1DJNZR3,DEL2RETEND单片机原理及应用单片机原理及应用程序设计程序设计子程序的调用与返回 子程序调用、返回到主程序中的正确位置,并接著执行主程序中的后续指令呢? 为了解决这个问题,我们采用了堆栈技术。 子程序SUB1 主程序MAINRET 子程序SUB2RET20102013211021132100220020 132013 PC21 131321堆栈指针SP堆栈LCALLSUB1LCALLSUB2单片机原理及应用
36、单片机原理及应用程序设计程序设计子程序设计注意事项 (1)要给每个子程序起一个名字,也就是入口地址入口地址的代号。 (2)要能正确地传递参数。即首先要有入口条件入口条件,说明进入子程序时,它所要处理的数据放在何处(如:是放在A中还是放在某个工作寄存器中等)。另外,要有出口条件出口条件,即处理的结果存放在何处。 (3)注意保护现场和恢复现场。在子程序使用累加器、工作寄存器等资源时,要先将其原来的内容保存起来,即保护现场保护现场。当子程序执行完毕,在返回主程序之前,要将这些内容再取出,送还到累加器、工作寄存器等原单元中,这一过程称为恢复现场恢复现场。例 查表子程序。注意:1.入口参数和出口参数的位
37、置 2.现场的保护与恢复。单片机原理及应用单片机原理及应用程序设计程序设计子程序的参数传递子程序的参数传递 ,ORG 0000H ;主程序;主程序MOV SP,#3FH;设置栈底;设置栈底MOVDPTR,#8000HMOV A,31H ;取数;取数a存放到累加器存放到累加器A中作为入口参数中作为入口参数LCALLSQR;计算;计算MOV R1,A;出口参数;出口参数平方值存放在平方值存放在A中中MOV A,32H ;取数;取数b存放到累加器存放到累加器A中作为出口参数中作为出口参数LCALLSQR;计算;计算ADDA,R1;求和;求和MOVXDPTR,A ;存放结果;存放结果SJMP $ 单片
38、机原理及应用单片机原理及应用程序设计程序设计SQRSQR:PUSH DPHPUSH DPH ;保护现场,将主程序中;保护现场,将主程序中DPTRDPTR的高八位放入堆栈的高八位放入堆栈 PUSH DPLPUSH DPL ;保护现场,将主程序中;保护现场,将主程序中DPTRDPTR的低八位放入堆栈的低八位放入堆栈 MOV DPTR,#TABLE MOV DPTR,#TABLE ;在子程序中重新使用;在子程序中重新使用DPTR,DPTR,表首地址表首地址DPTRDPTR MOVC A, A+DPTR MOVC A, A+DPTR ;查表;查表 POP DPLPOP DPL ;恢复现场,将主程序中;
39、恢复现场,将主程序中DPTRDPTR的低八位从堆栈中弹出的低八位从堆栈中弹出 POP DPHPOP DPH ;恢复现场,将主程序中;恢复现场,将主程序中DPTRDPTR的高八位从堆栈中弹出的高八位从堆栈中弹出 RETRETTABLE: DB 0,1,4,9,16,25,36,49,64,81TABLE: DB 0,1,4,9,16,25,36,49,64,81单片机原理及应用单片机原理及应用程序设计程序设计4.6 分支转移程序设计 分支转移程序的最大特点是程序中含有转移指令,转移指令又分为无条件转移指令又分为无条件转移和有条件转移转移和有条件转移,因此分支程序也可分为无条件分支转移程序和有条件
40、分支转移程序。我们在这里讲述的重点是有条件分支转移。 单片机原理及应用单片机原理及应用程序设计程序设计不一定按指令的先后顺序依次运行程序,程序的流向有两个或两个以上分支,根据指定条件选择程序的流向。分支:P3.4=0?点亮所有二极管N二极管交叉点亮Y单片机原理及应用单片机原理及应用程序设计程序设计分支程序的典型实例 实例:已知30H单元中有一变量X,要求编写一程序按下述要求给Y赋值,结果存入31H单元。 X+1, X0 Y = 0 , X = 0 1 , X0 题意:根据X的不同,程序编写时有三个出口,即有三个分支! 想一想:程序怎么编写?单片机原理及应用单片机原理及应用程序设计程序设计分支程
41、序实例-三分支程序开始 XAA= 1 A= A+1存结果结束YYNN程序框图:A0?A=0?单片机原理及应用单片机原理及应用程序设计程序设计分支程序实例-三分支程序 源程序如下: ORG 2000H MOV A,30H JZ LP1 ;X = 0,转LP1处理 JNB ACC.7,LP2 ;X0,转LP2处理 MOV A,#0FFH ;X0,则Y= 1 SJMP LP1 LP2:ADD A,#01 ;X 0,Y=X+1 LP1:MOV 31H,A ;存结果 SJMP $ ;循环等待,$表示转至 本地址,此方法适用 于一字节的偏移量最高位为符号位。单片机原理及应用单片机原理及应用程序设计程序设计
42、 设内部RAM20H单元和30H 单元中分别存放了两个8位的无符号数 X、Y, 若XY 则让P1.0管脚连接的LED亮;若XY,点亮P1.1X=Y,点亮P1.0X0?NY单片机原理及应用单片机原理及应用程序设计程序设计程序清单XDATA20HYDATA30H;伪指令伪指令ORG0000HMOVA,XXRLA,Y;X,Y进行异或进行异或JBACC.7,NEXT1;二者符号不同,跳转到;二者符号不同,跳转到NEXT1MOVA,X;符号相同;符号相同CJNEA,Y,NEQUAL;XY,跳转到,跳转到NEQUALCLRP1.0;X=Y,点亮,点亮P1.0SJMPFINISHNEQUAL: JCXXY
43、;XY,转移到,转移到XDYNEXT1:MOVA,XJNBACC.7,XDY;判断;判断X的正、负,正则转移到的正、负,正则转移到XDYXXY:CLRP1.2;XY,点亮,点亮P1.1FINISH:SJMP$END单片机原理及应用单片机原理及应用程序设计程序设计散转程序 散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。 常用的指令是JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,形成散转的目的地址。DPTRAPCA中内容为8位无符号数16位地址数单片机原理及应用单片机原理及应用程序设计程序设计
44、程序清单如下:JUMP1: MOV DPTR,JPTAB1 ;跳转表首送数据指针 MOV A,R7 ADD A,R7 ;R72A (修正变址值) JNC NOAD ;判有否进位 INC DPH ;有进位则加到高字节地址 NOAD: JMP A+DPTR ;转向形成的散转地址人口JPTAB1: AJMP OPR0 ;直接转移地址表 AJMP OPR1 . AJMP OPRn 例: 根据R7的内容,转向各自对应的操作程序 (R7= 0,转入OPR0;R7= 1,转入OPR1R7= n,转入OPRn)单片机原理及应用单片机原理及应用程序设计程序设计4.7 综合编程举例 代码转换类程序代码转换类程序
45、在计算机内部的运算一般都是用二进制,而在计算机与外设的数据传送中常采用BCD码、ASCII码和其他代码,这就存在一个代码之间转换的问题。 在程序设计中常采用算法处理和查表方式。前者是根据待转换的两种代码的某种数学上的运算关系,通过一定的算法进行转换;后者是将两种待转换的代码对应列表,然后用查表指令进行转换。 单片机原理及应用单片机原理及应用程序设计程序设计 例1:将累加器A中0FFH范围内的二进制数转换为BCD数。 BB: MOV B,#100 DIV AB MOV R0,A INC R0 MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B MOV R0,A RET
46、 本程序通过两次“DIV”指令分离出百位数和十分数,这样的转换方法避免了循环程序,十分简单。 单片机原理及应用单片机原理及应用程序设计程序设计 例例2 2:把A中的压缩BCD码转换成二进行制数。 BIN: MOV R2,A ANL A,#F0H SWAP A MOV B,#10 MUL AB MOV R3,A MOV A,R2 ANL A,#0FH ADD A,R3 RET 单片机原理及应用单片机原理及应用程序设计程序设计 例3: ASCII码转换成二进制数。要求:ASCII二进制数,并拼装成一个字节,放到70H单元之中。(60H)=33H(字符“3”的ASCII码值),(61)=43H(字符
47、“C”的ASCII码值)。字符09对应的ASCII码值30H39H。字符AF对应的码值41H46H。主程序: ATOH: MOV R0,#61H MOV R1,#70H ACALL CVERT ;结果存放在A中 SWAP A MOV R1,A ;存高位 DEC R0 ACALL CVERT XCHD A,R1单片机原理及应用单片机原理及应用程序设计程序设计 子程序:子程序: CVERT:MOV A,R0 CLR C SUBB A,#30H CJNE A,#0AH,NEQ AJMP BIG; (A)=OAH NEQ: JC LEND;(A)OAH,cy=0 LEND: RET 单片机原理及应用单
48、片机原理及应用程序设计程序设计 算术逻辑指令在多字节运算中的应用算术逻辑指令在多字节运算中的应用 多字节十进制数(多字节十进制数(BCDBCD码)加法:码)加法: 例4: 被加数和加数分别存放在40H和50H为起始地址的单元,求这两个数的和,并将和存放到起始地址为40H单元中去。 R040H,R151H.字节数存放在R2中,将36701985存放在43H40H,12663459存放在53H50H. MAIN: MOV RO,#40H MOV RO,#50H MOV RO,#04H ACALL J1ABCD1 单片机原理及应用单片机原理及应用程序设计程序设计 J1ABCD1:CLR C J1AB
49、CD2:MOV A,R0 ADDC A,R1 DA A MOV R0,A INC R0 INC R1 DJNZ R2,J1ABCD2 RET单片机原理及应用单片机原理及应用程序设计程序设计 例5:编制一多字节乘法子程序。 设被乘数为3个字节(分别存储在符号地址J、K、L单元中)乘数为单字节(存于符号地址M单元中) J K L M*LOMLHIMLHIMK+LOMKHIMJLOMJRES3RES2RES1RES0被乘数乘数部分积乘积单片机原理及应用单片机原理及应用程序设计程序设计 MULJKLM: PUSH A PUSH B MOV A, M MOV B, L MUL AB MOV LOML,
50、A MOV HIML, B MOV A, M MOV B, K MUL AB MOV LOMK, A MOV HIMK, B MOV A, M MOV B, J MUL AB MOV LOMJ, A MOV HIMJ, B MOV RES0, LOML MOV A, HIMK ADD A, LOMK MOV RES1, A单片机原理及应用单片机原理及应用程序设计程序设计 MOV A, HIMK ADDC A, LOMJ MOV RES2, A CLR A ADDC A, HIMJ MOV RES3, A POP B POP A RET单片机原理及应用单片机原理及应用程序设计程序设计例6:程序名
51、程序名 :FIND ; FIND ; 功能:片内功能:片内RAMRAM中数据检索中数据检索入口参数:入口参数:R0R0 指向数据块首地址,指向数据块首地址,R1R1中为数据块长度,关键字存于累加器中为数据块长度,关键字存于累加器A A中中出口参数:若找到关键字,把关键字在数据块中的序号存放到出口参数:若找到关键字,把关键字在数据块中的序号存放到A A中,若找不到中,若找不到 关键字,关键字,A A中存放序号中存放序号00H00H占用资源:占用资源:R0,R1,R2,A.PSWR0,R1,R2,A.PSWFIND:FIND: PUSH PUSHPSWPSWPUSHPUSHACCACCMOVMOV
52、R2R2,#00H#00HLOOPLOOP: POPPOPACCACCMOVMOVB B,A AXRLXRLA A,R0 R0 ;关键字与数据块中数据进行异或操作;关键字与数据块中数据进行异或操作INCINCR0R0 ;指向下一个数;指向下一个数INCINCR2R2 ;R2R2中的序号加中的序号加1 1 JZ JZLOOP1 LOOP1 ;找到;找到PUSHPUSHB BDJNZDJNZR1,LOOPR1,LOOPMOVMOVR2,#00HR2,#00H ;找不到,;找不到,R2R2中存放中存放0000LOOP1:LOOP1: MOV MOVA,R2A,R2POP PSWPOP PSWRETR
53、ET单片机原理及应用单片机原理及应用程序设计程序设计例7:程序名程序名 :MAXMAX功能功能 :查找内部:查找内部RAMRAM中无符号数据块的最大值中无符号数据块的最大值入口参数:入口参数:R1R1指向数据块的首地址,数据块长度存放在工作指向数据块的首地址,数据块长度存放在工作 寄存器寄存器R2R2中中出口参数:最大值存放在累加器出口参数:最大值存放在累加器A A中中占用资源:占用资源:R1,R2,A,PSWR1,R2,A,PSWMAX:MAX:PUSH PSWPUSH PSWCLR CLR A A;清;清A A作为初始最大值作为初始最大值LP: LP: CLR CLR C C;清进位位;清
54、进位位SUBB SUBB A,R1A,R1;最大值减去数据块中的数;最大值减去数据块中的数JNCJNCNEXTNEXT;小于最大值,继续;小于最大值,继续MOVMOVA,R1A,R1 ;大于最大值,则用此值作为最大值;大于最大值,则用此值作为最大值SJMPSJMPNEXT1NEXT1NEXT:NEXT:ADDADDA,R1A,R1;恢复原最大值;恢复原最大值NEXT1: INCNEXT1: INCR1R1;修改地址指针;修改地址指针DJNZDJNZR2,LPR2,LPPOP POP PSWPSWRETRET单片机原理及应用单片机原理及应用程序设计程序设计例8:排序程序排序程序程序名程序名:BU
55、BBLE功能功能:将片内:将片内RAM数据块由大到小排序数据块由大到小排序入口参数:入口参数:R0指向数据块首地址,指向数据块首地址,R2存放数据块长度存放数据块长度出口参数:仍存放原来位置出口参数:仍存放原来位置占用资源:占用资源:R0,R1,R2,R3,R5,A,PSW;00H位位单片机原理及应用单片机原理及应用程序设计程序设计 BUBBLLE:MOV A,R0 MOV R1,A MOV A,R2 MOV R5,A BUBB1: CLR 00H DEC R5 MOV A,R1 BUB1: INC R1 MOV B,R1 CJNE A,B,BUB0 BUB0: JNC BUB2 SETB 0
56、0H XCH A,R1 BUB2:DEC R1 MOV R1,A INC R1 MOV A,R1 DJNZ R5,BUB1 MOV A,R0 MOV R1,A MOV A,R2 MOV R5,A JB 00H,BUBB1 RET单片机原理及应用单片机原理及应用程序设计程序设计应用控制流程设计 控制流程设计的基本方法: 在单片机的控制系统中,为了实现系统的自动控制,必须将控制现场的信息输入到单片机,经过计算机的处理以后以被控对象能够接受的形式输出到执行机构,实现对现场的控制。单片机原理及应用单片机原理及应用程序设计程序设计 假定:按下按钮,相应的接口信号为低电平(P1.1=0)时: 若程序使 P1.3=1,即KA =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电信课程设计案例
- 总账初始化设置课程设计
- 小学生外国传统课程设计
- 2024年黑龙江省安全员C证考试题库
- 系统soc课程设计
- 砖混厂房概预算课程设计
- 稳压电流源课程设计
- 篮球暑期课程设计意图
- 研学课程设计南锣鼓巷
- 糖化热量衡算课程设计
- 以往马克思主义中国化进程与青年学生使命担当(2022年春)学习通超星期末考试答案章节答案2024年
- 人工智能与信息社会学习通超星期末考试答案章节答案2024年
- 焊工(高级)职业技能鉴定考试题及答案(新版)
- DB13(J) 148-2012 建筑地基基础检测技术规程
- 2023浙教版小学劳动一年级上册教学设计(含目录)
- 2024年影视艺术概论复习考试题(附答案)
- 2024年江西三校生对口升学考试语文试卷真题(含答案详解)
- 【《现金流视角下的绿地集团财务风险防范探究(定量论文)》11000字】
- 重大事故隐患判定标准与相关事故案例培训课件
- 2024至2030年中国冲调饮料行业市场深度研究及投资规划建议报告
- 小学二年级口算及竖式计算练习题
评论
0/150
提交评论