原始教材资料lecture notes for pamc 06 - ch3_l2-2014151_第1页
原始教材资料lecture notes for pamc 06 - ch3_l2-2014151_第2页
原始教材资料lecture notes for pamc 06 - ch3_l2-2014151_第3页
原始教材资料lecture notes for pamc 06 - ch3_l2-2014151_第4页
原始教材资料lecture notes for pamc 06 - ch3_l2-2014151_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Lecture notes for Principle and Applications of Micro-Computers“微机原理及应用”讲义第6讲MCS-51单片机的汇编程序设计(1)(教材3.3节)教学目的: 掌握MCS-51单片机汇编程序设计方法要求: 掌握MCS-51单片机汇编程序设计结构和设计方法难点: 汇编程序设计方法本讲的主要内容n MCS-51单片机汇编程序的结构 几个常用的伪指令 汇编语言程序结构n MCS-51单片机汇编程序设计方法n MCS-51单片机汇编程序设计示例 例1, 循环程序设计n 包含的主要指令: DJNZ 例2, 查表和子程序(包含输入和输出参数)调用

2、n 包含的主要指令: MOVC, LCALL几个常用的伪指令n 伪指令由编译器来规定, 仅用于程序编译过程n 常用的伪指令 ORGaddr16 var var var DB DWEQUconstantDATAdirectBITbitconstant8, constant8, constant16, constant16, END汇编语言程序定义n 定义 汇编语言程序是多条指令陈述语句的有序组合, 并且是为了实现某个特定的控制目标和算法目的n 特点 指令的有序组合 为了特定的控制目标或算法目的n 从功能上看, 由下面几部分组成 启动和初始化程序(仅执行一次) 主程序(一个“死循环”) 子程序(某

3、些特定子功能的陈述单元)和中断程序汇编语言程序的结构以一个跳转语句开始中断程序的入口地址是固定的(简单解释中断的响应)讨论几个问题:(1) 为什么首句是一个跳转语句?(2) 几个ORG伪指令的作用是什么?(3) 如果没有任何中断程序, 必须采用这样的程序结构?ORG 0000HLJMP main_entry ; 启动程序入口ORG 0003HLJMP INT0_svr; 外部中断0程序入口; 其它中断程序入口ORG 0100Hmain_entry:; 启动程序和主程序MOVSP, #07HMOVPSW, #00HLCALLinit_8051 ; 初始化程序main_loop:LCALL Tas

4、k1 ; 子程序或子任务LJMPmain_loopTask1: END一个简单的汇编语言程序源码(见p.60)n 功能定时(周期性地)将一个变量从05H增加到FFH, 之后再重复该过程n 代码见教材p.60的3.3.1节存的0100H75815FMOVSP, #5FH; 堆栈底部位于60H放指令码首地址指令码指令(指令助记符和操作码)指令注释程序存储器中的代码形态 见教材p.62图3-1汇编语言程序设计方法n 软件功能分析, 根据功能合理划分成若干模块n 分别编写下面程序模块 根据资源, 确定堆栈, 寄存器组等初始位置, 编写启动程序 根据需要配置相关功能单元以及变量的初始状态, 编写初始化程

5、序 编写硬件相关的驱动程序 编写中断程序 编写功能模块对应的子程序 根据各子功能模块(和任务)之间关系, 编写主程序n 重点和难点: 编写功能模块对应的子程序汇编语言程序设计示例1n 功能计算n个无符号整型数之和n 要求 写成子程序形式 子程序的输入和输出参数n 输入: 数据个数存放在R4中, 数据的起始地址在R0中n 输出: 和存放在R4(高8位)和R5(低8位)中汇编语言程序设计示例1的源码MOV B, A ; 将和的高8位仍保存在B中MOV A, R5 ; 将临时保存在R5中的和的低8位传送到A中INC R0 ; 数据缓冲区指针加1, 指向下一个字节DJNZ R4, Sum1; 累加是否

6、继续?; 累加完成,和存放在B(高8位)和A(低8位)中MOV R4, B ; 将和的高8位传送到R4中POP PSW ; 从堆栈区恢复PSW的内容POP B; 从堆栈区恢复B的内容POP Acc; 从堆栈区恢复A的内容RETSum:PUSH Acc; 保存A的内容在堆栈区PUSH B; 保存B的内容在堆栈区PUSH PSW; 保存PSW的内容在堆栈区MOV A, #00H; 首先将和的低8位清零MOV B, #00H; 首先将和的高8位清零CLR C; 将进位位清零MOV R5, #00H; R5寄存器清零Sum1:ADDC A, R0; 将一个字节的数据加到和的低字节中MOV R5, A

7、; 保存和的低字节到R5中CLR A ; 累加器A清零ADDC A, B; 将进位位加到和的高8位中汇编语言程序设计课内练习1n 功能将片外扩展的数据存储器中的20个无符号整型数转移到片内数据存储器中n 要求 写成子程序形式 子程序的输入和输出参数n 输入: 保存原数据的起始地址为8000Hn 输出: 片内数据存储器的起始地址为80H汇编语言程序设计课内练习1续MOVR6,#20;n LOOP: MOV DPTR, #8000H;MOV R0,#80H; MOVX A, DPTR; MOV R0, A;INC DPTR INC R0DJNZ R6, LOOPRET汇编语言程序设计示例2n 功能

8、将一组6个十六进制数转换成对应的ASCII串(该字符串由12个字符顺序组成)n 要求 写成子程序形式 子程序的输入和输出参数n 输入: 保存原数据的起始地址为30Hn 输出: 保存ASCII串的起始地址为50H汇编语言程序设计示例2的源码(1)J用查表方法, 编写一个子程序, 实现单字节十六进制数到ASCII字符的转换ANL A, #0FHMOVC A, A+DPTR POP DPHPOP DPL POP PSW RETASCII_Table:DB0, 1, 2, 3, 4, 5, 6, 7DB8, 9, A, B, C, D, E, F请问:输入参数是? 输出参数是?THex2ASCII:

9、; 见教材p.71PUSH PSW PUSH DPL PUSH DPHMOV DPTR, #ASCII_Table MOV B, ASWAP AANLA, #0FH MOVC A, A+DPTR XCH A, B汇编语言程序设计示例2的源码(2)J编写一个子程序, 调用前一个子程序, 将6个字节十六进制数转换成一个字符串INCR1 MOV R1, A INCR1INCR0DJNZR7, ToStr POP BPOP Acc RET课内练习2:编写程序将n个字节的十六进制数要转换为一个字符串.(用示例1的参数)ToString:PUSH Acc PUSH BMOV R0, #30H MOV R1, #50H MOV R7, #6ToStr:MOV A, R0 LCALL THex2ASCII MOV R1, BMCS-51单片机汇编程序仿真和编译器n 一个简单易用的MCS-51单片机汇编程序编辑, 仿真和编译器 Proview 32 (from Frinklin Software Inc.) Version 3.3.4 Build

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论