1 / 34

单元四 汇编语言程序设计

单元四 汇编语言程序设计. 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

giulio
Download Presentation

单元四 汇编语言程序设计

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单元四 汇编语言程序设计 4.1 任务七单片机计数 4.2 任务八LED显示电路 返回主目录

  2. 4.1 任务七 单片机计数 学习目标: 通过学习任务七的完成方法,掌握MCS-51单片机汇编语言中的伪指令的功能特点。 任务描述: 利用实验开发板上的555振荡电路产生的4HZ的脉冲信号进行计数,要求每计十个数单灯向左移动一次。

  3. 4.1.1 硬件电路

  4. 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

  5. 4.1.3 源程序编辑、编译、下载 硬件演示:用“伟福”模拟仿真软件进行程序的编辑、编译。 打开“ISP下载软件”将目标文件下载到ISP-4实验 开发板上的AT89S51单片机芯片,观察程序运行 结果。 提出问题: 1、ORG END这样指令有什么意义? 2、什么是伪指令?有哪些常用伪指令?

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

  7. 2.常用伪指令 (1 )定位伪指令ORG 格式:[标号:] ORG 地址表达式 功能:规定程序块或数据块存放的起始位置。 例如:ORG 1000H ; MOV A,#20H 表示下面指令MOV A,#20H存放于1000H开始的单元 (2)定义字节数据伪指令DB 格式:[标号:] DB 字节数据表 功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。

  8. 例如: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)`

  9. (4)定义空间伪指令DS 格式:[标号:] DS 表达式 功能:从指定的地址开始,保留多少个存储单元作为备用的空间。 例如: ORG 1000H BUF: DS 50 ; TAB: DB 22H ;22H存放在1032H单元。 表示从1000H开始的地方预留50(1000H~1031H)个存储字节空间。

  10. (5) 符号定义伪指令EQU或“=” 格式:符号名 EQU 表达式 或 符号名=表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。   例如: LEN=10 SUM EQU 21H … MOV A,#LEN;执行指令后,累加器A中的值为0AH …

  11. (6)数据赋值伪指令DATA 格式:符号名 DATA 表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据可以放在程序末尾进行数据定义。 例如: … MOV A,#LEN … LEN DATA 10 尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。

  12. 7. 数据地址赋值伪指令XDATA 格式:符号名 XDATA 表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。 例如: DELAY XDATA 0356H … LCALL DELAY;执行指令后,程序转到0356H单元执行 8. 汇编结束伪指令END 格式:[标号:] END 功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。

  13. 小结: 1.伪指令在程序中的作用是什么? 2.单片机汇编语言程序中常用的有哪些伪指令? 思考与练习:4.2 4.3

  14. 4.2 任务八 LED显示电路 学习目标: 通过学习任务八的完成方法,掌握单片机汇编语言程序设计的结构化设计方法,如分支结构、循环结构、子程序结构、查表程序结构等。 任务描述: 将0~9这十个数循环送P1口七段LED上显示 。

  15. 4.2.1 硬件电路

  16. 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

  17. 4.2.3 源程序编辑、编译、下载 硬件演示:用“伟福”模拟仿真软件进行程序的编辑、编译。 打开“ISP下载软件”将目标文件下载到ISP-4实验 开发板上的AT89S51单片机芯片,观察程序运行 结果。 提出问题: 单片机源程序有哪些常用结构形式? 一个应用系统的汇编语言源程序,无论其系统功能的要求简单还是复杂,其程序结构的组成基础总是由简单程序、分支程序、循环程序、子程序、查表程序等结构化程序块组合而成。

  18. 4.2.4 相关知识---MCS-51基础程序设计 入口 入口 入口 否 P 1 条件满足? 过程 是 否 P 2 条件满足? 过程A 过程B 是 P 3 出口 出口 出口 (b) 分支结构 (a) 顺序结构 (c) 循环结构 1. 单片机基本程序结构

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

  20. 开始 开始 程序段1 程序段1 条件成立? Y 条件成立? N Y N 程序段(2) 分支程序(1) 分支程序(2) 程序段(3) 结束 程序段(2) 结束 单分支结构程序的典型形式

  21. (A)=n …… S0 Sn S1 • (2)多分支程序结构 • 只有一个入口 • 多个出口 • 条件有多种可能性出现 • 通常使用散转指令实现 • JMP @A+DPTR

  22. 散转程序举例 采用转移指令表的散转程序 例: 编出要求根据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

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

  24. (2)循环结构程序举例 两条转移指令: DJNZ Rn,rel ;以工作寄存器Rn为控制寄存器 DJNZ direct,rel ;以直接寻址单元作控制寄存器 控制计数器方式: 一般采用减1计数(递减方式)。 (3)多重循环结构程序 应用情况:复杂问题或是循环数超出256。 多重循环结构:即循环中包含循环程序或一个大循环中包含多个小循环程序,也称循环嵌套。 循环重数不限,但不能交叉。

  25. 例如:双重软件延时 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 ;结束

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

  27. 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

  28. 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 ;返回

  29. 4. 子程序结构 • (2)子程序的特性 • 通用性 • 浮动性 • 可递归性 • 子程序的说明文件 • 子程序名:标明子程序功能的名称。 • 子程序功能:简要说明子程序能完成的主要功能,包括重要算法、参量要求及有关存储单元配置等。 • 子程序调用:指明本子程序还需调用哪些子程 • 程序流程图及程序清单。

  30. 5. 查表程序结构 • 查表指令 • MOVC A,@A+DPTR • MOVC A,@A+PC • DPTR作为基地址查表 • A、将待查表格的首地址置入DPTR基址寄存器; • B、将待查的表格具体项数值置入变址寄存器A中; • C、执行指令 • PC作为基地址查表 • A、表格不能放在查表指令的下一条。 • B、表格下移若干字节。 • C、A赋初值时使用 • ADD A,#DATA; • #DATA为表格与查表指令之间的地址差。

  31. 查表程序举例 使用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 ┇ ┇

  32. 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 • …… ;初始化程序段 • …… ;主程序主体区段

  33. 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 ;结束

  34. 小结: 1.汇编语言程序设计中有哪些结构化程序类型? 2.子程序编制时要注意哪些问题? 思考与练习:4.21 4.23 实验实训: 项目5 控制转移和子程序调用课题 项目6 简单单片机应用实例设计 要求:课外完成编程、相关硬件安装、仿真与调试

More Related