收藏 分享(赏)

河海大学单片机PPT (5).ppt

上传人:tkhy51908 文档编号:6521464 上传时间:2019-04-15 格式:PPT 页数:47 大小:307KB
下载 相关 举报
河海大学单片机PPT (5).ppt_第1页
第1页 / 共47页
河海大学单片机PPT (5).ppt_第2页
第2页 / 共47页
河海大学单片机PPT (5).ppt_第3页
第3页 / 共47页
河海大学单片机PPT (5).ppt_第4页
第4页 / 共47页
河海大学单片机PPT (5).ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、1,单片机原理及应用,机电工程学院 河海大学常州校区,第四章 汇编语言程序设计,2,4-1 汇编语言程序设计基本概念,4-2 汇编语言程序的基本结构形式,一、MCS-51指令操作数说明 ,二、常用伪指令 ,一、简单程序的设计 ,二、分支程序设计 ,三、循环程序设计 ,四、查表程序设计 ,五、应用控制流程设计 ,三、汇编语言程序的结构 ,3,4-1 汇编语言程序设计基本概念一、MCS-51指令操作数说明1、语句格式 标号: 操作码 操作数(目的操作数,源操作数) ;注释 2、操作数 对于立即数 #data(1)立即数188,可表示为 #10111100B、#0BCH、#188(2)MOV R0,

2、# BLOCK;BLOCK为定义过的标号地址 对于直接地址 direct(1)二进制、十进制、十六进制数,MOV A,30H(2)定义过的标号地址,AGAIN:SJMP AGAIN(3)表达式,如SUM+2,其中SUM为定义过的标号地址(4) SFR寄存器名,如SP、DPH、DPL等,4,对于偏移量 rel (1)可以是数值、标号地址、表达式(2)使用特殊符号“”,它代表本条转移指令所在的地址, 如LJMP (死循环)(3)实际编程时,凡指令中用到地址(rel、 addr11 、addr16 等)都可用标号地址代替实际地址,而地址的运算由汇编程序 完成。二、常用伪指令 汇编:将计算机不可直接识

3、别的汇编语言源程序翻译成机器语言的过程。分为计算机汇编和人工汇编两种。 汇编程序:具有完成汇编功能的程序。 目标程序:汇编语言源程序经过汇编得到的机器语言程序。 伪指令:提供汇编用控制信息的指令,只能被汇编程序所识别,不是单片机的CPU可执行的指令。,5,1、定位伪指令ORG(Origin) 格式: 标号: ORG mm:16位二进制数,代表地址。 功能:指出汇编语言程序通过编译,得到的机器语言程序的起始地址。2、定义字节伪指令DB(Define Byte) 格式:标号: DB X1,X2,XnXn:单字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。功能:定义程序存储器从标号开

4、始的连续单元,用来存放常数、字符和表格。,6,3、定义字伪指令DW(Define Word) 格式:标号: DW Y1,Y2,Yn Yn:双字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。功能:同DB,不同的是为16位数据。4、汇编结束命令END格式:标号: END功能:END是汇编语言源程序的汇编结束标志,在它后面所写的指令均不予处理。,7,三、汇编语言程序的结构1、程序设计的基本步骤一般步骤为:(1)分析题意,明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)编写程序,上机调试;显然,算法和流程是至关重要的。程序结构有简单顺序、分支、循环和子程序等几种基本

5、形式。2、画流程图画流程图是指用各种图形、符号、指向线等来说明程序 设计的过程。国际通用的图形和符号说明如下:,8,椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。指向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。 各种几何图形符号如下图所示。,9,4-2 汇编语言程序的基本结构形式一、顺序程序的设计例1 :双字节定点数加法运算子程序(R2R3)+(R6R7)R4R5程序如下:NADD: MOV A, R3ADD A, R7MOV R5, AMOV A, R2ADD C A, R6MOV

6、 R4, ARET,10,例2 :双字节定点数减法运算子程序(R2R3)-(R6R7)R4R5程序如下:NDEC: MOV A, R3CLR CSUBB A, R7MOV R5, AMOV A, R2SUBB A, R6MOV R4, ARET,11,例3 已知两个压缩BCD码分别 放在内部RAM的31H30H和33H 32H 等4个单元中,试编程求和,结果存 入R4R3R2中。分析:压缩BCD,即本来一个BCD码只需要4位二进制数表示,现在用一个字节表示,其实就是这一个字节高4位为0。流程如图:程序如下:,12,ORG 0000HLJMP MAINORG 0040H MAIN: MOV A,

7、 30HADD A, 32HDA AMOV R2, AMOV A, 31HADDC A, 33HDA AMOV R3, ACLR AMOV ACC.0,C MOV R4, AHERE: SJMP HEREEND,13,例4 试用除法指令编程,将内部RAM中30H单元中的8位压缩BCD码拆开,转换成相应的ASCII码。BCD码的高4位转换后存入31H,低4位转换后存入32H单元。MOV A, 30HMOV B, 16DIV ABADD A, #30HMOV 31H, AADD B, #30H; ?MOV 32H, B,14,二、分支程序设计1、单分支程序单分支结构程序使用转移指令实现,即根据条件

8、 对程序的执行进行判断,满足条件是转移执行,否则 顺序执行。在MCS-51指令系统中条件转移指令有:(1)判A转移指令JZ、JNZ;(2)判位转移指令JB、JNB、JBC、JC、JNC;(3)比较转移指令CJNE;(4)减1不为0转移指令DJNZ;,15,例1 假定在外部RAM中有ST1、ST2和ST3共3个连续 单元,其中ST1、ST2单元中分别存放着两个8位无符号 数,要求找出其中的大数并存入ST3单元。分析:两个无符号数的大小比较可利用两数相减是否有借位来判断,流程图和程序如下所示:,16,START:CLR CMOV DPTR,#ST1MOVX A, DPTRMOV R7, AINC

9、DPTR MOVX A, DPTR SUBB A, R7JC BIG1MOVX A, DPTR SJMP BIG2 BIG1:XCH A, R7 BIG2:INC DPTR MOVX DPTR,A SJMP ,17,2、多分支程序(1)嵌套分支结构 前例的有符号数例子见机工版P96例4-4 例2 设变量X存放于30H单元,函数值Y存放31H单元。试按照式:1 X0Y= 0 X=0 的要求给Y赋值-1 X0分析:X是有符号数,判断符号位是0还是1可利用JB 或JNB指令。判断X是否等于0则直接可以使用累加器A的判0 指令。流程、程序如下页:,18,START: MOV A,30H JZ OVER

10、 JNB ACC.7,LAB1MOV A, #0FFH SJMP OVER LAB1: MOV A, #1 OVER: MOV 31H, A SJMP 另例见机工版P97例4-5,19,MOV A,30HCJNE A,#10,LOOP; (A)=10,CY=0;(A)=100,CY=0;(A)=10 (30H)=100 (A)+140HMOV 40H,A EXIT: SJMP $,20,(2)多重分支结构利用MCS-51单片机的散转指令JMP A+DPTR, 可方便地实现多重分支控制,因此,又称为散转程序。 假定多路分支的最大序号为n,则分支的结构如图所示。,21,例3 根据条件0、1、2 、

11、n,分别转向处理程序PRG0、PRG1、PRGn,条件K设在R2中。 START: MOV DPRT, #TABLE MOV A, R2ADD A, R2 JNC NEXT;如和超过1字节,(DPH)+1INC DPH NEXT: JMP A+DPTR TABLE: AJMP PRG0 AJMP PRGn PRG0: PRGn: ,22,三、循环程序设计 1、循环程序的结构 循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制 常用于循环控制的指令有: DJNZ、CJNE、JC、JNC 等控制类指令。,23,2、单循环终止循环控制采用计数的方法,即用一个寄存器 作为循环次数计

12、数器,每次循环后计数加1或减1,达 到终止值后退出循环。 例1 计算50个8位二进制数(单字节)之和。要求:50个数存放在30H开头的内部RAM中,和放在R6R7中。分析:采用DJNZ循环体的流程框图如下页所示, 在参考程序中,R0为数据地址指针,R2为减法循环计 数器。在使用DJNZ控制时,循环计数器初值为0时,第一次进入循环执行到DJNZ时,减1变为FFH,循环次数成了256。,24,START:MOV R6, #0 MOV R7, #0 MOV R2, #50MOV R0, #30H LOOP:MOV A, R7ADD A, R0MOV R7, A CLR A ADDC A, R6 MO

13、V R6, A INC R0 DJNZ R2, LOOP SJMP $,25,3、多重循环如果在一个循环程序中嵌套了其他的循环程序,称 为多重循环程序。在用软件实现延时时显得特别有用。先讲解机工版P101例4-9例2 设计1秒延时子程序,假设fosc=12MHz。分析:软件延时与指令的执行时间关系密切,在 使用12MHz晶振时,一个机器周期的时间为1us,执行 一条DJNZ指令的时间为2us,我们可以采用三重循环的 方法写出延时1秒的子程序流程、程序如下图所示:,26,DELAY:MOV R7, #10;DL3: MOV R6, #200 ;DL2: MOV R5, #250 ;DL1: DJ

14、NZ R5, DL1 ;DJNZ R6, DL2 ;DJNZ R7, DL3 ;RET,27,4、按条件转移控制的循环例3 把内部RAM中从30H地址开始存放的数据传送到以50H开始的存储区中,数据块长度未知(32),但已知数据块的最后一个字节内容为00H,而其它字节均不为0。并设源地址与目的地址空间不重合。分析:显然,我们可以利用判断每次传送的内容是 否为 0 这一条件来控制循环。也可用CJNE来比较与0 是否相等设计。利用判A转移控制的循环流程图如下图所示。,28,START:MOV R0, #ST1MOV R1, #ST2 LOOP:MOV A, R0 JZ ENTMOV R1,A IN

15、C R0 INC R1SJMP LOOP ENT:RET,29,四、查表程序设计 用于查表的指令有两条:MOVC A,APC;MOVC A,ADPTR;当使用DPTR作为基址寄存器时查表比较简单,查表 的步骤分三步1)基址(表格首地址)送DPTR数据指针;2)变址值(在表中的位置是第几项)送累加器A;3)执行查表指令MOVC A,ADPTR,进行读 数,查表结果送回累加器A。,30,当使用PC作为基址寄存器时,由于PC本身是一 个程序计数器,与指令的存放地址有关,查表时其操 作有所不同。查表的步骤也分三步:1)变址值(在表中的位置是第几项)送累加器A;2)偏移量(查表指令的下一条指令的首地址到

16、表格首地址之间的字节数)+ A A;(修正)3)执行查表指令MOVC A,APC。见机工版P108例4-16,4-17例1 设在内部RAM30H单元中存有一位16进制数,试用查表的方法把它转换为ASCII码,并存入40H。分析:1位16进制数范围0F,其中09对应ASCII为30H39H, AF对应ASCII为41H46H ,将这些数做成一个数表,表首地址为TAB。,31,(1)利用DPTR作基址的参考程序如下 START: PUSH PSWPUSH ACCMOV A, 30HMOV DPTR, #TABMOVC A, A+DPTRMOV 40H, A ;2字节POP ACC;2字节POP P

17、SW; 2字节RET; 1字节 TAB: DB 30H,31H,32H,33H,34H ;ASCII表DB 35H,36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46HENDASCII表另外一种定义见备注,32,(2)利用PC作基址的参考程序如下 START: PUSH PSWPUSH ACCMOV A, 30HADD A, #7MOVC A, A+PCMOV 40H, A ;2字节POP ACC;2字节POP PSW; 2字节RET; 1字节 TAB: DB 30H,31H,32H,33H,34H ;ASCII表DB 35H,36H,37H,38H,39HDB

18、41H,42H,43H,44H,45H,46HEND,33,例2 利用查表指令,根据R2的分支序号找到对应 的转向入口地址送DPTR,清ACC后,执行散转指令 JMP A+DPTR,转向对应的分支处理,假定分支处理程序在ROM 64KB的范围内分布。程序如下:ORG 1000H START: MOV DPTR, #TABMOV A, R2ADD A, R2JNC ST1INC DPH(转下页),34,ST1: MOV R3, A MOVC A, A+DPTR ;查表XCH A, R3INC A MOVC A, A+DPTR MOV DPL,AMOV DPH,R3CLR AJMP A+DPTR

19、TAB: DW PRG0 DW PRG1 ,35,五、应用控制流程设计 1、控制流程设计的基本方法在单片机的控制系统中,为了实现系统的自动控 制,必须将控制现场的信息输入到单片机,经过计算 机的处理以后以被控对象能够接受的形式输出到执行 机构,实现对现场的控制。 例1 电机的简单起停控制;其框图如下页图 a 所示1)分析:简单的电机起动停止控制,其控制的示意图及I/O分配如图 b 所示。输入信号:启动按钮SB1、停止按钮SB2输出信号:继电器KA,36,假定:按下按钮,相应的接口信号为低电平(P1.1=0)时; 若:程序使 P1.3=1,即KA = 1; 则:电机启动。2)按照上述的控制思路,

20、我们可以方便的画出流程图,如下图所示。,37,ORG 1000HSTR:MOV P1, #00000110BWT1:JB P1.1, WT1 ;启动?SETB P1.3 ;电机启WT2:JB P1.2, WT2 ;停止?CLR P1.3 ;电机停SJMP WT1 END其他例子见复旦版P190例29,30,38,2、应用程序控制流程设计例2 某机床动力头,其行程如图(a)所示, SQ1、SQ2为左、右行程开关,要求:1)每次按SB1启动,工作3个来回后停止,等待下次启动2)每次按SB2按钮,在完成当前进给后,停在初始位SQ1处,等待下次启动; 分析:1 硬件原理图,如图(b)所示,其中: 输入

21、信号:启动按钮P1.0、停止P1.1、左右行程开关P1.2、P1.3; 输出信号:前进LED灯P1.7、后退LED灯P1.6。2 控制流程:如图(c)。,39,40,3)汇编程序MAIN:MOV R0, #00HMOV P1, #0FH WT1:JB P1.0, WT1 LOOP:SETB P1.7 WT2:JB P1.3, WT2 CLR P1.7SETB P1.6INC R0LCALL DIRWT3:JB P1.2, WT3CLR P1.6JNB P1.1, WT1 CJNE R0, #3, LOOPMOV R0, #00H AJMP WT1,41,例3 试编制十字路口交通灯控制程序,控制

22、时序如下:分析:采用了双色灯模拟交通灯,并通过反相驱动芯片74LS240带动,发光控制如下图:,42,43,1) 硬件接线如图,分配如下:HL1:P1.0、P1.4HL2:P1.1,P1.5HL3:P1.2,P1.6HL4:P1.3,P1.72)控制程序:ORG 1000HSTART:MOV R0,#0MOV R1,#0MOV P1,#10010110B ;东西绿灯ACALL DL5SSS1: MOV P1,#10011111B,44,ACALL DL1SMOV P1,#96HACALL DL1SINC R0CJNE R0,#03H,SS1MOV P1,#01101001B ;南北绿灯ACAL

23、L DL5SSS2: MOV P1,#01101111BACALL DL1SMOV P1,#69HACALL DL1SINC R0,45,CJNE R0,#03H,SS2SJMP START DL5S: MOV R7,#50 ;5 秒延时DL2: MOV R6,#200DL1: MOV R5,#250DJNZ R5,DJNZ R6,DL1DJNZ R7,DL2RETDL1S:(略) ;1秒延时RETEND,46,本章小结,1、程序设计基本概念a、编写程序时,首先要保证指令合法,没有语法错误。b、同一功能,可用几种指令实现,要选择执行周期短,指令字节短的指令。c、在保证没有语法错误的前提下,要求无逻辑错误,实现系统要求的功能。 2、简单程序设计、循环程序设计、分支程序设计、查表程序设计、应用程序设计。 重点:汇编程序结构、控制流程设计,汇编程序阅读、设计,应用程序设计。 难点:汇编程序结构、控制流程,应用程序设计。,47,例4-4 程序MOV A,50HXRL A,51HJB ACC.7,LOOPMOV A,50HCLR CSUBB A,51HJC LOOP1MOV 60H,50HSJMP EXIT LOOP1: MOV 60H,51HSJMP EXIT LOOP: MOV A,50HJB ACC.7,LOOP1MOV 60H,50H EXIT: SJMP $,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报