slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
单元四 汇编语言程序设计 PowerPoint Presentation
Download Presentation
单元四 汇编语言程序设计

Loading in 2 Seconds...

play fullscreen
1 / 34

单元四 汇编语言程序设计 - PowerPoint PPT Presentation


  • 114 Views
  • Uploaded on

单元四 汇编语言程序设计. 4.1 任务七单片机计数. 4.2 任务八 LED 显示电路. 返回主目录. 4.1 任务七 单片机计数. 学习目标: 通过学习任务七的完成方法,掌握 MCS-51 单片机汇编语言中的伪指令的功能特点。 任务描述: 利用实验开发板上的 555 振荡电路产生的 4H Z 的脉冲信号进行计数,要求每计十个数单灯向左移动一次 。. 4.1.1 硬件电路. 4.1.2 程序设计. ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV TMOD,#06H

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '单元四 汇编语言程序设计' - giulio


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
单元四 汇编语言程序设计

4.1 任务七单片机计数

4.2 任务八LED显示电路

返回主目录

slide2
4.1 任务七 单片机计数

学习目标:

通过学习任务七的完成方法,掌握MCS-51单片机汇编语言中的伪指令的功能特点。

任务描述:

利用实验开发板上的555振荡电路产生的4HZ的脉冲信号进行计数,要求每计十个数单灯向左移动一次。

4 1 2
4.1.2 程序设计

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV TMOD,#06H

MOV TH0,#0F6H

MOV TL0,#0F6H

SETB TR0

MOV A,#0FEH

LOOP: MOV P1,A

JBC TF0,MLOOP

SJMP LOOP

MLOOP: RL A

SJMP LOOP

END

4 1 3
4.1.3 源程序编辑、编译、下载

硬件演示:用“伟福”模拟仿真软件进行程序的编辑、编译。

打开“ISP下载软件”将目标文件下载到ISP-4实验

开发板上的AT89S51单片机芯片,观察程序运行

结果。

提出问题:

1、ORG END这样指令有什么意义?

2、什么是伪指令?有哪些常用伪指令?

4 1 4
4.1.4 相关知识---伪指令
  • 什么是伪指令
    • 伪指令又称汇编程序控制译码指令,属说明性汇编指令。
    • 伪”字体现在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编时用的某些命令,在汇编时执行某些特殊操作。
    • 如EDN表示编译到此结束。
slide7
2.常用伪指令

(1 )定位伪指令ORG

格式:[标号:] ORG 地址表达式

功能:规定程序块或数据块存放的起始位置。

例如:ORG 1000H ;

MOV A,#20H

表示下面指令MOV A,#20H存放于1000H开始的单元

(2)定义字节数据伪指令DB

格式:[标号:] DB 字节数据表

功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。

slide8

例如:ORG 1000H

TAB: DB 2BH, 0A0H, ‘A’, 2*4;

表示从1000H单元开始的地方存放数据2BH,0A0H,41H(字母A的ASCII码),08H

(3) 定义字数据伪指令DW

格式:[标号:] DW 字数据表

功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。

例如:ORG 1000H

DATA: DW 324AH, 3CH ;

表示从1000H单元开始的地方存放数据32H,4AH,00H ; 3CH(3CH以字的形式表示为003CH)`

slide9

(4)定义空间伪指令DS

格式:[标号:] DS 表达式

功能:从指定的地址开始,保留多少个存储单元作为备用的空间。

例如: ORG 1000H

BUF: DS 50 ;

TAB: DB 22H ;22H存放在1032H单元。

表示从1000H开始的地方预留50(1000H~1031H)个存储字节空间。

slide10

(5) 符号定义伪指令EQU或“=”

格式:符号名 EQU 表达式 或 符号名=表达式

功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。

  例如:

LEN=10

SUM EQU 21H

MOV A,#LEN;执行指令后,累加器A中的值为0AH

slide11

(6)数据赋值伪指令DATA

格式:符号名 DATA 表达式

功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据可以放在程序末尾进行数据定义。

例如: …

MOV A,#LEN

LEN DATA 10

尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。

slide12

7. 数据地址赋值伪指令XDATA

格式:符号名 XDATA 表达式

功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。

例如:

DELAY XDATA 0356H

LCALL DELAY;执行指令后,程序转到0356H单元执行

8. 汇编结束伪指令END

格式:[标号:] END

功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。

slide13

小结:

1.伪指令在程序中的作用是什么?

2.单片机汇编语言程序中常用的有哪些伪指令?

思考与练习:4.2 4.3

4 2 led
4.2 任务八 LED显示电路

学习目标:

通过学习任务八的完成方法,掌握单片机汇编语言程序设计的结构化设计方法,如分支结构、循环结构、子程序结构、查表程序结构等。

任务描述:

将0~9这十个数循环送P1口七段LED上显示 。

4 2 2
4.2.2 程序设计

DELAY: MOV    R1,#0FFH   

 LOOP0: MOV    R2,#0FFH

LOOP1: DJNZ   R2,LOOP1

DJNZ   R1,LOOP0

        RET   

TABLE: DB     0C0H,0F9H,

DB     0A4H,0B0H

            DB     99H,  92H

            DB     82H,  0F8H

             DB     80H,  90H

              END       

START: ORG     0100H       

MAIN: MOV    R0,#00H    

MOV    DPTR,#TABLE

DISP: MOV    A,R0       

            MOVC  A,@A+ADPTR 

            MOV     P1,A       

           ACALL DELAY      

             INC     R0         

          CJNE    R0,#0AH,DISP

AJMP    MAIN

4 2 3
4.2.3 源程序编辑、编译、下载

硬件演示:用“伟福”模拟仿真软件进行程序的编辑、编译。

打开“ISP下载软件”将目标文件下载到ISP-4实验

开发板上的AT89S51单片机芯片,观察程序运行

结果。

提出问题:

单片机源程序有哪些常用结构形式?

一个应用系统的汇编语言源程序,无论其系统功能的要求简单还是复杂,其程序结构的组成基础总是由简单程序、分支程序、循环程序、子程序、查表程序等结构化程序块组合而成。

4 2 4 mcs 51
4.2.4 相关知识---MCS-51基础程序设计

入口

入口

入口

P

1

条件满足?

过程

P

2

条件满足?

过程A

过程B

P

3

出口

出口

出口

(b) 分支结构

(a) 顺序结构

(c) 循环结构

1. 单片机基本程序结构

slide19
2. 分支程序结构
  • (1)单分支程序结构
    • 只有一个入口
    • 两个出口
    • 条件中只有两种可能性出现
    • 条件一般由运算或检测的状态标志提供
    • 通常使用条件判断指令实现

Y

条件成立?

N

slide20

开始

开始

程序段1

程序段1

条件成立?

Y

条件成立?

N

Y

N

程序段(2)

分支程序(1)

分支程序(2)

程序段(3)

结束

程序段(2)

结束

单分支结构程序的典型形式
slide21

(A)=n

……

S0

Sn

S1

  • (2)多分支程序结构
    • 只有一个入口
    • 多个出口
    • 条件有多种可能性出现
    • 通常使用散转指令实现
    • JMP @A+DPTR
slide22
散转程序举例

采用转移指令表的散转程序

例: 编出要求根据R3的内容转向各个操作程序的程序。即当

(R3)=0,转向OPR0

(R3)=1,转向OPRl

(R3)=n,转向OPRn

解:程序清单如下:

MOV A,R3

RL A ;分支序号值乘2

MOV DPTR ,#BRTABL ;转移指令表首址

JMP @A+DPTR ;转向形成的散转地址

BRTABL:AJMP OPR0 ;转移指令表

AJMP OPR1

AJMP OPRn

slide23
3. 循环程序结构

(1)循环结构程序的基本组成

slide24

(2)循环结构程序举例

两条转移指令:

DJNZ Rn,rel ;以工作寄存器Rn为控制寄存器

DJNZ direct,rel ;以直接寻址单元作控制寄存器

控制计数器方式:

一般采用减1计数(递减方式)。

(3)多重循环结构程序

应用情况:复杂问题或是循环数超出256。

多重循环结构:即循环中包含循环程序或一个大循环中包含多个小循环程序,也称循环嵌套。

循环重数不限,但不能交叉。

slide25
例如:双重软件延时

START: MOV R3,#DATA1 ;外层循环计数初值

LOOP1: MOV R2,#DATA2 ;内层循环计数初值

LOOP2: NOP

NOP

NOP

DJNZ R2,LOOP2 ;(R2)-1≠0,转LOOP2

DJNZ R3,LOOP1 ;(R3)-1≠0,转LOOP1

END ;结束

slide26
4. 子程序结构
  • (1)子程序的结构
    • 子程序的结构
    • A、必须标明子程序的入口地址,又称首地址,以便在主程序调用;
    • B、必须以返回指令RET结束子程序。
    • 参数传递
    • A、传递数据
    • B、传递地址。
    • 主程序的现场保护和恢复
    • A、调用前保护、返回后恢复。
    • B、调用后保护、返回前恢复。
slide27

A、调用前保护、返回后恢复

主程序

PUSH PSW ;将PSW、A、DPTR等入栈保护

PUSH ACC

PUSH B

PUSH DPL

PUSH DPH

PUSH PSW,#10H ;选用工作寄存器组2,将0组保护

LCALL addr16 ;调用子程序addr16

POP DPH ;出栈

POP DPL

POP B

POP ACC

POP PSW

slide28

B、调用后保护、返回前恢复

ADDR:PUSH PSW ;子程序现场保护

PUSH ACC

PUSH B

PUSH DPL

PUSH DPH

MOV PSW,#08H ;选用工作寄存器组1,0组保护

…………… ;子程序主体

POP DPH ;现场恢复

POP DPL

POP B

POP ACC

POP PSW

RET ;返回

slide29
4. 子程序结构
  • (2)子程序的特性
    • 通用性
    • 浮动性
    • 可递归性
    • 子程序的说明文件
      • 子程序名:标明子程序功能的名称。
      • 子程序功能:简要说明子程序能完成的主要功能,包括重要算法、参量要求及有关存储单元配置等。
      • 子程序调用:指明本子程序还需调用哪些子程
      • 程序流程图及程序清单。
slide30
5. 查表程序结构
    • 查表指令
  • MOVC A,@A+DPTR
  • MOVC A,@A+PC
    • DPTR作为基地址查表
    • A、将待查表格的首地址置入DPTR基址寄存器;
    • B、将待查的表格具体项数值置入变址寄存器A中;
    • C、执行指令
    • PC作为基地址查表
    • A、表格不能放在查表指令的下一条。
    • B、表格下移若干字节。
    • C、A赋初值时使用
    • ADD A,#DATA;
    • #DATA为表格与查表指令之间的地址差。
slide31
查表程序举例

使用MOVC A,@A+DPTR指令来查表,程序清单如下:

MOV DPTR,#JZ ;子程序入口地址表首址

RL A ;键码值乘以2

MOV R2,A ;暂存A

MOVC A,@A+DPTR ;取得入口地址低位

PUSH A ;进栈暂存

INC A

MOVC A,@A+DPTR ;取得入口地址高位

MOV DPH,A

POP DPL

CLR A

JMP @A+DPTR ;转向键处理子程序

JZ: DB RK0L ;处理子程序入口地址表

DB RK0H

DB RK1L

DB RK1H

DB RK2L

DB RK2H

┇ ┇

slide32
6. 单片机源程序的基本格式
  • 单片机应用系统源程序的基本格式及其部分地址分配示例:
  • ORG 0000H
  • LJMP START ;转向主程序
  • ORG 0003H
  • LJMP INTE0 ;转向外中断0服务子程序
  • ORG 000BH
  • LJMP INTTFO ;转向定时/计数器0服务子程序
  • …… ;可按实际需要设置服务子程序
  • ORG 0030H
  • START:MOV A,#00H ;主程序从0030H单元开始
  • MOV R1,#data
  • MOV R0,#00H
  • DJNZ R1,LOOP0
  • …… ;初始化程序段
  • …… ;主程序主体区段
slide33

ORG 3100H

  • A0: … ;子程序A0
  • RET
  • A1 … ;子程序A1
  • RET
  • ……
  • ORG 3100h
  • INTIE0: ;外部中断0中断服务程序
  • RETI
  • ORG 4800H
  • INTTFO: ;定时/计数器0中断服务程序
  • RETI
  • …… ;其他中断服务程序段
  • ORG 5500H
  • DBL0:DB 43,56, ;}固定表格参量区段
  • END ;结束
slide34

小结:

1.汇编语言程序设计中有哪些结构化程序类型?

2.子程序编制时要注意哪些问题?

思考与练习:4.21 4.23

实验实训:

项目5 控制转移和子程序调用课题

项目6 简单单片机应用实例设计

要求:课外完成编程、相关硬件安装、仿真与调试