系列单片机程序设计.pptx





《系列单片机程序设计.pptx》由会员分享,可在线阅读,更多相关《系列单片机程序设计.pptx(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.1 汇编语言程序设计概述计算机是仿照人的思维方式顺序执行一条条指令来完成特定任务的机器,计算机程序因此被定义为指令或语句的“有序集合”,程序设计是指编写计算机程序的过程。汇编语言是用指令助记符等表示的计算机指令,采用汇编语言编写的程序被称为汇编语言程序。汇编语言程序具有代码效率高(编译后的指令代码占用存储空间小)和执行时间短等优势和特点。由于单片机的存储器等资源有限,单片机应用程序中经常需要面对硬件操作,且对程序执行的时间有较为严格的要求或限制。因此,汇编语言程序设计是单片机应用系统设计的重要基础之一。第1页/共87页4.1 汇编语言程序设计概述1、汇编语言的特点:汇编语言的特点归纳如下:
2、助记符指令与机器指令一一对应;程序代码效率高,占用存储空间小,运行速度快,汇编语言程序往往是最优化的程序;助记符指令(汇编指令)与计算机硬件联系紧密,要求编程人员对计算机硬件较为熟悉;汇编语言程序缺乏通用性,移植性较差。4.1.1 汇编语言的特点及语句格式汇编语言的特点及语句格式第2页/共87页4.1 汇编语言程序设计概述2、汇编语言的语句格式MCS-51系列单片机汇编语言的语句格式如下:;标号是汇编语句地址的符号表示。用于规定该语句所执行的操作。操作数为汇编指令的操作提供数据或地址 注释是指对一条汇编语句或一段汇编语言程序的说明,以增加汇编语言程序的可读性。4.1.1 汇编语言的特点及语句格
3、式汇编语言的特点及语句格式第3页/共87页4.1 汇编语言程序设计概述 1、起始地址定位伪指令ORG 格式:标号:ORG 操作数 说明:其功能是指出紧接其后的指令的目标代码的第一个字节在程序存储器中的绝对地址。例如:ORG 0030H START:MOV A,#33H .即定义标号START表示的起始地址值为0030H,该段程序的指令代码从该地址开始顺序存放。4.1.2 汇编语言伪指令汇编语言伪指令 第4页/共87页4.1 汇编语言程序设计概述 2、赋值伪指令EQU 格式:字符名称 EQU 操作数 说明:该指令用于字符名称赋值。在同一个源程序中,任何一个字符名称只能赋值一次。且一旦赋值之后,整
4、个源程序中该字符的值就固定不变了。例如:ADPORT EQU 1001H即给字符名称ADPORT 赋值16进制数1001H。4.1.2 汇编语言伪指令汇编语言伪指令 第5页/共87页4.1 汇编语言程序设计概述 3、数据地址赋值伪指令DATA格式:字符名称 DATA 操作数说明:DATA伪指令的功能与EQU伪指令相似,不同之处在于DATA伪指令所定义的字符名称可先使用后定义(赋值),也可先定义(赋值)后使用。在程序中它常用来定义(赋值)数据地址。4.1.2 汇编语言伪指令汇编语言伪指令 第6页/共87页4.1 汇编语言程序设计概述 4、字节数据赋值伪指令DB格式:标号:DB数据表(字节)说明:
5、该伪指令用于定义(赋值)若干字节数据表(固定常数),并存放在指定地址单元开始的程序存储器中。例如:ORG 0050HTABLE:DB 99H,88H 即表示在地址0050H(标号TABLE)开始定义(赋值)两个字节数据(99H,88H)。4.1.2 汇编语言伪指令汇编语言伪指令 第7页/共87页4.1 汇编语言程序设计概述 5、双字节数据赋值伪指令DW格式:标号:DW数据表(双字节)说明:该伪指令与DB伪指令的不同之处在于DW定义(赋值)的是双字节数据,而DB定义(赋值)的是单字节数据。高8位数据安排在低地址单元,低8位数据安排在高地址单元。6、预留空间定义伪指令DS格式:标号:DS 操作数说
6、明:该伪指令的作用是通知汇编程序,从指定的地址单元开始(通常由标号指定首地址),保留由操作数(常数或表达式)规定的字节空间。4.1.2 汇编语言伪指令汇编语言伪指令 第8页/共87页4.1 汇编语言程序设计概述 7、位地址赋值伪指令BIT格式:字符名称 BIT 位地址说明:该伪指令给字符名称赋予位地址(片内RAM和SFR中的位地址),常用于位操作程序中。例如:FLAG BIT 20H 即将位地址20H赋予字符名称FLAG。8、定义汇编结束伪指令END格式:标号:END说明:汇编结束伪指令END的作用是通知汇编程序,汇编源程序到此结束。在一个汇编程序中,只允许出现一条END伪指令,且必须安排在整
7、个源程序的末尾处。4.1.2 汇编语言伪指令汇编语言伪指令 第9页/共87页4.1 汇编语言程序设计概述4.2 基本程序结构基本程序结构1、顺序结构程序2、分支结构程序3、循环结构程序4、子程序5、中断程序基本程序结构第10页/共87页4.2 基本程序结构 顺序结构是各类程序中最简单的,也是最基本的程序结构。顺序结构程序的特征是整个程序段没有任何转移指令。主要由数据传递类指令和数据运算类指令组成,通常用于执行数据传送和较为简单的算术或逻辑运算任务。4.2.1 顺序结构顺序结构第11页/共87页4.2 基本程序结构例4-1,将内部 RAM 中 20H 单元和 30H 单元的无符号数相加,存入R0
8、(高位)和R1(低位)中。源程序如下:MOV A,20H ;取出被加数ADD A,30H ;两数相加MOV R1,A ;低位存入R1CLR A ;ADDC A,#00H ;取进位标志MOV R0,A ;高位存入R0RET 4.2.1 顺序结构顺序结构第12页/共87页4.2 基本程序结构 分支结构程序利用条件转移指令,使程序在执行某一指令后(产生测试条件),根据所规定的条件满足与否改变其后程序执行的顺序(产生分叉),即根据判断条件的成立与否来确定程序的走向。分支结构程序的特征是程序段中有控制转移类指令(条件转移指令)。依据程序分叉的数目,可将分支结构程序细分为单分支选择结构和多分支选择结构两类
9、。4.2.2 分支结构分支结构第13页/共87页4.2 基本程序结构1、单分支选择结构 当程序的判断仅有两个出口(分叉),即两者选一时,称为单分支结构。通常用条件判断指令来选择并确定程序的出口。例4-3.设内部RAM 40H和41H单元中存放2个8位无符号二进制数,试编程找出其中的大数存人30H单元中。源程序如下:MOV A,40H CJNE A,41H,LOOP;取2个数进行比较 LOOP:JNC LOOP1 ;根据CY值,判断单分支出 MOV A,41H ;41H单元中是大数 LOOP1:MOV 30H,A ;40H单元中是大数 RET 4.2.2 分支结构分支结构第14页/共87页4.2
10、 基本程序结构2、多分支选择结构 当程序的判别部分有两个以上的出口(分叉)时,称为多分支选择结构。例4-4,设变量X的值存放在内部RAM的30H单元中,编程求解下列函数式,将求得的函数值Y存人40H单元。X1 (X100)Y 0 (10X100)X一1 (X10)4.2.2 分支结构分支结构第15页/共87页4.2 基本程序结构 MOV A,30H ;取自变量X值 CJNE A,#10,LOOP ;与10比较,A中值不改变LOOP:JC LOOP2 ;若X100,转LOOP3 MOV 40H,00H ;因10X100,故Y=0 SJMP EXITLOOP2:DEC A ;因X100,故Y=X1
11、 MOV 40H,AEXIT:RET第16页/共87页4.2 基本程序结构 在程序设计中,遇到一段程序需要多次重复执行的情况,通常应该采用循环结构程序。1、循环结构程序组成 循环结构程序由初始化、循环处理、循环控制和循环结束4部分组成。(1)初始化部分 初始化部分设置循环处理之前的初始状态,如循环次数、变量初值、地址指针初值等。(2)循环处理部分 循环处理部分又称循环体,是重复执行的数据处理程序段,它是循环程序的核心部分(功能主体)。4.2.3 循环结构循环结构第17页/共87页4.2 基本程序结构(3)循环控制部分控制部分控制循环继续与否。(4)结束部分结束部分对循环程序全部执行结束后的结果
12、进行分析、处理和保存。循环结构程序一般分为“单重循环”和“多重循环”两类,循环次数的控制有多种方式,当循环次数已知时,可采用循环次数计数器控制循环;若循环次数未知时,可按条件满足与否控制循环。4.2.3 循环结构循环结构第18页/共87页4.2 基本程序结构 2循环程序设计在一个循环程序的循环体中不包含另外的循环结构称为单重循环。例4-5,设某字符串以回车符(0DH)为结束标志,并存放在内部RAM40H单元开始的连续存储单元之中,编写测试字符串长度的汇编语言程序。编程思路 为测试字符串(0DH)的长度,应使用逐个字符依次与回车符(ODH)比较的方法。为此需要设一个字符串指针和一个长度计数器,字
13、符串指针用于指定字符,长度计数器用于累加字符串的长度。如比较不相等,则长度计数器和字符串指针都加1,以继续往下比较;如果比较相等,则表示该字符为回车符,字符串结束,长度计数器的值就是字符串的长度。4.2.3 循环结构循环结构第19页/共87页4.2 基本程序结构 2循环程序设计 程序如下:MOV R7,0FFH ;设长度计数器初值 MOV R0,3FH ;字符串指针 初值LOOP:INC R7 INC R0 CJNE R0,ODH,LOOP RET 4.2.3 循环结构循环结构第20页/共87页4.2 基本程序结构 4.2.4 子程序结构子程序结构 在编写程序过程中,如果遇到在几个程序段中都需
14、要执行某段相同程序的情况(功能独立),为减少编程工作量和节省程序存储空间,就应该采用子程序结构,将重复执行的相同程序段编写成为一个子程序(功能子程序)。返回返回调用调用断点断点子程序子程序主程序主程序第21页/共87页4.2 基本程序结构MAIN:;进入主程序MOV R0,#03H ;设置入口参数(延时1)ACALL SUBPRO ;调用子程序 ;子程序返回,继续执行主程序;#;子程序入口地址(子程序名称):SUBPRO;功能:延时子程序(延时时间由R0初值设置);入口参数:R0内存放延时计数初值 ;出口参数:无;使用寄存器:R0、R1;#SUBPRO:MOV R1,#03HDJNZ R1,$
15、DJNZ R0,SUBPRORET ;子程序返回 END 4.2.3 子程序结构子程序结构第22页/共87页4.2 基本程序结构单片机中断程序设计主要有以下三个方面:1、中断向量设置2、中断初始化3、中断服务程序 4.2.5 中断程序结构中断程序结构第23页/共87页4.2 基本程序结构例4-7,设89C51单片机外中断0(EX0)下降沿有效,每次进入中断服务程序,要求将89C51单片机的P1.7P1.0取反。主程序如下:ORG 0000H STAR:AJMP MAIN ;主程序原始入口 ORG 0003H ;外部中断0中断向量 AJMP EXTR ;跳转到EX0中断服务子程序实际入口地址 O
16、RG 0030H MAIN:SETB IT0 ;主程序实际入口,边沿触发设置 SETB EX0 ;外部中断0允许 SETB EA ;总中断允许HERE:AJMP HERE ;等待再次进入中断服务程序 4.2.5 中断程序结构中断程序结构第24页/共87页4.2 基本程序结构中断服务子程序:ORG 1200H EXTR:PUSH PSW ;保护现场 CPL A ;累加器A数据取反 MOV P1,A ;数据输出至P1端口 POP PSW ;恢复现场 RETI ;中断返回 4.2.5 中断程序结构中断程序结构第25页/共87页4.3 汇编语言程序设计实践汇编语言程序设计的一般步骤如下:建立数学模型
17、用适用的数学方法描述所需要解决的问题;确定算法 将数学模型转化为适合单片机处理(顺序执行)的形式,采用绘制程序流程图等方法表示程序设计的思路和依据。编写源程序 采用模块化设计方法,合理划分功能模块,分配存储器和I/O端口(依据硬件电路)等资源,确定各模块内各程序段的结构,编写源程序文件。汇编及调试 在集成开发环境的支持下,汇编语言源程序经汇编生成目标程序文件,并通过调试以及对运行结果的分析,修正源程序中的错误,达到预期的设计目标。第26页/共87页 所谓查表,就是根据变量x在表格中查找y,使yf(x)。函数值y事先根据变量x的取值范围计算出,并按一定规律编成表格存放在计算机的程序存储器中。当用
18、户程序中需要用这些数据时,直接按编排的索引值(或程序号)寻找答案。这样编写的程序称为查表程序。查表程序是一种常用程序,广泛应用于LED显示器控制、智能化仪表控制、打印机打印以及数据转换等功能程序中,具有程序简单、执行速度快等优点。查表程序有多种结构形式,下面举例介绍一种常用的查表程序。4.3.1 查表程序查表程序4.3 汇编语言程序设计实践第27页/共87页4.3.1 查表程序查表程序 例例4-8,将,将16进制数转换成进制数转换成ASCII码的子程序。假设码的子程序。假设16进制数存放在进制数存放在R0中低中低4位,要求将转换后的位,要求将转换后的ASCII码送回到码送回到R0中。中。设计思
19、路:己知设计思路:己知0-9的的ASCII码为码为30H一一39H,AF的的ASCII码为码为41H一一46H。对十六进制数而言,。对十六进制数而言,0-F是连续的,是连续的,而对应的而对应的ASCII码不连续,查表方法对解决此类问题十分有码不连续,查表方法对解决此类问题十分有效。根据题意,子程序的入口参数和出口参数均通过效。根据题意,子程序的入口参数和出口参数均通过R0传传递,表中所有的值都是单字节,表格长度为递,表中所有的值都是单字节,表格长度为16字节。字节。4.3 汇编语言程序设计实践第28页/共87页查表子程序:查表子程序:MOV A,R0 ;读取主程序通过;读取主程序通过R0传送的
20、十六进制数传送的十六进制数ANL A,0FH ;屏蔽高;屏蔽高4位,取出低位,取出低4位位ADD A,#02H ;设置变址值(依据表首地址与查表指;设置变址值(依据表首地址与查表指 令所处位置)令所处位置)MOVC A,A+PC ;查表指令(获得对应的;查表指令(获得对应的ASCII码)码)MOV R0,A :通过:通过R0将查表结果传递给主程序将查表结果传递给主程序RETTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H 程序中因为程序中因为“MOVC A,A+PC”指令与表格首址相隔两个字节,指
21、令与表格首址相隔两个字节,故变址调整值为故变址调整值为2,程序中对应变量,程序中对应变量x的函数值的函数值y为单字节。为单字节。4.3.1 查表程序4.3 汇编语言程序设计实践第29页/共87页 在51系列单片机指令集中有单字节的算术运算(加、减、乘、除)指令,但在实际程序设计中经常会遇到多字节算术运算问题,需要通过编制专门的功能子程序解决此类问题。例4-9,多字节无符号数加法运算。假设R0中存放被加数低位字节地址指针,R1中存放加数低位字节地址指针,R2中存放字节数,多字节算术运算一般从低字节(低位)到高字节(高位)的顺序依次进行。4.3.2 算术运算程序4.3 汇编语言程序设计实践第30页
22、/共87页汇编源程序如下:ADDBIN:CLR C LOOP1:MOV A,R0;取被加数 ADDC A,R1;两数相加,带进位 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP1;未加完转LOOP1 JNC LOOP2;无进位转LOOP2 MOV R0,#0lH RET LOOP2:DEC R0 RET 4.3.2 算术运算程序4.3 汇编语言程序设计实践第31页/共87页例4-10,BCD码多字节加法运算。假设R0中存放被加数低位字节地址指针,R1中存放加数低位字节地址指针,R2中存放字节数。BCDADD:MOV 20H,R0 MOV 23H,R2 CLR C LP0
23、:MOV A,R0 ;取被加数;取被加数 ADDC A,R1;两数相加;两数相加 DA A ;十进制调整;十进制调整 MOV RO,A INC R0 ;指针加;指针加1 DJN2 R2,LP0 ;做完加法否;做完加法否4.3.2 算术运算程序 MOV R2,23H JNC RETURN ;有无进位;有无进位 MOV R0,#01H INC R3 RETURN:MOV R0,#20H RET 4.3 汇编语言程序设计实践第32页/共87页例例4-11,如如图图4-2所所示示,MCS-51单单片片机机的的P1作作为为输输出出端端口口,连连接接8只只发发光光二二极极管管。按按该该电电路路工工作作原原
24、理理,P1口口各各位位输输出出“0”时时,将将发发光光二二极极管管点点亮亮;P1口口各各位位输输出出“1”使使发发光光二二极极管管灭灭。分分析析下下述述汇汇编编程程序序运运行行后后,8个个发发光光二二极极管管点点亮的规律。亮的规律。4.3.3 I/O接口控制程序图4-2 P14-2 P1口驱动LEDLED示意图4.3 汇编语言程序设计实践第33页/共87页主程序:主程序:LP:MOV P1,7EH LCALL DELAY MOV P1,0BDH LCALL DELAY MOV P1,#0DBH LCALL DELAY MOV P1,0E7H LCALL DELAY MOV P1,0DBH LC
25、ALL DELAY MOV P1,0BDH LCALL DELAY SJMP LP子程序:子程序:DELAY:MOV R2,0FAH L1:MOV R3,#0FAH L2:DJNZ R3,L2 DJNZ R2,L1 RET4.3.3 I/O接口控制程序接口控制程序第34页/共87页 例例4-12:按照图按照图4-2所示的电路,试编写控制发光二极管指所示的电路,试编写控制发光二极管指示灯移位的程序,要求示灯移位的程序,要求8个发光二极管依次亮一个,循环左个发光二极管依次亮一个,循环左移,一个一个地亮,直至循环。相关源程序如下移,一个一个地亮,直至循环。相关源程序如下:MOV A,7FH L1:M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系列 单片机 程序设计

限制150内