单片机实用教程——单片机原理·汇编语言·接口技术第15讲

上传人:w****i 文档编号:92678851 上传时间:2019-07-12 格式:PPS 页数:19 大小:193.50KB
返回 下载 相关 举报
单片机实用教程——单片机原理·汇编语言·接口技术第15讲_第1页
第1页 / 共19页
单片机实用教程——单片机原理·汇编语言·接口技术第15讲_第2页
第2页 / 共19页
单片机实用教程——单片机原理·汇编语言·接口技术第15讲_第3页
第3页 / 共19页
单片机实用教程——单片机原理·汇编语言·接口技术第15讲_第4页
第4页 / 共19页
单片机实用教程——单片机原理·汇编语言·接口技术第15讲_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《单片机实用教程——单片机原理·汇编语言·接口技术第15讲》由会员分享,可在线阅读,更多相关《单片机实用教程——单片机原理·汇编语言·接口技术第15讲(19页珍藏版)》请在金锄头文库上搜索。

1、计算机完成某一具体的工作任务,必须按序执行一条条指令。这种按工作要求编排指令序列的过程称为程序设计(或编程)。 用汇编语言编写一个程序的过程大致可分为: 确定计算方法,定出运算步骤和顺序,把运算过程画成框图。 确定数据,包括工作单元的数量,分配存放单元。 按所使用计算机的指令系统,把确定的运算顺序(框图)写成汇编语言程序。,汇编语言程序设计,顺序结构程序是一种最简单、最基本的程序,按照程序编写的顺序依次执行,编写这类程序主要应注意正确地选择指令,提高程序的执行效率和尽可能节省存储空间。,顺序结构程序,例如:有两 组BCD码(如:1183H和5678H),分别存放在23H、22H单元和33H、3

2、2H单元,求它们的和,并送入43H、42H单元中去。(高位在前,低位在后) 解:,ORG 0000H MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END,此条加法指令可否改用带进位的(ADDC)?,此条加法指令可否改用带进位的(ADD)?,分支结构程序可根据程序要求无条件 或有条件地改变程序执行的顺序,选择 程序流向。 编写这类结构的程序主要是为了正 确使用转移指令,即无条件转移、条件 转移和散转。,分支程序,分支程序的典型实例,实例:已知VAR(30H单元)中有一变量X,要求编写一

3、程序按下述要求给Y赋值,结果存入FUNC(31H)单元。 +1, X0 Y = 0 , X = 0 1 , X0 题意:根据X的不同,程序编写时有三个出口,即有三个分支!,想一想:程序怎么编写?,0000,0011,1000,0011,分支程序实例-三分支程序,开始,XA,A= 1,A= 1,存结果,结束,Y,Y,N,N,程序框图:,A0?,A=0?,分支程序实例-三分支程序,源程序如下: ORG 2000H MOV A,30H JZ LP1 ;X = 0,转LP1处理 JNB ACC.7,LP2 ;X0,转LP2处理 MOV A,#0FFH ;X0,则Y= 1 SJMP LP1 LP2:MO

4、V A,#01 ;X 0,Y=1 LP1:MOV 31H,A ;存结果 SJMP $ ;循环等待,$表示转至 本地址,此方法适用 于一字节的偏移量,最高位为符号位。,散转程序,散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。 常用的指令是JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,形成散转的目的地址。,DPTR,+,A,PC,A中内容为8位无符号数0255,16位地址数,程序清单如下: JMP-128: MOV A,R7 RL A ;R72A (修正变址值) MOV DPTR,JPTAB ;

5、跳转表首送数据指针 JMP A+DPTR ;转向形成的散转地址人口 JPTAB : AJMP BRAN0 ;直接转移地址表 AJMP BRAN1 . AJMP BRANn,例如:128种分支转移程序。根据入口条件转移到128个目的地址。 根据R7的内容,转向各自对应的操作程序 (R7= 0,转入BRAN0;R7= 1,转入BRAN1R7= n,转入BRANn),通过前面的学习,我们知道AJMP addr11是2字节指令,所以这里2。 如果将AJMP addr11换成LJMP addr16,则这里3。,循环结构程序,在程序设计中,常遇到反复执行某一段程序,此时可用循环程序结构,这有助于缩短程序,

6、提高程序的质量。 循环结构的程序一般包括下面几个部分: 1置循环初值 置循环初值是设置用于循环过程工作单元的初始值。例如,设置循环次数计数器、地址指针初值、存放和数的单元初值等。 2循环体 重复执行的程序段部分。 3循环修改 在单片机中,一般用一个工作寄存器Rn作为计数器,给这个计数器赋初值作循环次数,每循环一次,对其进行修改。 4循环控制 判断控制变量是否满足终值条件,不满足则转去重复执行循环工作部分,满足则顺序执行,退出循环。,结束,Y,循环N次到否?,N,Y,2重循环初值,循环体,循环控制,内循环,外循环,循环程序设计,延时程序清单:,ORG 2000H 指令周期 MOV R0,#0AH

7、 2个T机器 DEL2: MOV R1,#MT 2个T机器 DEL1: NOP 1个T机器 NOP 1个T机器 DJNZ R1,DEL1 2 个T机器 DJNZ R0,DEL2 2个T机器 RET,指令周期、机器周期T机器与时钟周期T时钟的关系: T机器=12T时钟=121/fosc=1s (假设晶振频率fosc为12M),延时时间的简化计算结果: (1+1+2) 1s 10 MT,延时时间怎样计算?,若想延时10ms,只需修改计数初始值MT,即 (1+1+2) 10250s=10ms,在实际问题中,常常会遇到在一个程序中多次用到相同的运算或操作,若每遇到这些运算或操作,都从头编起,将使程序繁

8、琐、浪费内存。因此在实际中,经常把这种多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调用这些独立的程序段。通常将这种可以被调用的程序段称为子程序。,主要内容: 1. 主程序与子程序的关系 2. 子程序嵌套 3. 子程序的调用与返回,子程序设计,主程序与子程序的关系,主程序MAIN,返回,LCALL SUB,调用子程序,子程序入口地址,RET,例如:用程序实现ca2+b2 ,设a、b、c分别存于内部RAM DA、DB、DC三个单元。 编程说明:这个问题可以用子程序来实现,即通过调用子程序查平方表,结果在主程序中相加得到。 程序框图如右图所示。,主程序如下: STAR: MOV

9、A,DAH ACALL SQR ;调查表程序 MOV R1,A ;a2暂存R1中 MOV A,DBH ACALL SQR ;调查表程序 ADD A,R1 MOV DCH,A SJMP $ ;等待 子程序如下: SQR: INC A ;RET占用一个字节 MOVC A,A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END 该子程序入口条件(A)待查表的数,出口条件(A)=平方值。,1、读程序,回答问题 ORG 1000H MOV A,#39H MOV B,A ANL A,#0FH ADD A,#30H MOV R0,A MOV A,B A

10、NL A,#0F0H SWAP A ADD A,#30H MOV R1,A SJMP $ END R0=?、R1=?,思考题,39,33,1、已知8051使用的晶振频率为12MHZ,设计一个软件延时程序,延时时间为10MS。 2、利用子程序知识,设计一程序求A=23+43。,思考题,MOV R0,#50 L2:MOV R1,#50 L1:MOV R3,56H DJNZ R1,L1 DJNZ R0,L2 SJMP $,MOV R0,#2 ACALL L1 MOV R1,A MOV R0,#4 ACALL L1 ADD A,R1 SJMP $,L1:MOV A, R0 MOV B,R0 MUL AB MOV B,R0 MUL AB RET,

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

当前位置:首页 > 高等教育 > 其它相关文档

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