单片机ppt课件.ppt

上传人:牧羊曲112 文档编号:1552723 上传时间:2022-12-04 格式:PPT 页数:45 大小:222KB
返回 下载 相关 举报
单片机ppt课件.ppt_第1页
第1页 / 共45页
单片机ppt课件.ppt_第2页
第2页 / 共45页
单片机ppt课件.ppt_第3页
第3页 / 共45页
单片机ppt课件.ppt_第4页
第4页 / 共45页
单片机ppt课件.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《单片机ppt课件.ppt》由会员分享,可在线阅读,更多相关《单片机ppt课件.ppt(45页珍藏版)》请在三一办公上搜索。

1、第4章 汇编语言程序设计,4.1 概述 4.2 MCS-51汇编语言程序设计 顺序、循环、分支、子程序,4.1 概 述,4.1.1 计算机常用的编程语言 程序设计语言:低级语言和高级语言。 低级语言:机器语言 汇编语言: 采用特定的助记符号来描述机器指令 高级语言: 高级语言程序要经过解释程序或编译程序的编 译,形成目标程序后,才能执行。常用的高级语言:BASIC,FORTRAN,PASCAL,C等。,4.1.2 MCS-51汇编语言伪指令 1ORG(Origin) 汇编起始地址命令 功能:用于规定目标程序的起始地址。 格式: 标号: ORG 地址 地址项:16位绝对地址,也可以用标号或表达式

2、表示。如果不用ORG规定,则汇编得到的目标程序将从0000H开始。,一个源程序中,可多次使用ORG指令以规定不同程序段的起始位置。地址应从小到大顺序排列,不允许重叠。例如:ORG 4000HLJMP MAINORG 4200H MAIN:MOV A, 30H,2END(END of assembly)汇编终止命令 功能:用于终止源程序的汇编工作。 END之后的指令,汇编程序不予处理。 格式: 标号: END 表达式 只有主程序模块才有“表达式” 项,且“表达式”的值等于该程序模块的入口地址。而其他程序模块就没有“表达式”项。“标号:”也是选择项。 一个源程序只能有一个END命令。,3EQU(E

3、quate) 赋值命令 功能:用于给字符名称赋予一个特定值。赋值以后,其值在整个过程中有效。 格式: 字符名称 EQU 赋值项 “赋值项”:可以是常数、地址、标号或表达式。 8位或16位二进制数。赋值以后的字符名称即可作地址使用,也可作立即数使用。 PA8155 EQU 8001H给标号PA8155赋值8001H。,4DB(Define Byte) 定义数据字节命令 功能:用于从指定的地址单元开始,在程序存储器中存放字节数据。 格式:标号: DB 8位数表 例如: DB “how are you?” ;1个字节存放1个字符ASCII 常使用本命令存放数据表格,例如存放数码管显示的十六进制数的字

4、形码,可使用多条DB命令定义: DB C0H,F9H,A4H,B0HDB 99H,92H, 82H,F8H DB80H,90H, 88H,83H DBC6H,A1H,86H, 84H,查表时,为确定数据区的起始位置,可采用两种方法:(1)根据DB命令前一条指令的地址确定。例: 8100H MOV A, #49H (1字节) TAB: DB C0H, F9H, A4H, B0H(2)使用ORG 指令专门规定例: ORG 8100H TAB: DB C0H, F9H, A4H, B0H 定义的数码管字形码从8100地址开始存放。,5DW(Define Word)定义数据字命令 功能:用于从指定地址

5、开始,在程序存储器单元中定义16位的数据字(两个字节)。 格式: 标号: DW 16位数表 存放规则:高8位在前(低地址),低8位在后(高地址)。例: DW 100H,1ACH ;按顺序存01H, 00H, 01H, ACH DW “AA” ;存入41H,41H(ASCII码) DW“A” ;存入00H,41H DW “ABC” ;不合法,大于两个字节,注意: DB和DW定义的数表,数的个数不得超过80个。如果数据的数目较多时,可使用多个定义命令。 在 MCS-51程序设计应用中,常以DB定义数据,以DW定义地址。,6DS(Define Storage) 定义存储区命令 功能:用于从指定地址开

6、始,保留指定数目的字节单元为存储区,供程序运行使用。汇编时对这些单元不赋值。 格式: 标号: DS 16位数表 例: ADDRTABL: DS 20 例: ORG 8100H DS 08H注意:对MSC-51单片机来说,DB、DW、DS命令只能对程序存储器使用,不能对数据存储器使用。,7BIT 位定义命令 功能: 用于给字符名称赋以位地址。 格式: 字符名称 BIT 位地址 例如: AAA BIT 40HBBB BIT 50H,4.2 MCS-51汇编语言程序设计 汇编和高级语言程序设计的过程: 首先对问题进行分析,然后确定算法,再根据算法流程编写程序,最后是调试程序。 汇编语言程序设计的独特

7、点在于: (1) 用汇编语言进行程序设计时,对数据的存放、寄存器和工作单元的使用等要由设计者安排。而高级语言程序设计时,这些工作都由计算机软件安排,程序设计者不必考虑。,(2) 汇编语言程序设计要求设计人员必须对所使用的计算机的硬件结构有较为详细的了解。特别是对各类寄存器、端口、定时器/计数器、中断等内容要熟悉,以便在程序设计时能熟练使用。汇编语言程序共有四种结构形式: 顺序结构、循环结构、分支结构(选择结构)和子程序结构。,4.2.1 顺序程序 例4.1 设三字节无符号数相加, 被加数:在内部RAM 20H22H单元(低位在前),加数: 在内部RAM 30H32H单元(低位在前),结果: 存

8、于内部RAM2022H单元,进位位存于23H单元。 利用ADDC指令进行多字节加法运算。,ORG5000H MOVR0,#20H;被加数的低字节地址MOVR1,#30H;加数的低字节地址MOVA, R0ADDA, R1;低字节相加MOVR0,A;存放字节相加结果INCR0INCR1MOV A,R0ADDC A,R1;中间字节带进位相加MOVR0, A;存中间字节相加结果,INCR0INCR1MOV A,R0ADDC A,R1;高字节带进位相加MOV R0,A;存高字节相加结果 INC R0MOV A, #00HADDC A, #00HMOVR0, A;进位位送23HEND,例4.2 将片内RA

9、M 20H单元的内容拆成两段,每段4位。并将它们分别存入21H与22H单元中。 (20H) =0101, 1010=5AH (21H) =0AH ;存放低4位 (22H) =05H ;存放高4位,ORG 5000HSTART:MOV R0,#21H;R021H MOV A,20H;A(20H) ANL A,#0FH;A #0FH(A) MOV R0,A;(R0)(A),保存低4位INC R0;R0 (R0)1 MOV A,20H;A(20H) SWAP A;高低半字节交换 ANL A,0FH ;A 0FH MOV R0,A;(R0)(A)END,4.2.2 循环程序,循环程序一般由四个主要部分

10、组成: (1) 初始化部分: 为循环程序做准备, 如规定循环次数、 给各变量和地址指针预置初值。 (2) 处理部分: 为反复执行的程序段, 是循环程序的实体, 也是循环程序的主体。 (3) 循环控制部分: 这部分的作用是修改循环变量和控制变量, 并判断循环是否结束, 直到符合结束条件时, 跳出循环为止。 (4) 结束部分: 这部分主要是对循环程序的结果进行分析、 处理和存放。,循环:单重循环 多重循环(二重以上)循环嵌套。 在多重循环程序中,只允许外重循环嵌套内重循环程序,而不允许循环体互相交叉,另外,也不允许从循环程序的外部跳入循环程序的内部。,例4.3 把外部RAM 500050FFH单元

11、的内容清零。ORG 4200HSTART1:MOVR0, #00H;设置循环初始值MOVDPTR, #5000HLOOP1:MOVA, #00HMOVX DPTR, A;外部RAM单元清零INCDPTR;外部RAM单元加1INCR0;循环次数加1CJNER0, #00H, LOOP1 ;循环控制,不等转移END,例4.4 设三字节无符号数相加,被加数:内部RAM 20H22H单元(低位在前),加数: 内部RAM 30H32H单元(低位在前),结果:存于内部RAM 2022H单元,进位位存于23H单元。 利用ADDC指令进行多字节加法运算。,ORG4200H MOV R0,#20H;被加数的低字

12、节地址MOV R1,#30H;加数的低字节地址MOV R2,#03H;循环次数CLRCLOOP: MOV A, R0ADDC A, R1;低字节相加MOV R0,A;存放字节相加结果INC R0INC R1DJNZ R2, LOOP;循环控制,R2递减 不为零转移MOV A, #00HADDC A,#00HMOV R0, A;进位位送23HEND,例4.5 把内部RAM中起始地址为40H的数据串传送到外部RAM以5000H为首地址的区域,直到发现“$”字符的ASCII码为止。同时规定数据串的最大长度为32个字节。,ORG4200HMOVR0,#40H;内部RAM起始地址MOVDPTR,#500

13、0H;外部RAM起始地址MOVR1,#20H;最大串长LOOP:MOVA,R0;取数据CLR C;清进位位MOV R2,A;暂存SUBBA, #24H;判断是否为“$”JZQUIT;是,转“QUIT”MOVA,R2 ;不是,送入外部RAMMOVX DPTR,A INC DPTR;数据指针加1INC R0;R0加1DJNZ R1,LOOP;循环次数控制,R1 递减,不为零转移QUIT: END,例4.6 设MCS-51单片机的时钟频率为fosc = 6 MHz,试设计延时0.1s的延时程序。 延时程序所花费的时间是该程序指令的总机器周期数与机器周期的乘积。通常,延时程序采用MOV和DJNZ指令来

14、实现。单循环延时程序,最大的循环次数位256,则程序段为: MOV R0,#00H ;机器周期数为1 DJNZ R0,$ ;机器周期数为2若单片机晶振为6MHz,则一个机器周期为2us。延时时间:(1+2562)2s1026s。 需采用多重循环。,多重循环: 在一个循环体中又包含了其它的循环程序。 这种方式是实现延时程序的常用方法。 使用多重循环时, 必须注意: (1) 循环嵌套, 必须层次分明, 不允许产生内外层循环交叉。 (2) 外循环可以一层层向内循环进入, 结束时由里往外一层层退出。 (3) 内循环可以直接转入外循环, 实现一个循环由多个条件控制的循环结构方式。,MOVR7,#200

15、DELAY1:MOV R6,#125DELAY2:DJNZR6,DELAY2 ;1254500s0.5msDJNZR7,DELAY1 ;0.52000.1s该段程序的延时时间约为0.1006s若需延时更长时间,可采用多重循环,如1s延时可采用3重循环,而用7重循环可延时几年。,4.2.3 分支程序(选择) 分支程序的基本结构:单分支和多分支。其特点是:各处理模块是相互排斥的。,13条条件转移指令,分别为: JZ,JNZ: 累加器判零转移指令;CJNE: 比较条件转移指令,4条;DJNZ: 减1条件转移指令,2条; JC, JNC , JB,JNB,JBC: 位控制条件转移指令等四类。,例4.7

16、 x, y均为8位二进制数, x存放在VAR单元中,函数值y存放在FUNC中, 按下式给y赋值.,ORG4200HVAR EQU 40HFUNC EQU 50HSTART:MOVA, VAR;取xJZCOMP;为零转COMPJNBACC.7, POSI;x0, 转POSIMOVA, #0FFH;x0, (A)=1,补码SJMPCOMPPOSI:MOVA, #01HCOMP:MOVFUNC, A;保存结果END,例4.8 片内RAM DATA1和DATA2两个单元中存有两个无符号数字,将两个数中的小者存入30H单元。 ORG 4000HDATA1 EQU 34HDATA2 EQU 56HMOV

17、A,DATA1;第一数送ACLR CCJNE A, DATA2, BIGSJMP STORE;相等,DATA1作为小的数BIG: JC STORE;C=1跳转,即ADATA2MOV A, DATA2STORE:MOV30H, A;小者送RAM END,例4.10 假定R0中存放的是采集到的被按键键值,共有128个键值(0127),根据该键值转向不同键的处理程序中去。 跳转方法:逐个比较,类似CASE。 使用散转指令JMP A+DPTR 。 设(R0) 0 n,对应的处理程序入口地址分别为 PROG0PROGn,且按照一定的规律排列。,ORG 2000H MOV DPTR, #TAB ;设置处理

18、程序入口首地址 MOV A,R0 RL A ;为何要左移?NEXT:JMP A+DPTR ;转向形成的散转地址入口 TAB:AJMP PROG0 ;直接转移地址表 AJMP PROG1 AJMP PROGn,4.2.4 子程序设计 子程序与一般程序的主要区别是在子程序的末尾有一条子程序返回指令(RET),其功能是执行完子程序后通过将堆栈内的断点地址弹出到PC而返回到主程序中。 在编写子程序时应注意以下几点: (1) 要给每个子程序赋一个名字。 实际上是一个入口地址的代号。 (2) 要能正确地传递参数。 首先要有入口条件,说明进入子程序时它所要处理的数据如何得到,另外,要有出口条件,即处理的结果

19、是如何存放的。,(3) 注意保护现场和恢复现场。 注意保存主程序和子程序共同涉及的但值不同的累加器、寄存器和单元的内容。 保护现场: PUSH 恢复现场:POP(4) 注意子程序的通用性。主程序调用子程序的指令: “LCALL”,“ACALL”。子程序返回指令:RET。子程序可以嵌套,嵌套次数从理论上说是无限的,但实际上由于受堆栈深度的影响,嵌套次数是有限的。,例4.11 设有a,b,c三个数(09),存于内部RAM的 DATAA、DATAB、和DATAC三个单元。 编程实现: c = a2 + b2。 设DATAA、DATAB、DATAC分别对应内部RAM的40H、41H和42H单元。,OR

20、G5000HDATAAEQU40HDATABEQU41H DATACEQU42HSTART:MOV A,DATAA;取第一操作数ACALL SQR;调用查表程序MOV R1,A;a2暂存R1MOV A,DATAB;取第二操作数 ACALL SQR;调用查表程序ADD A,R1;Aa2b2MOV DATAC,A,子程序:SQR: INC A ;偏移量调整,为何? MOVC A,A+PC ;查平方表,PC自动累加1 RETTAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 END,例4.12 向P1口输出全高电平,延时1s后,再输出全低电平,延时1s后,再输出全高电平。主程序: ORG 5000HMAIN:MOV P1,#0FFHACALL DELAYMOV P1, #00HACALL DELAYSJMP MAIN END,子程序:DELAY:MOVR5,#10 ;假设Fosc=6MHzDELAY0:MOVR6,#200 DELAY1:MOV R7,#125DELAY2:DJNZR7,DELAY2DJNZR6,DELAY1DJNZR5,DELAY0 RET,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号