微机原理及应用06程序设计基础I2015_第1页
微机原理及应用06程序设计基础I2015_第2页
微机原理及应用06程序设计基础I2015_第3页
微机原理及应用06程序设计基础I2015_第4页
微机原理及应用06程序设计基础I2015_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、第 六 讲 51单片机言程序设计1微机原理及应用Principle and Applications of Micro-Computers教学目的:掌握MCS-51单片机汇编程序设计方法要求: 掌握MCS-51单片机汇编程序设计结构和设计方法掌握程序设计的模块化思路和分层设计思路;掌握如何使用高级语言访问MCU的片上资源难点: 掌握程序设计的模块化思路和分层设计思路 MCS-51单片机汇编程序的结构单片机汇编程序的结构 MCS-51单片机汇编程序设计方法单片机汇编程序设计方法 例例1, 循环程序设计循环程序设计 包含的主要指令包含的主要指令: DJNZ 包含的主要包含的主要C语言:语言:for

2、 ;whiledo内容汇编语言程序 定义定义汇编语言程序是多条指令陈述语句的有序组合汇编语言程序是多条指令陈述语句的有序组合, 并且是为并且是为了实现某个特定的控制目标和算法目的了实现某个特定的控制目标和算法目的特点指令的有序组合指令的有序组合为了特定的控制目标或算法目的为了特定的控制目标或算法目的从功能上看, 由下面几部分组成启动和初始化程序启动和初始化程序(仅执行一次仅执行一次)主程序主程序(一个一个“死循环死循环”)子程序子程序(某些特定子功能的陈述单元某些特定子功能的陈述单元)和中断程序和中断程序一个简单的汇编语言程序源码(见p.60) 功能 定时定时(周期性地周期性地)将一个变量从将

3、一个变量从05H增加到增加到FFH, 之后再重复之后再重复该过程该过程 代码见教材p.60的3.3.1节0100H 75815F MOV SP, #5FH ; 堆栈底部位于堆栈底部位于60H 存放指令码存放指令码的首地址的首地址指令码指令码指令指令(指令助记符和操指令助记符和操作码作码)指令注释指令注释2022-3-195定时(周期性地)将一个变量从05H增加到FFH, 之后再重复该过程ORG 0000HLJMP main_entry ; 启动程序入口启动程序入口ORG 0003HLJMP INT0_svr ; 外部中断外部中断0程序入口程序入口 ; 其它中断程序入口其它中断程序入口ORG 0

4、100Hmain_entry: ; 启动程序和主程序启动程序和主程序MOV SP, #57HMOV PSW, #00HLCALL init_8051 ; 初始化程序初始化程序main_loop:LCALL Task1 ; 子程序或子任务子程序或子任务LJMP main_loopTask1: END以一个跳转语句开始以一个跳转语句开始中断程序的入口地址是固定的中断程序的入口地址是固定的(简单解释中断的响应简单解释中断的响应)讨论几个问题讨论几个问题:(1) 为什么首句是一个跳转语句为什么首句是一个跳转语句?(2) 几个几个ORG伪指令的作用是什么伪指令的作用是什么?(3) 如果没有任何中断程序如

5、果没有任何中断程序, 必须采必须采用这样的程序结构用这样的程序结构?2022-3-196定时(周期性地)将一个变量从05H增加到FFH, 之后再重复该过程counter DATA 30HInitValue EQU 5 ORG 000H LJMP main ORG 100Hmain: MOV sp,#5FH MOV PSW,#00H MOV A,#0AH LCALL delay MOV couner,#InitValueForeverRun: ORG 0200Hdelay: #define InitValue 5unsigned char Counter;void delay(unsigned

6、char times) unsigned char i,j; for (i=time;i0;i- -) for(j=100;j0;j+);main(void) delay(10); Counter=InitValue; while(1) delay(100);Counter+; if (Counter=0 xFF) Counet=InitValue; 程序存储器中的代码形态见教材见教材p.62图图3-1内容 MCS-51单片机汇编程序的结构单片机汇编程序的结构 MCS-51单片机汇编程序设计方法单片机汇编程序设计方法 例例1, 循环程序设计循环程序设计 包含的主要指令包含的主要指令: DJNZ

7、 包含的主要包含的主要C语言:语言:for ;whiledo汇编语言程序设计方法软件功能分析, 根据功能合理划分成若干模块分别编写下面程序模块 根据资源根据资源, 确定堆栈确定堆栈, 寄存器组等初始位置寄存器组等初始位置, 编写启动程序编写启动程序 根据需要配置相关功能单元以及变量的初始状态根据需要配置相关功能单元以及变量的初始状态, 编写初始化程序编写初始化程序 编写硬件相关的驱动程序编写硬件相关的驱动程序 编写中断程序编写中断程序 编写功能模块对应的子程序编写功能模块对应的子程序 根据各子功能模块根据各子功能模块(和任务和任务)之间关系之间关系, 编写主程序编写主程序重点和难点: 编写功能

8、模块对应的子程序2022-3-1910模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充开发方法: 自上向下,逐步分解,分而治之2022-3-1911模块设计原则 模块独立 每个模块完成一个相对独立的特定功能。模块之间的关系力求简单。例如:模块之间最好只通过数据传递发生联系,而不发生控制关系。使用与模块独立的变量。模块内的数据,对于不需要这些数据的其他模块来说,应该不允许使用;对一个模块内的变量的修改不会影响其他模块的数据,即模块的私有数据只属于

9、这个模块。 模块规模适当 分解模块要注意层次要多层次的分解任务,注意对问题的抽象化,开始不要过于注意细节,以后再细化求精。2022-3-1912源程序文件1预编译命令说明部分执行部分函数1函数n源程序文件i源程序文件nC程序C程序结构模块化程序设计内容 MCS-51单片机汇编程序的结构单片机汇编程序的结构 MCS-51单片机汇编程序设计方法单片机汇编程序设计方法 例例1, 循环程序设计循环程序设计 包含的主要指令包含的主要指令: DJNZ 包含的主要包含的主要C语言:语言:for ;whiledo2022-3-1914程序设计 示例1功能 计算n个无符号整型数之和要求写成子程序形式子程序的输入

10、和输出参数输入: 数据个数存放在R4中, 数据的起始地址在R0中输出: 和存放在R4(高8位)和R5(低8位)中2022-3-1915程序设计 示例1的源码Sum: 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, R

11、0 ; 将一个字节的数据加到和的低字节中将一个字节的数据加到和的低字节中MOV R5, A ; 保存和的低字节到保存和的低字节到R5中中CLR A ; 累加器累加器A清零清零ADDC A, B ; 将进位位加到和的高将进位位加到和的高8位中位中 MOV B, A ; 将和的高将和的高8位仍保存在位仍保存在B中中MOV A, R5 ; 将临时保存在将临时保存在R5中的和的低中的和的低8位位传送到传送到A中中INC R0 ; 数据缓冲区指针加数据缓冲区指针加1, 指向下一个字节指向下一个字节DJNZ R4, Sum1 ; 累加是否继续累加是否继续? ; 累加完成,和存放在累加完成,和存放在B(高高

12、8位位)和和A(低低8位位)中中MOV R4, B ; 将和的高将和的高8位传送到位传送到R4中中POP PSW ; 从堆栈区恢复从堆栈区恢复PSW的内容的内容POP B ; 从堆栈区恢复从堆栈区恢复B的内容的内容POP Acc ; 从堆栈区恢复从堆栈区恢复A的内容的内容RET#define xDataPt (unsighned char*)0 x00)#define pR4 = (char *)0 x03;unsigned int DataSum(void) unsigned int i,result; CY=0; for (i=0;i*pR4;i+) result+=*(xDataPt+i

13、); *pR4 = result;2022-3-1916程序设计 课内练习1功能 将片外扩展的数据存储器中的10个无符号整型数转移到片内数据存储器中要求写成子程序形式子程序的输入和输出参数输入: 保存原数据的起始地址为8000H输出: 片内数据存储器的起始地址为80H2022-3-1917程序设计 课内练练习1续续 MOV R6,#20;LOOP: MOV DPTR, #8000H; MOV R0,#80H; MOVX A, DPTR; MOV R0, A; INC DPTR INC R0 DJNZ R6, LOOP RET void DataMove(void) unsigned int i

14、,result; char idata *DTo = (char *)0 x80; char xdata *DFrom; *DFrom= (char *)0 x8000; for (i=0;i20;i+) *(DTo+i)=*(DFrom+i); MCS-51单片机汇编程序仿真和编译器一个简单易用的MCS-51单片机汇编程序编辑, 仿真和编译器Proview 32 (from Frinklin Software Inc.)Version 3.3.4Build number 8.63获取方法网络上搜索网络上搜索总结MCS-51单片机汇编程序的结构单片机汇编程序的结构MCS-51单片机汇编程序设计方单片机汇编程序设计方法法例例1, 循环程序设计循环程序设计包含的主要指令包含的主要指令: DJNZ包含的主要包含的主要C语言:语言:for ;whiledo问题和讨论子程序的调用和返回过程都涉及堆子程序的调用和返回过程都涉及堆栈的操作栈

温馨提示

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

评论

0/150

提交评论