《单片机原理及应用》课件-第4章_第1页
《单片机原理及应用》课件-第4章_第2页
《单片机原理及应用》课件-第4章_第3页
《单片机原理及应用》课件-第4章_第4页
《单片机原理及应用》课件-第4章_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第4章MCS-51单片机程序设计方法

2025/10/171程序编制的步骤、方法和技巧4.1程序的编辑、编译和汇编4.2程序设计实例4.3

单片机应用系统由硬件系统和应用程序构成2025/10/172汇编语言高级语言

应用程序设计方法

汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。

高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。4.1程序编制的步骤、方法和技巧

任务分析2025/10/1734.1.1程序编制的步骤明确任务:功能要求、技术指标运行环境调研将实际问题转化为计算机处理的程序算法算法比较与优化(内存需求与运行速度)

算法设计

流程图符号2025/10/174

流程描述

“超级循环”框架强化模块观念2025/10/175使程序占用空间减少、结构清晰循环初值和结束条件,避免“死机”现象子程序的现场保护(注意栈平衡、寄存器内容)程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便4.1.2程序编制的方法和技巧采用循环和子程序对中断子程序还有注意保护PSW的内容2025/10/1764.2程序的编辑和汇编目标程序的产生过程如下图:标号(即符号地址)2025/10/1771.汇编语言的指令格式非数字字符开头,后跟字母、数字、“-”、“?”等不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号“:”Keil的汇编器A51可以识别的语句形式为:[标号:]指令助记符

[操作数1,][操作数2,][操作数3,][;注释]指令助记符是指令功能的英文缩写。操作数2025/10/178数据:二进制(B)十进制(D或省略D)十六进制(H),注意A~F开头时要加“0”ASCII码,如‘A’,‘1245’符号:符号名、标号或“$”(PC的当前值)表达式:由运算符和数据构成(见表4.1)注释英文分号“;”开头2025/10/179优先级运算符功能表达式及其结果示例高↓↓↓↓↓↓↓低·()括号4*(5+6)即44NOT、HIGH、LOW取反、取高字节、取低字节NOT55H即AAH;HIGH1234H即12H+、-正号、负号+5、-6*、/、MOD乘、除(取商)、取余数17/5即3;17MOD5即2+、-加、减5+4即9;5-4=即1SHL、SHR左移、右移2SHL2即8;8SHR2即2AND、OR、XOR与、或、异或45HAND0FH即05H<、>、=、<>、<=、>=比较运算符MOVA,X>8;若X>8为真,则为MOVA,01H若X>8为假,则为MOVA,00H2025/10/17102.汇编源程序的编辑

ORG0000HLJMPMAIN

ORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$

END依据汇编语言规则用好伪指令符号不用中文SJMP$

用于调试以.ASM存盘2025/10/1711源程序的汇编汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51.EXE汇编生成.OBJ、.LIB及.LST目标程序的连接.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51.EXE转换为.HEX文件.HEX文件经编程器写入单片机存储器2025/10/17123.伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码起始地址设定伪指令ORGORG表达式表达式通常为十六进制地址,例:

ORG8000HSTART:MOVA,#30H

…ORG可多次使用,但地址值的顺序要由小到大结束汇编伪指令ENDEND该伪指令位于源程序的最后一行。2025/10/1713定义字节数据表伪指令DB定义字数据表伪指令DW1000H[标号:]DB字节数据表如:ORG1000HDB-2,-4,-6,8,10,18FEHFCHFAH08H0AH12H1001H[标号:]DW字数据表ORG1400HDATA1:DW324AH,3CH

…1400H32H4AH00H3CH1401H1402H1403H大端模式2025/10/1714定义常值为符号名伪指令EQU符号名EQU常值表达式

LEN

EQU10

SUM

EQU21HBLOCK

EQU22HCLRAMOVR7,#LENMOVR0,#BLOCKLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOVSUM,A符号名为:地址常数段名字符串寄存器名位名比较:标号只能是地址2025/10/1715定义位地址为符号名伪指令BIT符号名BIT位地址表达式如:STBITP1.0;将P1.0的位地址赋给符号名STCFBIT0D7H;将位地址为D7H的位定义为符号名用BIT定义的“符号名”一经定义便不能重新定义和改变其它一些伪指令参见教材表4-14.2.2

C51源程序的编辑和编译1.C51源程序的编辑2025/10/1716#include<reg51.h>//预处理命令,用于包含头文件,宏定义等#defineLEDP1unsignedintm;//全局变量说明voiddelay_ms(void);//函数1声明voiddelay_us(void);//函数2声明......//其他函数声明/*主函数*/voidmain(void){unsignedchari;//局部变量说明

……

//执行语句{while(1)//主循环

……

//执行语句

}}/*其他函数*/voiddelay_ms(void)//函数1{

……

//执行语句}voiddelay_us(void)//函数2{

……

//执行语句}2025/10/17172.编译编译就是把文本形式源代码翻译成机器语言形式的目标文件的过程。(1)预编译预编译指的是在正式的编译阶段之前进行的预处理阶段。这一阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到预处理后的文件中。(2)编译第二个阶段是编译、优化阶段。经过预编译得到的输出文件中,只有常量,如数字、字符串、变量等的定义,以及C语言的关键字,如main、if、else、for、while、{、}、+、-、*、/等等。(3)汇编汇编是指把汇编代码翻译成目标机器指令的过程。对于被汇编系统处理的每一个C语言源程序,最终都将经过这一处理而得到相应的目标文件。目标文件中存放的就是与源程序等效的机器语言代码。(4)链接由汇编所生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题,例如:某个源文件中可能引用了另一个源文件中定义的变量或者函数;2025/10/17183.C51常用预处理指令预处理指令用途#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#elif如果前面的#if给定条件不为真,而当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#error停止编译并显示错误信息2025/10/17194.51单片机头文件详解C语言编程时往往第一行就是“文件包含”指令,51单片机的头文件为reg51.h或reg52.h,在这些文件中包含了很多对寄存器地址的声明。(1)“文件包含”的意义

“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。在编程的时候,如果某些定义和命令使用的频率很高,在使用这些定义和命令时,只需要在程序开头将这个文件包含进来就可以了(如#include<reg51.h>)。(2)寄存器及地址的声明

51单片机有21个特殊功能寄存器(SFR),每个SFR都有自己的字节地址,部分SFR还有独立的位地址,如果在编程的时候要使用这些寄存器,就需要事先声明这些寄存器的名称和地址。为此,C51采用了两种专属的变量说明指令sfr和sbit来声明寄存器名称和地址。

(3)头文件reg51.h原文及解释

reg51.h文件一般在C:\KEIL\C51\INC下

,在INC文件夹内还有一些其他的头文件。下面附出头文件reg51.h的原文,并把注释一并附后。2025/10/17204.3程序设计实例例题:用P2口作为输出口,控制8只发光二极管循环点亮,实现流水灯效果。电路如图4-3所示。4.3.1汇编程序设计DELAY:

MOVR4,#150

;延时子程序D1:

MOVR6,#200D2:

MOVR5,#250

NOP

DJNZR5,$

DJNZR6,D2

DJNZR4,D1

RET

END2025/10/1721

ORG0000H LJMPSTART ORG0040HSTART: MOVA,#0FEH

MOVR2,#8;设置循环次数LP: MOVP2,A;写P2口

RLA;循环左移

LCALLDELAY

DJNZR2,LP SJMPSTART

4.3.2

C51程序设计{LED=~(1<<i);

delay(20000); } i=0; }}voiddelay(unsignedintn)

//延时函数{ unsignedinti; for(i=0;i<n;i++);

//空循环

温馨提示

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

评论

0/150

提交评论