版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及其应用扬州大学1单片机原理接口及其应用(Principle and Application of Single Chip Microcomputer)单片机原理及其应用扬州大学2第1章 概述第2章 MCS-51单片机硬件结构第3章 MCS-51寻址方式和指令系统第4章 MCS-51汇编程序设计第5章 中断系统第6章 定时器/计数器及串行口第7章 存储器扩展第8章 接口电路扩展第9章 应用举例单片机原理及其应用扬州大学3第4章 MCS-51汇编程序设计4.1 汇编语言基本概念4.2 汇编语言程序设计单片机原理及其应用扬州大学44.1 汇编语言基本概念4.1.1 程序设计语言4.1.2
2、 汇编语言的语句结构4.1.3 伪指令单片机原理及其应用扬州大学54.1.1 程序设计语言程序设计语言的结构及其功能可以分为三种:1机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。 机器语言编程困难,一般不再用其编程。单片机原理及其应用扬州大学62汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。 比机器语言编程方便,但要熟悉机器硬件结构、指令系统才能用好它。 汇编语言与机器语言一样是面向机器的,无通用性。单片机原理及其应用扬州大学73高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言。近年来单片机也流行
3、采用高级语言编程。 如C51单片机原理及其应用扬州大学84.1.2 汇编语言的语句结构1汇编语言的指令类型 MCS-51单片机汇编语言,包含两类不同性质的指令。(1)基本指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器代码。(2)伪指令:汇编时用于控制汇编的指令。它们都不是机器的指令,无机器码产生。单片机原理及其应用扬州大学92汇编语言的语句格式 汇编语言源程序是由汇编语句(即指令)组成的。汇编语言一般由四部分组成。其典型的汇编语句格式如下: 标号:操作码操作数;注释START:MOVA,30H;A(30H)单片机原理及其应用扬州大学10START:MOV A,
4、#0 ; 赋初值 (4-1) (p.69)MOV R1, #0A0H ;计数器赋初值MOV R2, #00000011BLOOP:ADD A, R2 ;累加DJNZ R1, LOOPHERE:SJMP HERE 标号:即符号地址,需要时加上。标号后加冒号;标号由字母开头(18字符),标号不能与指令助记符、预定义符号相同。操作数:数值操作数,根据需要可用16进制 (后缀H)、10进制、二进制 (后缀B) 表示。16进制数以AF开头时,前面要加0。$符号的使用:程序最后一句可用 SJMP $ 代替。注释:以分号开头,根据需要对于指令的作用加以解释。单片机原理及其应用扬州大学114.1.3 伪指令(
5、p50) 用汇编语言编写的程序必须经汇编(翻译)成机器代码,单片机才可运行它。为了控制汇编程序如何完成源程序的汇编过程并产生目标程序,需要在源程序中加入汇编控制命令,即伪指令。1ORG :汇编起始地址命令 用来说明ORG指令以下程序段在存储器中存放的起始地址。例如ORG 1000H START: MOVA,#20H MOVB,#30H 一个程序中可多次使用ORG指令,地址要由小到大排列。单片机原理及其应用扬州大学122EQU :赋值命令 给标号赋予一个确定的数值。其它语句可以引用这个标号TTYEQU 1080H3DB :定义数据字节命令把数据以字节的形式存放在连续存储单元中。ORG 1500H
6、HERE: DB 56H,0A7H,35,A(1500h 56H A7H 23H 41H)4DW :定义数据字命令按字的形式把数据存放在连续存储单元中。单片机原理及其应用扬州大学13ORG 1600HABC: DW1234H, 4567H(1600h 12H 34H 45H 67H)5DS :定义存储区命令从指定的地址单元开始,保留一定数量存储单元。ORG 1000HBASE:DS50H6BIT:位定义命令 赋字符名为某个位地址值。EA BIT 0AFH7END:汇编结束命令告知汇编程序源程序结束单片机原理及其应用扬州大学144.2 汇编语言程序设计4.2.1 汇编语言程序设计步骤4.2.2
7、汇编语言程序的汇编4.2.3 顺序程序4.2.4 分支程序4.2.5 循环程序4.2.6 子程序4.2.7 查找程序4.2.8 码制转换程序4.2.9 程序举例单片机原理及其应用扬州大学154.2.1 汇编语言程序设计步骤1分析问题完成什么任务,解决什么问题;已知的数据,运算精度和速度;2确定算法 用何种方法解决问题;多个算法的比较;怎样组织数据;3设计程序流程图把算法和解决问题的步骤具体化;通过流程图掌握程序的总体结构;单片机原理及其应用扬州大学164分配内存单元和I/O端口地址片内RAM划分:工作寄存器组;堆栈区;其它暂存区和缓冲区等;片外RAM;确定各I/O端口的地址5编写汇编语言源程序
8、按流程图编写源程序;程序通常由主程序、子程序、中断服务程序等构成。6调试程序对程序的各个部分分别调试;有些还要与硬件系统连接后调试;切记:编程不易,调试更难。只有掌握了程序的调试、测试才算会编程。单片机原理及其应用扬州大学174.2.2 汇编语言程序的汇编 汇编语言源程序翻译成机器代码的过程称为“汇编”1. 手工汇编手工汇编 通过查指令代码将指令逐条翻译成机器代码并输入到单片机中。这种方法要求自行按绝对地址定位指令,并计算偏移量。工作量大、繁琐、易错,修改不易,已被机器汇编取代。2. 机器汇编机器汇编 在系统机上用相应的汇编程序对源程序文件(*.asm) 自动翻译。由于使用不同种类的计算机进行
9、汇编工作,称为交叉汇编 (汇编后的机器代码不能直接在系统机上运行)。机器汇编的步骤:(1)编辑输入源程序;(2)机器汇编;(3)下载机器代码并运行调试。单片机原理及其应用扬州大学18伟福汇编器 V5.00 (4-2) (p.75) 地址 机器码 源程序 ORG 0H0000 022000 LJMP 2000H ORG 2000H2000 7408 START: MOV A,#82002 8576F0 MOV B,#76H2005 25E0 ADD A,A2007 25F0 ADD A,B2009 752000 LJMP START END单片机原理及其应用扬州大学194.2.3 顺序程序 顺序
10、程序是一种最简单,最基本的程序。特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。 【例4.1】 将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中(低位在31H,高位在32H)。 程序流程如图4-1所示。结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始图4-1 拆字程序流程图单片机原理及其应用扬州大学21参考程序如下: ORG 2000H MOV A,30H;取数 ANL A,#0FH;取低4位ADD A,#30H;转换成ASCII码MOV 31H,A;保存结果MOV A,30H;取数SWAP A;高4位与低4
11、位互换ANL A,#0FH ;取低4位(原来的高4位)ADD A,#30H;转换成ASCII码MOV 32H,A;保存结果 SJMP $ END 转转换换低低4位位转转换换高高4位位单片机原理及其应用扬州大学22 ORG 2000H MOV A,30H;取数 ANL A,#0FH ;取低4位ADD A,#30H;转换成ASCII码MOV 31H,A;保存结果MOV A,30H;取数SWAP A;高4位与低4位互换ANL A,#0FH ;取低4位(原来的高4位)ADD A,#30H;转换成ASCII码MOV 32H,A;保存结果 SJMP $ END 单片机原理及其应用扬州大学23【例4.2】
12、设X、Y两个小于10的整数分别存于片内30H、31H单元,试求两数的平方和并将结果存于32H单元。 解:两数均小于10,故两数的平方和可存放于一个字节,可利用乘法指令求平方。程序流程如图4-2所示。结束取数据X求X2暂存X2取数据Y求Y2求X2+Y2开始保存平方和图4-2 例4.2程序流程图单片机原理及其应用扬州大学25参考程序如下:ORG 2000HMOV A,30H;取30H单元的数据XMOV B,A;将X送入B寄存器MUL AB;求X2,结果在累加器中MOV R1,A;将结果暂存于R1寄存器中MOV A,31H;取31H单元数据YMOV B,A;将Y送入B寄存器MUL AB;求Y2,结果
13、在累加器中ADD A,R1;求X2+ Y2MOV 32H,A;保存结果SJMP $;暂停END 求求X2求求Y2单片机原理及其应用扬州大学26ORG 2000HMOV A,30H;取30H单元的数据XMOV B,A;将X送入B寄存器MUL AB;求X2,结果在累加器中MOV R1,A;将结果暂存于R1寄存器中MOV A,31H;取31H单元数据YMOV B,A;将Y送入B寄存器MUL AB;求Y2,结果在累加器中ADD A,R1;求X2+ Y2MOV 32H,A;保存结果SJMP $;暂停END 单片机原理及其应用扬州大学274.2.4 分支程序1分支程序的基本形式分支程序有三种基本形式,如图
14、4-3所示。条件满足?AYN(a)条件满足?ABNY(b)(c)A0A1AnK=0 K=1 K=nK=?图4-3 分支程序结构流程图单片机原理及其应用扬州大学28分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。2双向分支程序设计举例【例4.3】(4-12) 求符号函数的值 (p.81)( ) 1X0Y =0X=0 1X0,转 MOV A, #81H(原码); A -1 AJMP NEGTPOSI: MOV A,#1H; A 1NEGT: MOV 41H,A; 存结果 SJMP ; 暂停 END单片机原理及其应用扬
15、州大学31 ORG 1000H MOV A, 40H; 取数X CJNE A, #0,NZEAR ; 非零,转 AJMP NEGT () ;(A)=0,转存结果 NZEAR: JNB ACC.7,POSI ; (A)0,转 MOV A, #81H ; A -1 (原码) AJMP NEGT ()POSI: MOV A,#1H () ; A 1NEGT: MOV 41H,A; 存结果 SJMP ; 暂停 END单片机原理及其应用扬州大学323多向分支程序设计举例【例4.4】(4-13) 根据R2的值转向n个分支程序。(p.82)(R2)=0,转向PRG0;(R2)=1,转向PRG1; (R2)=
16、n,转向PRGN;解:利用JMP A+DPTR 指令直接给PC赋值,使程序实现转移。单片机原理及其应用扬州大学33JMP6: MOV DPTR,#TAB5 ; 转移指令表首地址 MOV A,R2 ; 取分支转移参量送A MOV B,#3 ; 乘数3送B (3字节指令)MUL AB ; 形成转移偏移量 MOV R6, A ; 暂存偏移量低8位 MOV A, B ; A偏移量高8位ADD A, DPH MOV DPH, A ; 加到DPH中MOV A, R6 ; 取回偏移量低8位JMP A+DPTR ; 分支跳转PC (A)+(DPTR) TAB5: LJMP PRG0 ; 转移指令表 LJMP
17、PRG1 LJMP PRGn单片机原理及其应用扬州大学34JMP6: MOV DPTR,#TAB5 ; 转移指令表首地址 MOV A,R2 ; 取分支转移参量送A MOV B,#3 ; 乘数3送B (3字节指令)MUL AB ; 形成转移偏移量 MOV R6, A ; 暂存偏移量低8位(?) MOV A, B ; A偏移量高8位ADD A, DPH MOV DPH, A ; 加到DPH中MOV A, R6 ; 取回偏移量低8位JMP A+DPTR ; 分支跳转PC (A)+(DPTR) TAB5: LJMP PRG0 ; 转移指令表 LJMP PRG1 LJMP PRGn单片机原理及其应用扬州
18、大学354.2.5 循环程序1循环程序的结构图4-6 循环结构程序流程图(b)直到型循环结构循环结束?循环结束?循环体循环体Y初始化修改循环参数结束部分开始N结束循环控制(计数器)(a)当型循环结构循环结束?循环结束?循环体循环体YN初始化修改循环参数结束部分开始结束循环控制(某种条件)单片机原理及其应用扬州大学36循环程序一般包括如下四个部分:(1)初始化 (2)循环体(3)循环控制 (4)结束循环程序按结构形式,有单重循环与多重循环。在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部(如图4-7所示)。 外循环中循环内循环外循环内循环外
19、循环内循环内循环(a)嵌套正确(b)嵌套正确(c)交叉不正确图4-7 多重循环示意图单片机原理及其应用扬州大学382循环程序设计举例【例4.6】(4-15)有一单字节数据块从片内RAM的50H单元开始存放,共20个单元,求其累加和(存放在R3R4中)。(p.83)解:此题设置一个计数器R2(=20)控制循环次数,每处理完一个数据,计数器减1。单片机原理及其应用扬州大学39参考源程序如下: ORG 2000H ADD1: MOV R2,#20; 计数器初值送R2 MOV R3,#0 MOV R4, #0; 部分和清零 MOV R0, #50H ; R0指向数据块首址LOOP: MOV A, R4
20、; 部分和低位 ADD A, R0 ; 加上新数据低8位 MOV R4, A INC R0 ; 修改指针至下一个单元 CLR A ADDC A, R3 ; 加进位到部分和高8位 MOV R3, A DJNZ R2, LOOP; 求和未完,继续 SJMP $; 暂停 END1.初始化初始化2.循循环环体体3.循环控制循环控制4.结束结束单片机原理及其应用扬州大学40 ORG 2000H ADD1: MOV R2,#20; 计数器初值送R2 MOV R3,#0 MOV R4, #0; 部分和清零 MOV R0, #50H ; R0指向数据块首址LOOP: MOV A, R4; 部分和低位 ADD
21、A, R0 ; 加上新数据低8位 MOV R4, A INC R0 ; 修改指针至下一个单元 CLR A ADDC A, R3 ; 加进位到部分和高8位 MOV R3, A DJNZ R2, LOOP; 求和未完,继续 SJMP $; 暂停 END单片机原理及其应用扬州大学41【例4.7】(4-16)有一字符串,依次放在内部RAM从30H开始的单元中。字符串以0AH作为结束标志,编写测试字符串长度的程序。(p.84)解:本题不能用计数器来控制循环的结束。只能采用寻找中止符的方法控制循环。 ORG 0030HST: MOV R4, #0FFH; 字符长度计数初值(?) MOV R1, #2FH;
22、 字符串指针初值NEXT: INC R4; 长度加1 INC R1; 指向下一字符 CJNE R1,#0AH,NEXT; 未到字符串结束处,转回 SJMP $ END单片机原理及其应用扬州大学42【例4.8】(4-17)50ms延时程序 (多重循环)(p.84)用12MHz晶振时,一个机器周期1us。软件用循环实现延时。DEL: MOV R7, #200; 1usDEL1: MOV R6, #125; 1usDEL2: DJNZ R6, DEL2; 2 us 1252250 us DJNZ R7, DEL1; 2us (12502)20050600 us RET; 2us延时计算: 15060
23、0250603 us单片机原理及其应用扬州大学43精确一些的程序DEL: MOV R7, #200; 1usDEL1: MOV R6, #123; 1us NOP; 1usDEL2: DJNZ R6, DEL2; 2us, (1232246 us) DJNZ R7, DEL1; 2us (246+4)20050000 us RET; 2us延时计算: 150000250003 us=50.003ms单片机原理及其应用扬州大学444.2.6 子程序 1子程序概念 完成某一专门功能的独立程序段,具有通用性。被其它程序调用。 调用子程序,即暂时中断主程序的执行而转到子程序的入口地址去执行子程序。如图
24、4-9所示。图4-9 子程序的调用与返回 RETLCALL SUBSUB: .单片机原理及其应用扬州大学45编写子程序应注意:(1)子程序第一条指令前加标号,称为入口地址。(2)注意保护所用的寄存器(一般用堆栈)。(3)返回处放RET。(4)子程序说明(入口参数,出口参数)。调用子程序应注意:(1)子程序占用的存储单元和寄存器。 (2)参数的传递(主程序到子程序)。(3)获取子程序的结果(子程序到主程序) (4)嵌套调用与递归调用。如图4-10所示。LCALL ARETRETLCALL B 图4-10 子程序的嵌套调用与返回单片机原理及其应用扬州大学472. 子程序基本结构:MAIN: ; 主
25、程序或调用程序LCALLSUB ;调子程序SUB: PUSHPSW ;保护现场PUSHA子程序主体部分POPA;恢复现场POPPSWRET;返回指令单片机原理及其应用扬州大学483. 子程序调用过程:子程序调用指令 LCALL label, 子程序可在64k空间任意放置 ACALL label,子程序首址与调用指令下一条指令地址位于同一个2k区内。 (1)子程序调用发生时,主程序暂时中止运行。硬件自动把调用指令的下一条指令地址压入堆栈。(2)硬件将子程序首址装入PC, 子程序开始运行。(3)子程序保护现场。(可选)(4)子程序主体工作。(5)子程序恢复现场。(可选)(6)RET指令将压栈的主程
26、序地址弹出,主程序从断点处重新运行。单片机原理及其应用扬州大学494子程序设计举例【例4.9】(4-3) 单字节有符号数加减法子程序 (p.78)功能: (R2) (R3) R7, 溢出时OV置位。R2, R3放有符号原码数, R7放带符号原码数MAIN: MOV R2, #0B0H ; B0H= -30H MOV R3, #40H LCALL ADD1 ; (R7)=10H MOV R2, #30H MOV R3, #40H LCALL SUB1 ; (R7)=90H (-10H) SJMP $单片机原理及其应用扬州大学50ADD1: MOVA, R3 ;加数(减数)求补码 (加法子 ;程序
27、入口) ACALL CMPT MOVR3, A MOVA, R2; 被加数(被减数)求补码 ACALL CMPT ADDA, R3; 补码加 JB OV, OVER; 溢出返回 ACALL CMPT; 结果转回原码 MOVR7, A,入口参数R2、R3,出口参数R7OVER: RETSUB1: MOVA, R3; 取减数 (减法子程序入口) CPLACC.7; 符号位取反, 减法改做加法 MOVR3, A单片机原理及其应用扬州大学51(411)(p.87)(入口参数为A,出口参数也为A)CMPT:JNBACC.7, RETURN ; (A) 0, 退出 MOV C, ACC.7 ; 保存符号M
28、OV F0, CCPLAADDA, #1 ; 求补码MOV C, F0MOV ACC.7, C ; 恢复符号RETURN:RET单片机原理及其应用扬州大学525. 子程序调用时的参数传递(1) 通过寄存器或片内通过寄存器或片内RAM传递参数传递参数见前面的例子单片机原理及其应用扬州大学53(2) 通过堆栈传递参数通过堆栈传递参数【例4-11】 在HEX单元存有两个十六进制数,试编程分别把它们 转换成ASCII码存入ASC和ASC+1单元。解:本题子程序采用查表方法完成一个十六进制数的ASCII码转换,主程序完成入口参数的传递和子程序的两次调用。ORG 1200HPUSH HEX ;入口参数压栈
29、ACALL HASC ;求低位十六进制数的ASCII码POP ASC ;出口参数存入ASC单元MOV A,HEX ;十六进制数送ASWAP A ;高位十六进制数送低4位PUSH ACC ;入口参数压栈ACALL HASC ;求高位十六进制数的ASCII码POP ASC+1 ;出口参数送ASC+1单元SJMP $ ;原地踏步,结束低 位 求低 位 求ASCII高 位 求高 位 求ASCII单片机原理及其应用扬州大学54HASC:DEC SP DEC SP ;入口参数地址送SP POP ACC ;入口参数送A ANL A,#0FH ;取出入口参数低4位 ADD A,#07H ;地址调整(修正量)
30、MOVC A,A+PC ;查相应ASCII码 2PUSH ACC ;出口参数压栈 2INC SP 2INC SP ;SP指向断点地址高8位 1RET ;返回主程序ASCTABL: DB 0,1,2,3,4,5,6,7 DB 8,9,A,B,C,D,E,F END单片机原理及其应用扬州大学551. 查表程序【例4-13】(4-5) 由A中的数(09)查平方表 (p.75)ADD A, #1 ; 加上修正量MOVC A,A+PC ;查表FIN:RETTAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81修正量计算: 修正量表首址 (MOVC指令地址1) TAB-FIN
31、 = 14.2.7 查找程序单片机原理及其应用扬州大学56【例4-14】(4-6) (p.81)(自己看) 单片机温度控制器的温度传感器输出电压与温度呈非线性关系。从A/D转换器输出的10位二进制电压值与温度值构成一个表。电压值存于R2R3中,查出的温度值也存于R2R3中。LTB2: MOVDPTR, #TAB2 ; 表首址 MOVA, R3; 取电压值低8位 CLRC RLCA; R3乘2(左移一位) MOVR3, A XCHA, R2; 取电压值高两位,暂存R3 RLCA; R2乘2+R3.7(左移一位) XCHA, R2; R3和R2交换,(A)=(R3) ADDA, DPL; (R2R
32、3)+(DPTR) DPTR MOVDPL, A MOVA, DPH ADDCA, R2 MOVDPH, A单片机原理及其应用扬州大学57 CLRA ; 偏移量0 MOVCA, A+DPTR ; 查温度值第一字节 MOVR2, A ; 置入R2 CLRA ; 偏移量0 INCDPTR ; 指向温度值下一字节 MOVCA, A+DPTR ; 查温度值第二字节 MOVR3, A ; 置入R3 RET TAB2: DW , 由于用了 MOVCA, A+DPTR指令, TAB2表格长度可大于256字节。单片机原理及其应用扬州大学58【例4-15】(4-7) 单片机巡回检测装置对16路输入进行检测,每路
33、均有最大允许值,为双字节数。编程实现查表取最大值。(p.75)路数x与其最大值y组成表格在TAB3中。x存于R2里, y放在R3R4中。TB3:MOV A, R2;取x ADD A, R2;x乘2MOV R3, A; 暂存变址值ADD A, #6;加查表修正量MOVC A, A+PC ;查高位字节 1 XCH A, R3;存最大值高位并取回变址值 2 ADD A, #3;加查表修正量 1 MOVC A, A+PC ;查低位字节 1 MOV R4, A;存最大值低位 1 RETTAB3:DW 1520, 3721, 42645, 7580DW , 单片机原理及其应用扬州大学592. 关键字查找程
34、序在表中查指定的数据,对无序表采用顺序查找法,有序表可用对分查找法。【例4-16】(4-8) 从50个字节的表中查找关键字H,查到该字,将其地址送 R2R3; 否则R2R3清零。 (p.77) ORG1000H MOV40H, #H; 置关键字 MOVR1, #50; 查找次数 MOVA, #14H ; 修正量 MOVDPTR, #TAB4 ; 置表首址(假设关键字地址)LOOP: PUSHA; 保护偏移量 MOVCA, A+PC; 查表 3 CJNEA, 40H, LOOP1 ; 与关键字比较,未找到转 2 MOVR2, DPH; 找到,保存其地址 2 MOVR3, DPL DONE:1 R
35、ET单片机原理及其应用扬州大学60LOOP1: 2POP A; 恢复偏移量 1INC A; 调整表内偏移量 1INC DPTR; 关键字地址调整 2DJNZ R1, LOOP ; 未查完,继续 2MOV R2, #0; 50个数已查完,没查到 2MOV R3, #0; 地址单元置零 2AJMP DONE; 返回TAB4:DB , END单片机原理及其应用扬州大学613. 数据极值查找程序在给定的数据区中找出最大(最小)值【例4-17】(4-9) 在片内RAM存放的一批数据中,找出最大值。数据长度n放在R2中,R0里是数据块首地址,找出的最大值放在数据块的首地址。(p.78)单片机原理及其应用扬
36、州大学62 MOVR2, #n; n是数据块长度 MOVA, R0; 取数据块首址 MOVR1, A; 传给R1作为数据指针 DECR2; 长度减一,仅比较n-1次 MOVA, R1; 从数据块取第一个数LOOP: MOVR3, A; 看作当前最大值存R3 INC R1; 调整数据指针 CLRC SUBBA, R1 ; 当前最大值与下一个数比较 JNCLOOP1; 当前最大值还是最大值 MOVA, R1; 交换当前最大值 SJMPLOOP2LOOP1: MOVA, R3; 恢复当前最大值LOOP2: DJNZR2, LOOP; 没比较完,继续 MOVR0, A; 存最大值 RET单片机原理及其
37、应用扬州大学634. 数据排序程序数据排序是将无序的n个数据按由小到大(升序)或由大到小(降序)排列。 常用的排序算法是冒泡法:相邻两个数比较,若与所要求的顺序不同,就交换两个数。 从前向后进行一轮排序,则最大数就到了最后。重复这样的过程(n-1)次,数据就有序排列了。 看一下7个数据 6,4,1,2,5,7,3的排序单片机原理及其应用扬州大学64单片机原理及其应用扬州大学65 理论上对n个数用冒泡法排序,应进行(n-1)次冒泡才能完成。实际上有时不到(n-1)次排序就已完成。 看排序是否完成可通过观察是否还有数据交换来判定。若无数据交换则排序完成。通常在程序中用数据交换志来反映排序的完成。单
38、片机原理及其应用扬州大学66 【例4-18】(4-10) 对一批无符号数进行升序排序,R0作首地址指针,R2放字节数。(p79)单片机原理及其应用扬州大学67SORT: MOVA, R0; 获得数据块首地址 MOVR1, A; 实际用R1作数据指针 MOVA, R2; 取字节数 MOVR5, A; 实际用R5作计数器 CLRF0; 清交换标志 DECR5; 字节数减一 MOVA, R1; 取第一个数LOOP: MOVR3, A; 暂存 INCR1; 指向下一个数 CLRC; 为比较两数,清C MOVA, R1; 取下一个数 SUBBA, R3 ; 两数比较单片机原理及其应用扬州大学68 JNC
39、LOOP1; 后一个数大,不交换 SETBF0; 置位交换标志(交换发生) MOVA, R3; 恢复暂存的数 XCHA, R1; 前一个数送至后一个数中 DECR1 XCHA, R1;后一个数送至前一个数中 INCR1; 调回指针LOOP1: MOVA, R1; 再取一个新数 DJNZR5, LOOP; 一轮排序未完,继续 JBF0, SORT ; 有标志置位,做新一轮排序 RET;否则,结束 END单片机原理及其应用扬州大学69 计算机内部运算采用二进制数运算,在输入输出中用十进制数(BCD码)方便。在处理字符时,用ASCII码表示。因此,在应用程序设计中,涉及到许多的码制转换问题。1. 二
40、进制到BCD码转换【例4-19】(4-18) 单字节二进制数转换为BCD码 入口:单字节数在A中;出口:百位在R3中,十位和个位在A中。算法:将二进制数分别除以100,10取商得百位,十位,余数是个位。4.2.8 码制转换程序单片机原理及其应用扬州大学70BINBCD1:MOV B, #100; 除数100DIVAB; 除以100,得百位数MOV R3, A; 存百位数,余数在B中XCHA, B; 余数转到A中MOV B, #10; 除数10DIVAB ; 除以10,得十位(A)、个位(B)SWAP A; 十位数交换到A的高四位ADDA, B;加上个位RETEND单片机原理及其应用扬州大学71
41、2. BCD码到二进制数的转换【例4-21】(4-20) 4位BCD码到二进制数的转换 (p.96)入口:BCD码a3 a2 a1 a0 分别放在50H53H单元中。出口:转换后的数放在R3R4中算法: BCD码按权展开,直接计算。关键是计算 即 (R3R4)*10+(R0)3232 1 03210232103210101010(1010) 10101010a a a aaaaaaaaaaaaa110iiaa单片机原理及其应用扬州大学72高高单片机原理及其应用扬州大学73IDTB: MOVR0, #50H; 指向BCD数千位 MOVR2, #3; 计数器初值,重复三遍 MOVR3, #0; 结
42、果单元高位清零 MOVA, R0; 取BCD数千位 MOVR4, A; 存于R4LOOP: MOVA, R4 MOVB, #10 MULAB; R410 MOVR4, A; (1)存(10R4)的低8位至R4单片机原理及其应用扬州大学74 MOVA, #10; 乘数10 XCHA, B; 乘数10与(R410)高8位交换 XCHA, R3 ; 取R3到A, (2)存(R410)高8位到R3 MULAB; (3)R310 ADDA, R3; (4)加上(R410)高8位 XCHA, R4; 暂存于R4, 同时取R4原内容 INCR0; 指向下一位BCD数 ai-1 ADDA, R0; (5)加上
43、该数 XCHA, R4 ; 存入R4, 并取回暂存R4的内容 ADDCA, #0; (6)加上前面加法产生的进位 MOVR3, A; 存入R3 DJNZR2, LOOP; 未完,转回 RET END单片机原理及其应用扬州大学753. 二进制数与ASCII码之间的转换【例4-22】(4-21) 4位二进制数转换为ASCII码 (p.97)入口: 4位二进制数放在R2中。出口:ASCII也在R2中。 BTOASC:MOV A, R2; 取二进制数ANLA, #0FH; 屏蔽高4位ADDA, #0F6H; 分离09 与AFJNCLOOP0; 是09 ADDA, #7; 是AF, 多加个7LOOP0:
44、ADDA, #3AH; 30H-F6H=3AHMOV R2, ARETEND单片机原理及其应用扬州大学76【例4-24】(4-23) 一位十六进制数的ASCII转4位二进制数 (p.98)入口:ASCII码存放于 R2。 出口:结果仍在R2中。ASCTB: PUSHPSW PUSHA MOVA, R2 ; 取数 CLRC SUBBA, #30H ; 先假定是小于10的数 MOVR2, A ;暂存于R2 SUBBA, #0AH ; 判是否小于10 JCSB10 ; 是 XCHA,R2 ; 大于等于10, 恢复减数。 SUBBA, #07H ; 再减7 MOVR2, ASB10: POPA POP
45、PSW RET END单片机原理及其应用扬州大学77一、一、 采用转移指令表采用转移指令表【例4-25】 根据R的内容转向各个操作程序。即当(R3)=0,转向OPR0(R3)=1,转向OPRl(R3)=n,转向OPRn解:MOV A,R3RLA ;分支序号值乘2MOV DPTR ,#BRTABL ;转移指令表首址JMP A+DPTR ;转向形成的散转地址BRTABL:AJMP OPR0 ;转移指令表AJMP OPR1AJMP OPRn散转程序散转程序4.2.9 程序举例单片机原理及其应用扬州大学78二、二、 采用地址偏移量表采用地址偏移量表【例4-26】 编出能按R6的内容转向3个分支程序的程
46、序。其对应关系如下:OPRD0:操作程序0 地址OPRD1:操作程序1 地址OPRD2:操作程序2 地址解:程序清单如下: MOV A,R6 MOV DPTR,#TAB3 ;指向地址偏移量表首址 MOVC A,A+DPTR ;散转点入口地址在A中 JMP A+DPTR ;转向相应的操作程序入口TAB3: DB OPRD0-TAB3 ;地址偏移量表 DB OPRDl-TAB3 DB OPRD2-TAB3 单片机原理及其应用扬州大学79三、三、 采用采用“RET”指令的散转程序指令的散转程序 【例4-27】 根据R6的内容转向各个操作程序。设转向地址分别为OPRD0,OPRD1, OPRDn排成转
47、向地址表。TAB3: DW OPRD0 DW OPRD1 DW OPRDn解:程序清单如下: MOV DPTR,#TAB3 ; 指向转移地址表 MOV A,R6 ADD A,R6 ; R62 作为查表偏移量 JNC NAND INC DPH ; 超过255,指针高位加1单片机原理及其应用扬州大学80NAND: MOV R7,A ; 暂存偏移量于R7 MOVC A,A+DPTR ; 取转向地址高8位 XCH A,R7 ; 偏移量与地址高位交换 INC A ; 偏移量加1 MOVC A,A+DPTR ; 取转向地址低8位 PUSH A ; 转向地址低8位入栈 MOV A,R7 ; 取回地址高8位
48、PUSH A ; 地址高8位入栈 RET ; 转向操作程序TAB3: DW OPRD0 ; 转向地址表 DW OPRDl DW OPRDn单片机原理及其应用扬州大学81I/OI/O端口控制程序端口控制程序 【例4-28】 编出能模拟右图(b) 电路的程序。K3为低电平时,执行逻辑功能。 D BIT 00H E BIT 01H G BIT 02H ORG 0200HLOOP1:ORL P1,#08H ;准备 P1.3 输入LOOP2:MOV C,P1.3 ;检测K3状态 JC LOOP2 ;若未准备好(K3断),转LOOP2 ORL P1,#03H ;若准备好,准备输入K0,K1状态 MOV C
49、,P1.0 ;输入K0状态 MOV D,C ;送入D MOV C,P1.1 ;输入K1状态 MOV E,C ;送入EGF+DEVCC8031P1.0P1.1P1.2P1.3K0K1K3DEF(a) 8031的接线(b) 被模拟电路单片机原理及其应用扬州大学82 ANL C,D ;DE送C MOV G,C ;送入G MOV C,E ORL C,D ;DE送C ANL C,/G ;(DE)/(DE) MOV P1.2,C ;输出结果 SJMP LOOP1 ;准备下次模拟 ENDGF+DEVCC8031P1.0P1.1P1.2P1.3K0K1K3DEF(a) 8031的接线(b) 被模拟电路单片机原
50、理及其应用扬州大学83多字节数乘法多字节数乘法CHENFA: MOV A,R0 MOV B,R1 MUL AB ;(R1)*(R0) MOV R3,A ;积的低位送到R3 MOV R4,B ;积的高位送到R4 MOV A,R0 MOV B,R2 MUL AB ;(R2)*(R0) ADD A,R4 ;(R1)*(R0)的高位加(R2)*(R0)的低位 MOV R4,A ;结果送R4,进位在CY中 MOV A,B ADDC A,#00H ;(R2)*(R0)的高位加低位来的进位 MOV R5,A ;结果送R5 RET(R5R4R3)(R2R1)*(R0)单片机原理及其应用扬州大学84综合应用举例
51、单片机温度测量装置数据处理: 温度传感器: 输入:0100, 输出:05V 8位A/D转换器:输入:05V, 输出:0255 已知A/D转换结果存放在30H, 要求将对应的温度值的BCD码存放在31H, 32H, 33H(高位在低地址)。单片机原理及其应用扬州大学85解:1.标度变换系数k=100/255=0.39216 (小数运算不方便)2.实际标度变换系数 用先扩大系数N倍,再对结果缩小N倍的方法避免浮点运算。k=65536k 6465H (二进制数k的小数点右移16位)3.用双字节乘单字节乘法作标度变换 (R2R1)*(R0) R5R4R34.取结果(温度值)结果的小数点左移16位,温度值在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新型城镇公共服务数字化普惠供给方案
- 旅游景点信息管理系统领导面试指南
- 护理不良事件预防的持续教育
- DB35-T 2295-2026 海峡两岸共通 旅游民宿服务规范
- 项目管理专业就业前景
- 就业定义与课程解析
- 2025年智能家居交互界面设计的用户体验优化策略
- 零售业财务管理创新与实践案例
- 联想工程师招聘面试全解析
- 急诊急救医学的新进展与挑战
- 《路遥人生》读书分享课件
- GB/T 44111-2024电化学储能电站检修试验规程
- 培养高中生主动学习意识
- 信息论与编码期末考试试题
- (高清版)DZT 0004-2015 重力调查技术规范(150 000)
- 营销负责人的优势和劣势
- 光纤传感监测技术
- 加油站防雷应急预案
- 换季衣物收纳整理课件
- 人教版八年级数学下册 (勾股定理)课件
- 配电线路及设备巡视
评论
0/150
提交评论