《单片机原理应用7》由会员分享,可在线阅读,更多相关《单片机原理应用7(49页珍藏版)》请在金锄头文库上搜索。
1、单片机原理及应用,第四章 MCS-51汇编程序设计,4.1 汇编语言概述,一、汇编语言的特点及其语句格式 1、汇编语言的特点 程序效率高,占用内存小 直接控制硬件,对硬件有相当深入的了解 助记符与机器指令相对应,不能移植,缺乏通用性 2、语句格式: 标号:操作码 操作数 ;注释,4.1 汇编语言概述,一、汇编语言的特点及其语句格式 2、语句格式 标号:操作码 操作数 ;注释 LOOP: MOVA,R0;A(R0) (1)标号: 18个ASCII字符组成,第1个为字母 不能使用汇编语言已定义的助记符、伪指令、SFR符号 后有冒号 只能定义一次 一条语句可有标号,可无标号,4.1 汇编语言概述,二
2、、语句格式: 标号:操作码 操作数 ;注释 LOOP: MOV A,R0 ;A(R0) (1)标号: (2)操作码:不可缺少 (3)操作数: 与操作码之间以空格分隔 两个操作数之间以逗号分隔 (4)注释: 以分号开头,注释长度不限,内容不限。,4.1 汇编语言概述,二、汇编语言程序设计步骤 1、编辑源程序 EDIT等编辑软件编辑,以.ASM存盘。 2、汇编(编译):手工汇编、交叉汇编、机器汇编 3、传送 4、运行、调试 5、固化EPROM,4.1 汇编语言概述,三、MCS-51伪指令介绍 1、什么是伪指令: 汇编语言源程序 机器语言程序 伪指令是程序员发给汇编程序的命令。,汇编程序,伪指令,4
3、.1 汇编语言概述,三、MCS-51伪指令介绍 2、伪指令种类 (1)ORG:汇编起始地址命令 ORG 8000H STRAT: MOVA,#00H (2)END:汇编结束命令 END后的程序,汇编程序不予处理,4.1 汇编语言概述,三、MCS-51伪指令介绍 2、伪指令种类 (3)EQU:字节赋值命令 格式:字符名称 EQU 赋值项 如: ABC EQU 20H 赋值后的字符,既可以作地址用,也可以作立即数用。 如:MOV A,ABC MOV A,#ABC,4.1 汇编语言概述,三、MCS-51伪指令介绍 2、伪指令种类 (4)BIT:位赋值命令 格式:字符名称 BIT 赋值项 如: AQ
4、BIT P1.0 赋值后的字符,可以作位地址用 如: CLR AQ 或 MOV C,AQ,4.1 汇编语言概述,三、MCS-51伪指令介绍 2、伪指令种类 (5)DB:定义字节命令 功能:在程序存储器的连续单元定义字节数据 格式:标号:DB 8位数表 “8位数表”可以是常数、字符串 如: DB 00H,0FEH,2,-7, DB “howARE you”,4.1 汇编语言概述,三、MCS-51伪指令介绍 2、伪指令种类 (5)DB:定义数据字节命令 (6)DW:定义数据字命令 功能:在程序存储器的连续单元定义16位的数据字 格式:标号:DW 16位数表 “16位数表”可以是常数、字符串;高八位
5、存放在低地址,低八位存放在高地址 如: DB 100H,1ACH,814, DB “AA”,“A”,4.1 汇编语言概述,三、MCS-51伪指令介绍 2、伪指令种类 (7)DS:定义存储区命令 功能:在程序存储器的指定地址开始,保留指定数目的字节单元,供程序运行使用。 格式:标号:DS 16位数表 如: ADDRTABL:DS 20 或: ORG 8100H DS 20,4.2 MCS-51汇编程序基本结构,一、顺序结构 二、循环结构 三、分支结构 四、子程序调用,4.2 MCS-51汇编程序基本结构,MOV P1,#00H MOV P1,#0FFH MOV P1,#1CH,4.2 MCS-5
6、1汇编程序基本结构,一、顺序结构 按照程序语句的先后次序执行,没有流程的转移,MOV P1,#00H MOV P1,#0FFH MOV P1,#1CH,4.2 MCS-51汇编程序基本结构, MOV A,#00H MOVR6,#10 MOVR0,#20H AAA: MOVR0,A INCR0 DJNZ R6,AAA SJMP $,4.2 MCS-51汇编程序基本结构,二、循环结构 当条件满足时执行某一循环体, MOV A,#00H MOVR6,#10 MOVR0,#20H AAA: MOVR0,A INCR0 DJNZ R6,AAA SJMP $,4.2 MCS-51汇编程序基本结构,MOV
7、A,B CJNE A,#80H,$+3 JNC LOOP INC R0 ;分支1 SJMP $ ABC:INC R1 ;分支2 SJMP $,4.2 MCS-51汇编程序基本结构,三、分支结构,MOV A,B CJNE A,#80H,$+3 JNC LOOP INC R0 ;分支1 SJMP $ ABC:INC R1 ;分支2 SJMP $,4.2 MCS-51汇编程序基本结构,4.2 MCS-51汇编程序基本结构,三、分支结构,4.2 MCS-51汇编程序基本结构,四、子程序调用 把重复的程序段编写为一个子程序,通过主程序调用它,4.3 MCS-51汇编程序设计举例(板书),一、无符号数加减
8、法程序设计 二、存储器之间的数据传送程序设计 三、查表程序设计 四、数制转换程序设计 五、软件定时程序设计 六、极值查找程序设计 七、数据检索程序设计 八、多路散转程序设计,4.3 MCS-51汇编程序设计举例,一、无符号数加减法程序设计 1、多个单字节数的加法 例:三个单字节无符号数相加,设三数分别存放在片内RAM21H开始的连续单元中,求三数之和并存入R1、R2寄存器中,R1为高字节。 思考: 顺序结构编程 循环结构编程(和子程序调用结构) 推广到N个字节,一、无符号数加减法程序设计,2、多字节无符号数的加法 例:两个三字节无符号数相加,设两数分别存放在片内RAM30H和40H开始的单元中
9、,低字节在低地址中,求两数之和并存入40H开始的单元中,进位存放在位寻址区00H位中。 思考: 顺序结构编程 循环结构编程(和子程序调用结构) 推广到N字节 推广到任意存储单元 进位存放在某一字节单元 多字节减法,4.3 MCS-51汇编程序设计举例,二、存储器之间的数据传送程序设计 1、各种存储器之间的相互传送: 内部RAM外部RAM、外部RAM内部RAM、 ROM 内部RAM、 ROM 外部RAM、 外RAM 外部RAM 例:将内部RAM30H地址开始的100个数据传送到外部RAM2000H单元开始的区域。 2、思考: 数据个数存放在某一字节单元(传送结束条件) 遇到某一特定的数字传送结束
10、 存储单元为符号地址 P97-1、2,4.3 MCS-51汇编程序设计举例,三、查表程序设计 例1、编写查平方表程序,要查表的数据存放在R7中,其范围为015。 思考: 查立方表,程序如何修改,使用单字节的表最大可查的立方数是多少?,三、查表程序设计,例2:使用8051的P1口作为段控信号驱动共阳LED数码管,硬件连接如图。 (1)写出显示数字“0”和“1”的字型代码,填入下面字型代码表。 (2)编程实现将8051内部RAM的60H单元内容(在00H-09H之间)显示在数码管上。00H-09H的共阳字形代码如下表所示。 硬件电路变化,程序如何修改?,4.3 MCS-51汇编程序设计举例,四、数
11、制、码制转换程序设计 1、十六进制数转换为ASCII码 例1:内部RAM的HEX单元有2位16进制数,请将其转换为ASCII码,存放在ASC和ASC+1单元中(高位ASCII码存放在ASC+1单元)。 思考: 0F的ASCII码值 如何建立表格(存放的存储器种类、地址定义) 编程 除查表之外,还有什么办法实现该转换。,例1:,MOVDPTR,#ASCTAB MOVA,HEX ANLA,#0FH MOVCA,A+DPTR MOVASC,A MOVA,HEX ANLA,#0F0H SWAPA MOVCA,A+DPTR MOVASC+1,A SJMP$,ASCTAB: DB 30H,31H,32H,
12、33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H,4.3 MCS-51汇编程序设计举例,四、数制、码制转换程序设计 2、ASCII码转换为十六进制数 例2:将外部RAM的30H3FH单元的ASCII码依次转换为16进制数,存放在内部RAM的60H67H单元中。(两字节的ASCII码转换一字节的16进制数)。 思考:,4.3 MCS-51汇编程序设计举例,四、数制、码制转换程序设计 3、十六进制数转换为BCD码 例3:把累加器A中的8位无符号数转换为3位BCD数,百位存放于21H,十位数存放于22H,个位数存放于23H。 思
13、考: 转换的方法:除100、10等 若将十位数和个位数合并,存放在20H,应如何编程?,例3:,MOVB,#10 DIVAB MOV23H,B MOVB,#10 DIVAB MOV 22H,B MOV 21H,A SJMP$,十、个位数合并存放于20H MOVB,#10 DIVAB MOV20H,B MOVB,#10 DIVAB XCHA,B SWAPA;十位 ORLA,20H ;十、个位 MOV20H,A XCHA,B MOV 21H,A SJMP$,3、十六进制数转换为BCD码,任何一个十进制数的二进制表达式为: B=bm_12m-1+b12+b0,例如:用二进制0111,1101(027
14、+126+125+124+021+120)=125 可以表示十进制数125,其中bi=0或1,是二进制数中各位上的值,3、十六进制数转换为BCD码,上式可改写为: B= bm_12m-1+ bm_22m-2+ bm_32m-3+b12+b0 =02m+bm_12m-1+ bm_22m-2+ bm_32m-3+b12+b0 =(02+ bm_1)2m-1+ bm_22m-2+ bm_32m-3+b12+b0 =(02+ bm_1)2+ bm_2)2m-2+ bm_32m-3+b12+b0 =(02+ bm_1)2+ bm_2)2+ bm_3)2+b1)2+b0 可以表示为: B=0,i=m-1
15、, B=B2+bi i=i-1 ,结束条件:i 0,4.3 MCS-51汇编程序设计举例,五、软件定时程序设计 1、单循环定时 指令周期 MOV R5,#TIME ;1 LOOP:NOP;1 NOP;1 DJNZ R5,LOOP;2 总延时:(1+4TIME)机器周期 循环体执行次数与#TIME有关,何时最多? 若fosc=6MHz,则定时范围为:102050S,P9899,4.3 MCS-51汇编程序设计举例,五、软件定时程序设计 1、单循环定时 2、多循环定时 总延时: 1+(1+4TIME1)+2 TIME2+1 机器周期 若fosc=6MHz,则定时范围为:16525828S,MOV R5,#TIME2 LOOP2:MOV R4,#TIME1 LOOP1:NOP NOP DJNZ R4,LOOP1 DJNZ R5,LOOP2 RET,4.3 MCS-51汇编程序设计举例,五、软件定时程序设计 3、调整定时时间 调整循环体制性次数 在循环程序中增减指令: 4、以一个基本延时满足不同定时要求:,MOV R7,#05H LOOP: LCALL DELAY DJNZ R7,LOOP 。 DELAY:MOV R5,#TIME2 LOOP2:MOV R4,#TIME1 LOOP1:NOP NOP DJNZ R4,LOOP1 DJNZ R5,LOOP2