《最新单片机汇编语言序程设计PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新单片机汇编语言序程设计PPT课件.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2汇编语言程序设计汇编语言程序设计 通过前面的学习,我们已经了解了单片机内部的通过前面的学习,我们已经了解了单片机内部的结构,结构,MCS-51MCS-51指令系统的寻址方式、各类指令的格式指令系统的寻址方式、各类指令的格式及功能。及功能。 下面我们就是要如何利用下面我们就是要如何利用MCS-51MCS-51的指令系统,来的指令系统,来编写高效、充分利用其特点的程序。编写高效、充分利用其特点的程序。94.1.4 4.1.4 汇编语言的规范汇编语言的规范汇编语言源程序由以下两种指令构成:汇编语言源程序由以下两种指令构成:汇编语句(指令语句)汇编语句(指令语句)伪指令(指示性语句)伪指令(指示性语
2、句)汇编语句的格式:汇编语句的格式: 标号:标号: 操作码操作码操作数操作数;注释;注释数据表示形式:数据表示形式: 二进制(二进制(B B)、十六进制)、十六进制(H)(H)、十进制、十进制(D(D或省略或省略) )、 ASCIIASCII码(以单引号标识)码(以单引号标识) 10 控制汇编用的特殊指令,这些指令不属于指控制汇编用的特殊指令,这些指令不属于指令系统,即不会产生机器代码。令系统,即不会产生机器代码。 通过使用伪指令向汇编程序发出指示信息,通过使用伪指令向汇编程序发出指示信息,告诉它如何完成汇编工作。告诉它如何完成汇编工作。 伪指令具有控制汇编程序的输入输出、定义伪指令具有控制汇
3、编程序的输入输出、定义数据和符号、条件汇编、分配存储空间等功能。数据和符号、条件汇编、分配存储空间等功能。伪指令伪指令11常用的伪指令常用的伪指令v ORG ORG 定位目的程序的起始地址。定位目的程序的起始地址。 格式:格式:ORG ORG 表达式表达式 如:如:ORG 0000HORG 0000H 注:表达式必须为注:表达式必须为1616位地址值。位地址值。v ENDEND 汇编语言程序结束伪指令。汇编语言程序结束伪指令。 注:一定放在程序末尾!注:一定放在程序末尾!12v EQUEQU 赋值伪指令。赋值伪指令。 格式:格式: 字符名称字符名称 EQUEQU 数值或汇编符号数值或汇编符号
4、例:例: AAAAEQUEQU30H30HK1K1EQUEQU40H40HMOV AMOV A,AAAA; (30H(30H)AAMOV AMOV A,K1K1;(;(40H40H)AA常用的伪指令常用的伪指令13v DBDB(D Defineefine B Byteyte) 从指定单元开始定义(存储)若干个字节的从指定单元开始定义(存储)若干个字节的数据或数据或ASCIIASCII码字符,常用于定义数据常数表。码字符,常用于定义数据常数表。格式:格式:DB DB 字节常数或字节常数或ASCIIASCII字符字符例例: :ORGORG 1000H 1000HDBDB34H34H,0DEH0DE
5、H,“A”A”,“B”B”DBDB0AH0AH,0BH0BH,2020常用的伪指令常用的伪指令14常用的伪指令常用的伪指令v BITBIT 位地址符号指令。位地址符号指令。 把位地址赋于规定的字符名称。把位地址赋于规定的字符名称。 格式格式:字符名称字符名称BITBIT位地址位地址例:例: GPGPBITBITP1.1P1.1QQQQBITBITP3.2P3.2154.2 4.2 汇编语言程序编辑和汇编汇编语言程序编辑和汇编1. 1. 编辑(源程序,以编辑(源程序,以.ASM.ASM扩展名存盘);扩展名存盘);2. 2. 汇编(手工或机器汇编);汇编(手工或机器汇编);如:如:MOV A,#8
6、8H;MOV A,#88H;机器码机器码74 88 74 88 MOV 35H MOV 35H,58H58H;机器码;机器码75 35 5875 35 58又如:又如: 地址地址 目标码目标码 源程序源程序 ORG 1000HORG 1000H 1000H 74 7F MOV A,#7FH 1000H 74 7F MOV A,#7FH 1002H 79 44 MOV R1,#44H 1002H 79 44 MOV R1,#44H END END164.3 4.3 程序设计基础与举例程序设计基础与举例4.3.1 4.3.1 顺序结构程序顺序结构程序org 1000horg 1000hstart:
7、mov dptr,#2000hstart:mov dptr,#2000h mov a,20h mov a,20h movc a,a+dptr movc a,a+dptr mov 21h,a mov 21h,a sjmp $ sjmp $org 2000horg 2000htable:db 0,1,4,9,16,25table:db 0,1,4,9,16,25 end end例1:变量存变量存在内部在内部RAMRAM的的20H20H单元中,单元中,其取值范围:其取值范围:0 05 5,编成,编成,查表法求其查表法求其平方值平方值17开始表格首地址送DPTR变量送A(20H) A查平方表(A+DP
8、TR) A结束结果送21H单元:A 21H18例例2 2:将:将20H20H单元的压缩单元的压缩(Packed Packed )BCDBCD码拆成两个码拆成两个ACSIIACSII码存入码存入21H21H、22H22H单元。单元。BCD 0 1 2. 9ASCII 30H 31H 32H . 39H19方法1(20H)A10HBA/B,A中为高中为高4位位BCD码,码,B中为低中为低4位位BCD码码B+30HBB(21H)A+30HAA(22H)开始结束20周期数周期数 源程序源程序 ORG 2000H ORG 2000HMOV AMOV A,20H20HMOV BMOV B,#10H#10H
9、DIV ABDIV ABORL BORL B,#30H#30HMOV 21HMOV 21H,B BORL AORL A,#30H#30HMOV 22HMOV 22H,A AENDEND124221113;除以;除以10H10H;高;高4 4位位BCDBCD码转换位码转换位ASCIIASCII码码;低;低4 4位位BCDBCD码转换位码转换位ASCIIASCII码码210 (21H) (20H)AA与(21H)的低4位交换(21H)+30H(21H)A的高低半字节交换A+30HAA(22H)开始结束方法2:22 ORG 2000H MOV R0,#21H MOV R0,#0 MOV A,20H
10、XCHD A,R0 ORL 21H,#30H SWAP A ORL A,#30H MOV 22H,A END;清;清21H21H单元单元;低;低4 4位位BCDBCD码送码送21H21H单元,单元,;低;低4 4位位BCDBCD码转换位码转换位ASCIIASCII码码;高;高4 4位位BCDBCD码转换位码转换位ASCIIASCII码码111121119周期数周期数源程序源程序234.3.2 4.3.2 分支程序分支程序 分支程序可根据要求分支程序可根据要求无条件无条件或或条件地条件地改变程序执行流改变程序执行流向。编写分支程序主要在于正确使用向。编写分支程序主要在于正确使用转移指令转移指令。
11、分支程序。分支程序有:单分支结构、双分支结构、多分支结构(散转)有:单分支结构、双分支结构、多分支结构(散转)条件成立?下条指令程序段A单分支结构YN条件成立?程序段AYN程序段A双分支结构244.3.2 4.3.2 分支程序分支程序 分支程序可根据要求无条件或条件地改变程序执行流分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)有:单分支结构、双分支结构、多分支结构(散转)K=?程序段nn0程序段1多分支结构多分支结构程序段0125例例1 1:设变量:
12、设变量x x以补码形式存放在片内以补码形式存放在片内RAM 30HRAM 30H单单元中,变量元中,变量y y与与x x的关系是:的关系是:编程根据编程根据x x的值求的值求y y值并放回原单元。值并放回原单元。0, 50,200,xxxHxxy26A=?y=x+5y=x+5000y=20Hy=20Hy=xy=x0 0取取x x 即(即(30h30h) A A开始开始存存y y 即即y 20hy 20h结束结束27 ORG 1000HSTART:MOV A,30H JZ NEXT ;x=0,转移 ANL A,#80H ;保留符号位 JZ ED ;x0,转移 MOV A,#05H ;x0,不转移
13、 ADD A,30H MOV 30H,A SJMP ED NEXT:MOV 30H,#20H ED:SJMP $28STARTSTART:MOV DPTRMOV DPTR,#TAB#TAB MOV A MOV A,R7R7 ADD A,R7 ADD A,R7 ;R7R72 2A A MOV R3,A ; MOV R3,A ; 暂存暂存R3R3 MOVC A,A+DPTR MOVC A,A+DPTR ;取高位地址;取高位地址 XCH A XCH A ,R3R3 INC A INC A MOVC A MOVC A,A+DPTR A+DPTR ;取低位地址取低位地址 MOV DPLMOV DPL,A
14、 A MOV DPH MOV DPH,R3 R3 ;转移地址送入;转移地址送入DPTRDPTR CLR A CLR A JMP A+DPTR JMP A+DPTR TAB: DW P0 TAB: DW P0 DW P1 DW P1 DW PN DW PN例例2 2 :根据根据R7R7的内容,转至对应的分支程序。的内容,转至对应的分支程序。设设R7R7的内容为的内容为0 0N N,对应的处理程序地址分别,对应的处理程序地址分别为为P0P0P7P7P0高位P0低位TABP1高位P1低位TAB+2294.3.3 4.3.3 循环程序循环程序循环程序一般由: 初始化部分 循环体部分-处理部分、修改部分
15、、控制部分 结束部分其结构一般有两种: 先进入处理部分,再控制循环 至少执行一次循环体 先控制循环,再进入处理部分 循环体是否执行,取决于判断结果。30开始设置循环初值循环处理循环修改结束处理结束循环结束?开始设置循环初值循环处理循环修改结束处理结束循环结束?NYYN31循环控制的一般方法:循环控制的一般方法:v 循环次数已知循环次数已知 利用循环次数控制利用循环次数控制v 循环次数未知循环次数未知 利用关键字控制利用关键字控制32例4-3-6 : 50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。DEL: MOV R7,#200 ;1sDEL1:MOV R6,#123 ;1s
16、NOP ;1s DJNZ R6,$ ;2s DJNZ R7,DEL1 ;2s RET ;2s延时时间:t=1+200(1+1+2*123)+2+2 50000us=50ms334.3.4 4.3.4 子程序问题子程序问题子程序设计时注意事项:子程序设计时注意事项:1. 1. 给子程序赋一个名字。实际为入口地址代号。给子程序赋一个名字。实际为入口地址代号。2. 2. 要能正确传递参数:要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式)(寄存器、存储
17、器、堆栈方式)3. 3. 保护与恢复现场:保护与恢复现场: 保护现场:压栈指令保护现场:压栈指令PUSHPUSH 恢复现场:弹出指令恢复现场:弹出指令POPPOP4. 4. 子程序可以嵌套子程序可以嵌套34例例4-3-9 4-3-9 :利用查表法求平方和:利用查表法求平方和 ,设,设a a、b b、c c分分别存于内部别存于内部RAMRAM的的DADA、DBDB、DCDC三个单元中。三个单元中。 MOV A,DA ;取a ACALL SQR ;调用查表子程序 MOV R1,A ;a的平方暂存R1中 MOV A,DB ;取b ACALL SQR ;调用查表子程序 ADD A,R1 ;求出平方和暂
18、存阿A中 MOV DC,A ;结果存于DC 中 SJMP $SQR:MOV DPTR,#TAB ;子程序 MOVC A,A+DPTR RETTAB: DB 0,1,4,9,16,25,36,49,64,81 END 22bac利用利用累加累加器或器或寄存寄存器传器传递参递参数数354.3.5 4.3.5 码型转换程序的设计码型转换程序的设计一、十六进制数与ASCCII码之间的转换 (对比BCD与ASCCI之间的转换4.3.1中例2)表4-1 十六进制数与ASCII码之间的关系十 六进制数十 六进制数十 六进制数十 六进制数 0 30H 4 34H 8 38H C 43H 1 31H 5 35H
19、 9 39H D 44H 2 32H 6 36H A 41H E 45H 3 33H 7 37H B 42H F 46H36例4-3-15 将一位十六进制数转换成ASCII码,设十六进制数存放在R0中,转换后的ASCII码放在R2中。HTASC: MOV A, R0 ;取十六进制数 PUSH ACC ;保护 CLR C ; SUBB A,#0AH ;判断是否大于十 POP ACC ; JC LOOP ;小于十,直接加30H ADD A,#07H ;大于十,加37H LOOP:ADD A,#30H MOV R2,A RET37例4-3-16 利用外部中断计数每十次使LED灯“明”“暗”变化一次。
20、INTO0: PUSH Acc; ;现场保护 PUSH PSW INC 38H MOV A,38H CJNE A,#0AH, INTFW CPL P2.5;取反P2.5 口使LED灯变化 MOV 38H,#00H INTFW: POP PSW ;恢复现场 POP Acc RETI ;中断返回38二、键盘矩阵的扫描解读 附图 2 键盘矩阵电路结构图VCCMCU单片机Pm.0Pm.1Pm.2Pm.3Pm.4Pn.0Pn.1Pn.2Pn.3Pn.412346789111213141617181921222324510152025Pm.xPn.yPm.5262728293039开 始键盘矩阵输出线扫描
21、返 回附图 1 键盘矩阵扫描程序流程简图各对应键具体处理有键按下吗 ?YN置键解读标志位=1消抖动延时了吗 ?YN输入那个口线有变?YN扫描那个口线输出?YN键解读标志位=0?YN清键解读标志位=040附图 5 键盘矩阵扫描程序跳转结构图键盘矩阵扫描Key_matrix_1:Key_matrix_2:Key_matrix_3:Key_matrix_4:Key_matrix_0:JNB Pn.0,Key_matrix_0 JNB Pn.1,Key_matrix_1 JNB Pn.2,Key_matrix_2JNB Pn.3,Key_matrix_3JNB Pn.4,Key_matrix_4JB
22、Pm.0,Key_gloze_1 JB Pm.1,Key_gloze_6 JB Pm.2,Key_gloze_11 JB Pm.3,Key_gloze_16JB Pm.4,Key_gloze_21JB Pm.5,Key_gloze_26 Key_gloze_i:(i=1、2、 、30)JB Pm.0,Key_gloze_2 JB Pm.1,Key_gloze_7 JB Pm.2,Key_gloze_12 JB Pm.3,Key_gloze_17 JB Pm.4,Key_gloze_22JB Pm.5,Key_gloze_27JB Pm.0,Key_gloze_3 JB Pm.1,Key_glo
23、ze_8 JB Pm.2,Key_gloze_13JB Pm.3,Key_gloze_18 JB Pm.4,Key_gloze_23JB Pm.5,Key_gloze_28JB Pm.0,Key_gloze_4 JB Pm.1,Key_gloze_9JB Pm.2,Key_gloze_14 JB Pm.3,Key_gloze_19JB Pm.4,Key_gloze_24 JB Pm.5,Key_gloze_29JB Pm.0,Key_gloze_5 JB Pm.1,Key_gloze_10JB Pm.2,Key_gloze_15 JB Pm.3,Key_gloze_20JB Pm.4,Key_gloze_25JB Pm.5,Key_gloze_30Key_gloze_1: ;1号键解释处理Key_gloze_2: ;2号键解释处理Key_gloze_3: ;3号键解释处理 Key_gloze_29: ;29号键解释处理Key_gloze_30: ;30号键解释处理Key_scan:Key_matrix_j:(j=y=0、1、2、3、4)41基于布尔处理的键盘矩阵解读方法基于布尔处理的键盘矩阵解读方法之探讨之探讨单片机与嵌入式系统的应用单片机与嵌入式系统的应用杂志杂志2007年第7期
限制150内