单片机简单程序课件

上传人:我*** 文档编号:140537536 上传时间:2020-07-30 格式:PPT 页数:34 大小:634.50KB
返回 下载 相关 举报
单片机简单程序课件_第1页
第1页 / 共34页
单片机简单程序课件_第2页
第2页 / 共34页
单片机简单程序课件_第3页
第3页 / 共34页
单片机简单程序课件_第4页
第4页 / 共34页
单片机简单程序课件_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《单片机简单程序课件》由会员分享,可在线阅读,更多相关《单片机简单程序课件(34页珍藏版)》请在金锄头文库上搜索。

1、第四章 汇编语言程序设计,4-1 汇编程序的约定,4-2 程序设计步骤,4-3 直线程序,4-4 分支程序,4-5 循环程序,4-6 子程序,4-8 编程举例,4-7 算数运算,4-1 汇编程序约定,汇编语言程序: 用汇编语言编写的、完成特定功能的指令序列。 汇编程序: 能将汇编语言源程序转换成机器语言目标程序的系统软件。,汇编语言程序到机器语言程序的转换过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。 2.机器汇编:用汇编程序进行汇编。,源程序使用机器汇编要考虑汇编程序的约定,1)按指令格式和语法规则编写程序。 常数的表示: 十进制数:20 十六进制数:87

2、H,0F0H 二进制数:01011001B 字符:H 字符串:“Hello”。 2)使用伪指令提供汇编信息。,汇编的主要任务:,1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)。,一. 汇编语言指令类型 1.机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。,一. 汇编语言指令类型,3. 宏指令: 宏汇编功能:将需要多次反复执行的程序段定义成一个宏指令名(宏定义),编程时,可在程序中使用宏指令名来

3、替代一段程序(宏调用)。,宏定义过程: 宏指令名 MACRO 形式参数 ;定义程序段 ENDM 宏调用过程: 宏指令名 实际参数 宏指令名 实际参数,二汇编控制指令(伪指令),伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令,不同汇编程序允许的伪指令并不相同,但一些基本的伪指令在大部份汇编程序中都能使用,汇编控制指令(伪指令) 常用伪指令及其功能:,1. ORG起始地址指令:指明程序和数据块起始地址。 指令地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6MOV

4、 A,R0 ORG 3000H 3000H 23DB 23H,100,A 3001H 64 3002H41,2. DB 定义字节型常数指令。例: DB 12H,100,A,例如: ORG2000H TAB1:DB01H,04H,08H,10H 以上伪指令汇编后从2000H单元开始定义(存放)4个字节数据(平方表): (2000H)01H,(2001H)04H,(2002H)09H,(2003H)10H。,3. DW 定义字型常数指令。例: DW 1234H,5678H,例如: ORG2100H TAB2:DW 1067H, 1000H, 100 汇编后: (2100H)10H,(2101H)6

5、7H, (2102H)10H,(2103H)00H, (2104H)00H,(2105H)64H。,4. EQU 等值。为标号或标识符赋值。 X1 EQU 2000HX2 EQU 0FH MAIN:MOV DPTR,#X1 ADD A,#X2,5. END 结束汇编指令。 例:START: END START,判断框 连接点 图:常用流程图符号,美国国家标准化协会ANSI(American National Standard Institute)设定了一些常用的流程图符号如图所示:,起止框 或 流程线,输入输出框 处理框,4-2 汇编语言程序设计步骤,一.确定方案和计算方法 二.了解应用系统的

6、硬件配置、性能指标。 三.建立系统数学模型,确定控制算法和操作步骤。 四.画程序流程图 表示程序结构和程序功能,五. 编制源程序 1.合理分配存储器单元和了解I/O接口地址。 2.按功能设计程序,明确各程序之间的相互关系。 3.用注释行说明程序,便于阅读和修改调试和修改。,常用程序结构: 直线程序、分支程序、循环程序、子程序,4-3 直线程序 直线程序又称简单程序,程序走向只有一条路径。,双字节变补程序(设数据在R4R5中): MOV A,R5;取低字节 CPL A ADD A,#1;低字节变补 MOV R5,A MOV A,R4;取高字节 CPL A ADDC A,#0;高字节变补 MOV

7、R4,A,例4-3-4 压缩式BCD码分解成为单字节BCD码。,MOV R0,#40H;设指针 MOV A,R0;取一个字节 MOV R2,A;暂存 ANL A,#0FH;清0高半字节 INC R0 MOV R0,A ;保存数据个位 MOV A,R2 SWAP A ;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A;保存数据十位,十 个,4-4 分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。,4-4-2单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构:,例 求R2中补码绝对值,正数不变,负数变补。 MOV A,R2 JNB ACC.7,NEXT;

8、为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束,例题行李计价:当G5,M=G3;当G5,M=G3+(G-5)(5-3),FRT: MOV A,40H;取行李重量G MOV R3,A ;G暂存R3中 MOV B,#03H;M=G3 MUL AB MOV R2,A;暂存3G到R2 MOV A,R3;取回G CJNE A,#05H,L1;G5 ? SJMP WETC L1:JC WETC;是,转至WETC SUBB A,#05H;否则M=3G+2(G-5) RLC A ADD A,R2 SJMP LOOP WETC: MOV A,R2 ;3G到A

9、 LOOP: MOV 41H,A ;存结果M到41H RET,设重量存在40H中,4-4-3 多重分支程序一多次使用条件转移指令,形成两个以上判断框。,例 求符号函数Y=SGN(X) +1 当 X0 SGN(X)= 0 当 X=0 -1 当 X0,SYMB: MOV A,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS;X0跳转 MOV A,# 1 ;X0,Y=+1 SJMP STOR MINUS:MOV A,#0FFH;X0,Y= -1补码 STOR: MOV 41H,A ;保存Y RET,设X存在40H中,结果Y存在41H,二按分支号转移,如:分支号=0,程序转

10、移到ADDR0处;当分支号=1,程序转移到ADDR1处; 。,(1)用地址表法。设分支号已存入A。 MTJS:MOV DPTR,#TAB ;取表首地址 CLR C ;分支号2 RLC A MOV R2,A MOVC A,A+DPTR;取分支地址低位 PUSH ACC ;入栈保存 MOV A,R2 INC A MOVC A,A+DPTR;取分支地址高位 PUSH ACC ;入栈保存 RET ;分支地址PC,转移 TAB: DW ADDR0 ;分支地址表 DW ADDR1 ADDR0: ;程序段0 ,4-5 循环程序包含多次重复执行的程序段,循环结构使程序紧凑。,4-5-1循环程序的构成,各个环节

11、任务: 一初始化部分 循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,二循环体 循环工作部分: 需多次重复处理的工作。 循环控制部分: 1.修改指针和循环控制变量。 2.检测循环条件:满足循环条件,继续循环,否则退出循环。 三.结束部分 处理和保存循环结果。 允许0次循环的循环结构:在循环工作之前检测循环条件。,4-5-2 单重循环简单循环结构:循环体中不套循环。,定时 例:试计算下列程序段执行时间。 程序 指令执行周期 MOV R7, #64H 1T LOOP:NOP 1T NOP 1T DJNZ R7, LOOP 2T,解:上述程序显然属于循环程序,其算法结构如图所示。循环次

12、数100次,根据每条指令的执行周期可得每次循环消耗1+1+2=4(机器周期),加上第一条指令,整个程序段共计消耗时间为(4100+1)T= 401T,当晶振频率为6MHZ时,T=2s,故上述程序实际消耗802s。,SUM:MOVR0,#42H;设指针 MOVA,R0 MOVR2,A ;循环计数器n CLRA ;结果单元清0 MOVR3,A ;进位数据存R3 ADD1:INCR0 ;修改数据指针 ADDA,R0 ;累加 JNC NEXT ;无进位转NEXT INCR3 ;有进位,高字节加1 NEXT:DJNZ R2,ADD1 ;循环控制:数据是否加完? MOV40H,A ;循环结束,保存结果 M

13、OV41H,R3 RET,例:求n个单字节数据的累加和. 设数据串在43H起始的单元,数据串长度在42H单元,累加和不超过2个字节,存在40H和41H中。,例 比较两个数据串是否完全相等,若完全相等,A=0;否则A=FFH。,PMT:MOVR2,A;设数串长度 CHC:MOVA,R0;各取数串中的一个数 MOV42H,R1 CJNE A,42H,NOM;是否相等?不相等转移 INCR0;相等,修改指针 INCR1 DJNZ R2,CHC;全部比较完? MOVA,#0;完全相等 SJMP PEND NOM:MOVA,#0FFH;不完全相等 PEND:RET,4-5-3 多重循环循环体中套循环结构

14、。以双重循环使用较多。,软件延时程序。用循环程序将指令重复多次执行,实现软件延时。,试计算延时程序的执行时间。 源程序指令周期(M) 指令执行次数,DELAY:MOV R6,#64H1 I1: MOV R7,#0FFH1 I2: DJNZ R7,I22 DJNZ R6,I12 RET2,延时时间计算:(设时钟f=12MHz,M=1s) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,习题:试计算延时程序的执行时间。 源程序指令周期(M) 指令执行次数,DELAY:MOV R6,#1001 D1: MOV R7,#101 D2: N

15、OP1 DJNZ R7,D22 DJNZ R6,D12 RET2 计算延时程序的执行时间(设时钟f=6MHz)。,4-6 子程序子程序:能完成某项特定功能的独立程序段,可被反复调用。,4-6-1 子程序设计 一子程序入口用标号作为子程序名。 二调用子程序之前设置好堆栈。 三用返回指令RET结束子程序,并保 证堆栈栈顶为调用程序的返回地址。 四.子程序嵌套须考虑堆栈容量。 五.提供足够的调用信息: 如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,4-6-4 子程序的类型按子程序与主程序之间传递参数的方式分类。,入口参数:调用子程序之前,需要传给子

16、程序的参数。 出口参数:子程序送回调用程序的结果参数。,选用不同的参数传递方式。 1.寄存器传送参数 2.存储器传送参数 3.堆栈传送参数,设计子程序应满足通用性的要求,不针对具体数据编程。,4-7 算术运算程序4-7-1 多字节加减运算程序,1.多字节加法子程序,Z=X+Y。 ADDS:CLRC LOOP:MOVA,R0 ADDC A,R1 ;加一字节 MOVR0,A ;存和一字节 INCR0 ;修改指针 INCR1 DJNZ R2,LOOP ;全部字节加完? RET,习题1编写多字节减法子程序,Z=X-Y。 思考题修改程序使运算结果保存到其他存储单元。,4-7-2 多字节无符号数乘除运算,相加计算多字节乘法程序,步骤: 1.部分积清零。 2.检测乘数各位, 为1则部分积对位加被乘数,否

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号