版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片微型计算机与接口技术(第4版) 第3章 51单片机汇编语言程序设计学习内容 伪指令 顺序程序设计 分支程序设计 循环程序设计 位操作程序设计 子程序 3.1概述单片机编程语言:汇编语言,高级语言汇编语言:面向机器(学习对象)高级语言/汇编语言,都要转换成目标程序(机器语言)汇编语言程序设计步骤1.分析任务确定方案2.划分模块,确定关系3.画程序流程图4.编制源程序 5.汇编,连接,生成目标文件 6.仿真调试修改 7.烧录至单片机开始END YN? 3.2 伪指令 (指示性语句) 伪指令:无对应的机器码,帮助进行机器汇编的 指示性指令 (非指令性语句)几种常用的伪指令:1起始指令 ORG n
2、n (16位地址或标号)作用:指示程序或数据块以nn为起始地址连续存放在ROM中例如 ORG 1000H2.字节定义标号: DB (字节常数,或字符或表达式)作用:指示以标号为起始地址的ROM中存放的数为字节数据例如 LN:DB 32, C, 32H ;LN开始的单元依次存放 20H,43H,32H3.字定义标号: DW (字常数或表达式)作用:指示以标号为起始地址的ROM中存放的数为字数据例如 MN:DW 1234H,08H ;MN开始的单元中顺序存放 12H,34H,00H,08H4.保留字节标号: DS (数值表达式)作用:指示在ROM中保留以标号为起始地址的若干字节单元例 L1:DS
3、325.等值指令标号 EQU (数值表达式)作用:表示EQU两边的量等值例 ABC EQU 38H ;程序中凡出现ABC的地方汇编将38H代之6.位定义标号 BIT(位地址)作用:同EQU指令,不过定义的是位操作地址例 AIC BIT P1.17.汇编结束标号 END作用:指示源程序段结束 (不再汇编)注:其他伪指令见表3-1(P48) 伪指令举例 MATH EQU 03H ORG 0030H MAIN: CLR C LOOP: MOV A , R0 MOV R1, #MATH ;相当于 MOV R1,#03H . ORG 1100H DB 01H , 04H, 09H , 05H ENDRO
4、M中地址 数据1100 011101 041102 091103 05 汇编语言格式: 地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址0000 02 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址0030 C3 MAIN: CLR C ; MAIN为程序标号0031 E6 LOOP: MOV A , R00032 37 ADDC A, R10033 08 INC R00034 DA FB DJNZ R1, LOOP ;相对转移0036 80 03 SJMP NEXT0038 78 03 MOV R0, #03H003A 18 NEX
5、T: DEC R0003B 80 FE SJMP $ ;相当于HE:SJMP HE END ; 结束标记33 顺序程序设计 (无分支)例31 将外部数据存储器的000EH和000FH单元的内容相交换编程: ORG 0000HMOV P2, #0H ;送地址高8位至P2口 MOV R0, #0EH ;R0=0EHMOV R1, #OFH ;R1=0FHMOVX A, R0 ;A=(000EH) MOV 20H, A ;(20H)=(000EH) MOVX A, R1 ;A=(000FH) XCH A, 20H ;(20H)A,A=(000EH),(20H)=(000FH) MOVX R1, A
6、MOV A, 20H MOVX R0, A ;交换后的数送各单元 SJMP $ END000EH000FH000EH000FH例32 将内部数据存储器的(31H)(30H)中的16位数求其补码后放回原单元。编程如下: MOV A,31H JB ACC.7,CPLL ;如为负数转CPLL SJMP $ ;为正数,补码原码CPLL: MOV A,30H CPL A ADD A,#1 ;低8位取反加1 MOV 30H,A MOV A,31H CPL A ;高8位取反 ADDC A,#0 ;加低8位的进位ORL A,#80H ;恢复负号 MOV 31H,A SJMP $ END例33设变量放在片内RA
7、M的20H单元,取值范围为00H,01H,02H,03H,04H,05H,要求编制查表程序,查出变量的平方值,并放入片内RAM的21H单元。 分析: 在ROM指定地址单元,安排一平方表,以DPTR指向表首址,A存放变量值,利用查表指令MOVC A,A+DPTR即可求得,表中平方值用BCD码存放。程序如下: ORG 0000H MOV DPTR, #TAB MOV A, 20H MOVC A, A+DPTR MOV 21H, A SJMP $TAB:DB 00H,01H,04H,09H,16H,25H;平方表 END 查表技术重要,应熟练掌握地址数据TAB+000HTAB+101HTAB+204
8、HTAB+309HTAB+416HTAB+525HDPTRA3.4 分支程序设计 (含有转移指令) 例35 在内部RAM 的40H和41H地址单元中,有2个无符号数,试编程比较这两数的大小,将大数存于内部RAM的GR单元,小数存于LE单元,如两数相等,则分别送入GR和LE地址单元。分析 采用CJNE指令,既可判断相等与否,还可通过Cy标志判断大小 MOV A, 40H (40H)-(41H) 0转移,CY=0 CJNE A,41H,NEQ ;两数不等转NEQ (40H)-(41H) =0顺序,CY=0 (40H)-(41H) 0转移,CY=1 MOV GE,A ;两数相等,GR单元和LE单元均
9、存此数 MOV LE,A SJMP $ NEQ: JC LESS ; (40H)小,则转LESS MOV GR,A ; (40H)大,大数存GR单元 MOV LE,41H ;小数存LE单元 SJMP $LESS: MOV LE, A ; (40H)小,小数存LE单元 MOV GR,41H ;大数存GR单元 SJMP $ GR EQU 30H ;(伪指令定义不可少) LE EQU 31H END例36 设变量X以补码的形式存放在片内RAM的30H单元,函数Y与X 有如下关系式:试编制程序,根据X的大小求出Y,并放回原单元(即先X,后Y)。分析 取出变量后先作取值范围的判断,对符号的判断可用位操作
10、类指令,也可用逻辑运算类指令实现,此处用逻辑运算指令。流程见图32,程序如下:Y=x20Hx+5x0 x=0 x0转ED MOV A, #05H ;X0,Y=X,30H不处理符号判断用位操作指令MOV C,ACC.7 JNC EDN开 始(30H)AA=00H?A00H?结 束YNY20H(30H)(30H)+05H(30H)图32 例36程序流程图 多分支程序:通常利用JMP A+DPTR 间接转移指令实现。有两种方法: 1)查转移地址表。将转移地址列成表格,将表格的内容作转移的目标地址。 2)查转移指令表。将转移到不同程序的转移指令列成表,判断条件后查表,转到表中执行。1利用转移地址表实现
11、转移例37 根据R3的内容转向对应的程序,处理程序的入口分别为PR0PRn(R3的内容0n,n128)XXXXXXXX.ROM区PRO例如 R3=1的操作伪指令设PR0-PRn地址 PR0 EQU 0110H PR1 EQU 0220H PR2 EQU 0330HPR2LPR2HTAB+4PR1LPR1HTAB+2PR0LPR0HTABROM区转移地址表低地址高地址分析: 将PR0PRn入口地址列在表格中,每一项占两个单元,PRn在表中的偏移量为2n,因此将R3的内容乘2即得PRn在表中的偏移地址,从偏移地址2n和2n+1两个单元分别取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP
12、 A+DPTR指令(A先清零)即转移到PRn入口执行。01100220.TABTAB+2DPH DPL例如 R3=1的操作0220 ORG 0100H MOV A, R3 ;R3A ADD A, ACC ;A*2(RL A) MOV DPTR, #TAB ;地址表首址DPTR PUSH ACC ;保护A*2结果 MOVC A, A+DPTR ;取地址表中的高字节 MOV B, A ;暂存于B INC DPL ;地址表指针加1 POP ACC ; A*2结果 MOVC A, A+DPTR ;取地址表中的低字节 MOV DPL, A MOV DPH, B ;DPTR为PRn入口地址 CLR A ;
13、A=0 JMP A+DPTR ;JMP PRn,执行程序TAB: DW PR0,PR1,PR2,,PRn END3.5 循环程序设计 (重复执行某程序段) 循环程序:使程序缩短,节省存储单元,不节省执行时间主要问题:循环次数的控制形式:单重循环和多重循环 (必有DJNZ指令)组成: (1) 初始化部分 (2) 处理部分 (3) 循环控制部分 (4) 结束部分 例39 设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHz。 分析 延时时间=运行总MC个数MC宽度。由于晶振采用6MHz,一个机器周期宽度是2s,采用单循环可以实现1ms延时,外循环10次即可达10ms延时。内循环如何实现
14、1ms延时呢,程序中可先以未知数MT代替,再根据程序的执行时间计算MC数 ORG 0030H 1 MOV R0, #0AH ;外循环10次,运行1次*1MC 1 DL2: MOV R1, #MT ;内循环MT次,运行10次*1MC 1 DL1: NOP 运行10*MT次*1MC 1 NOP ;空操作指令 内 运行10*MT次*1MC外 2 DJNZ R1, DL1 运行10*MT次*2MC 2 DJNZ R0, DL2 运行10次*2MC 2 RET 运行1次*2MC 内循环DL1到指令DJNZ R1,DL1 的计算: (112)MT2s=1000s MT=125=7DH (MT最小值,最大值
15、?)将7DH代入上面程序的MT,计算总的延时时间: 11+(1+1+2)125+2102s=10.062ms(=10066s)若需更长延时,可以采用多重循环 (晶振为12MHZ,延时?) 例312 编写多字节BCD码减法程序分析:MCS-51指令系统中只有十进制加法调整指令DA A,而无减法调整指令。为了用十进制加法调整指令对十进制减法进行调整,必须采用补数相加的办法,对9AH减去减数即可得到以100为模的减数的补数。由此得多字节十进制BCD码减法程序。 被减数低字节地址用R1表示,减数地址用R0指示,字节数用R2指示。差(补数)的地址仍用R0指示,差的字节数放在R3。用07H位作结果的符号标
16、志,“0”为正,“1”为负。1)9AH=99H+1(模100) 2)减化为加补数 3)CY求反3.6 位操作程序设计 (内RAM,SFR位寻址区,软件代替硬件)例314 编写一个程序,以实现逻辑运算电路。其中,P1.1和P2.2分别是端口线上的信息,TF0和IE1分别是定时器定时溢出标志和外部中断请求标志,25H和26H分别是两个位地址,运算结果由端口线P1.3输出。& 111P1.1P2.2TF0IE125H(位)26H(位)P1.3P1.3=/26H*(IE1+/25H)*(P2.2+ TF0)* P1.1)分析 51单片机有着优异的位逻辑功能,可以方便地实现各种复杂的逻辑运算。这种用软件
17、代替硬件的方法,可以大大简化甚至完全不用硬件,但比硬件要花多一些运算时间。 START: MOV C,P2.2 ORL C, TF0 (ORL P2.2,TF0 ?) ANL C, P1.1 MOV F0, C MOV C, IE1 ORL C, /25H ANL C, F0 ANL C, /26H MOV P1.3, C SJMP $3.7子程序 (任务确定,反复调用,减少占用存储空间) 主程序:用ACALL 和LCALL指令,可调用子程序 子程序:完成某一特定任务,开头必为标号,末尾必为RET调用子程序时注意: 1) 保护现场 2) 设置入口参数和出口参数 3) 子程序嵌套例316 用程序
18、实现c=a2+b2,设a,b均小于10。a存放在31H单元,b存放在32H单元,把c存入34H和33H单元(和为BCD码)。解 因本题两次用到平方值,所以在程序中采用把求平方编为子程序的方法。依题意编写主程序和子程序如下主程序:MOV SP, #3FH ;设堆栈指针MOV A, 31H ;取a值LCALL SQR ;求a2MOV R1, A ;a2暂存R1MOV A, 32H ;取b值LCALL SQR ;求b2ADD A, R1 ;求a2b2DA A ;BCD码调整MOV 33H, A ;存入33HMOV A, #0ADDC A,#0 ;取进位位MOV 34H, A ;存进位位SJMP $子程序: ORG 0030H SQR: INC A ;RET占一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建房子木工合同范例
- 上海普陀租房合同范例
- 外贸合同范例内容
- 农户铲车出售合同范例
- mg动画制作合同范例
- 广州夫妻开饭店合同范例
- 卓越品质清洁工具
- 买房压尾款合同范例
- 关于书采购合同模板
- j借款合同范例
- 《梯形的面积》(课堂PPT)
- 天然气脱硫(课堂运用)
- 幼儿园教师师德师风考核表(共2页)
- 《施工组织设计专项施工方案资料》古建筑油漆彩画施工方案
- 城镇职工医疗保险运行中的问题分析及措施
- 阿拉丁神灯介绍ppt[共27页]
- 人教版英语选择性必修一Unit 1 People of Achievement(Reading and Thinking)教案(2课时)
- 学校食堂五常法管理制度
- 毕业设计500kv变电站设计
- 讲故事社团活动教案
- 五四制新青岛版二年级科学上册14《身边的动植物资源》课件
评论
0/150
提交评论