欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    单片机的编程技术优秀课件.ppt

    • 资源ID:89962389       资源大小:5.84MB        全文页数:70页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机的编程技术优秀课件.ppt

    单片机的编程技术第1页,本讲稿共70页 单片机与一般集成电路的区别在于可编程单片机与一般集成电路的区别在于可编程应用,程序是单片机应用系统的灵魂。应用,程序是单片机应用系统的灵魂。3.1 程序设计的方法和技巧程序设计的方法和技巧3.1.1程序设计流程程序设计流程 由于汇编语言是面向机器的语言,因此对单片机系统进由于汇编语言是面向机器的语言,因此对单片机系统进行程序设计时必须考虑硬件资源的配置。当硬件系统设计完行程序设计时必须考虑硬件资源的配置。当硬件系统设计完成后,可从以下几方面进行程序设计:成后,可从以下几方面进行程序设计:第2页,本讲稿共70页1.分析问题分析问题针对现有条件,明确在程序设计时应该针对现有条件,明确在程序设计时应该“做什么做什么”2.确定算法确定算法解决解决“怎样做怎样做”的问题的问题3.绘制程序流程图绘制程序流程图用图形的方法描绘解决问题的思路用图形的方法描绘解决问题的思路 (常用的程序流程图符号如图(常用的程序流程图符号如图3-1所示)所示)4.分配内存单元分配内存单元确定程序和数据区的起始地址确定程序和数据区的起始地址5.编写源程序编写源程序用指令的形式将程序流程图实现出来用指令的形式将程序流程图实现出来6.汇编汇编用开发机或仿真器将源程序转换成机器码,便于单片机识别用开发机或仿真器将源程序转换成机器码,便于单片机识别7.在线仿真调试在线仿真调试查错、改错,对程序进行优化。查错、改错,对程序进行优化。第3页,本讲稿共70页常用的程序流程图符号如图常用的程序流程图符号如图3-1所示。所示。图图3-1 常用的程序流程图符号常用的程序流程图符号第4页,本讲稿共70页3.1.2 3.1.2 汇编语言编程技巧汇编语言编程技巧 尽量采用模块化程序设计方法尽量采用模块化程序设计方法 ;这种设计方法是把一个完整的程序分成若干个功能相对独这种设计方法是把一个完整的程序分成若干个功能相对独立的、较小的程序模块,对各个程序模块分别进行设计、编立的、较小的程序模块,对各个程序模块分别进行设计、编制程序和调试,最后把各个调试好的程序模块装配起来进行制程序和调试,最后把各个调试好的程序模块装配起来进行联调,最终成为一个有实用价值的程序。联调,最终成为一个有实用价值的程序。模块化程序设计的优点是:对单个程序模块设计和调试比较方模块化程序设计的优点是:对单个程序模块设计和调试比较方便、容易完成,一个模块可以被多个任务共用。便、容易完成,一个模块可以被多个任务共用。尽量采用循环结构和子程序结构尽量采用循环结构和子程序结构;采用循环结构和子程序结构,可以使程序的总容量减小,采用循环结构和子程序结构,可以使程序的总容量减小,提高程序的效率,节省内存。提高程序的效率,节省内存。第5页,本讲稿共70页尽量少用无条件转移指令尽量少用无条件转移指令;少用无条件转移指令,可以保证程序的条理更加清晰,从而减少错误发生。少用无条件转移指令,可以保证程序的条理更加清晰,从而减少错误发生。充分利用累加器;充分利用累加器;累加器是主程序和子程序之间信息传递的桥梁,利用累加器传递入口参数或返回累加器是主程序和子程序之间信息传递的桥梁,利用累加器传递入口参数或返回参数比较方便。这时,一般不要把累加器内容压入堆栈。参数比较方便。这时,一般不要把累加器内容压入堆栈。对于通用子程序要保护现场;对于通用子程序要保护现场;由于子程序的通用性,除了保护子程序入口参数的寄存器内容外,还要对子由于子程序的通用性,除了保护子程序入口参数的寄存器内容外,还要对子程序中用到的其它寄存器内容一并入栈保护。程序中用到的其它寄存器内容一并入栈保护。对于中断处理,还要保护程序状态字对于中断处理,还要保护程序状态字 在中断处理程序中,既要保护处理程序中用到的寄存器内容,还要保护程序状态字在中断处理程序中,既要保护处理程序中用到的寄存器内容,还要保护程序状态字PSWPSW。否则,当中断服务程序执行结束返回主程序时,整个程序的执行可能会被打否则,当中断服务程序执行结束返回主程序时,整个程序的执行可能会被打乱。乱。第6页,本讲稿共70页 80C51单片机汇编语言的语句行由单片机汇编语言的语句行由4个字段个字段组成,汇编程序能对这种格式正确地进行识别。组成,汇编程序能对这种格式正确地进行识别。这这4个字段的格式为:个字段的格式为:标号:标号:操作码操作码操作数操作数;注释;注释 括号内的部分可根据实际情况取舍,各字段括号内的部分可根据实际情况取舍,各字段之间要用分隔符分隔。可用作分隔符的符号有冒之间要用分隔符分隔。可用作分隔符的符号有冒号、空格、逗号、分号等。如:号、空格、逗号、分号等。如:MAIN:MOV A,#68H ;A68H3.1.33.1.3汇编语言的语句格式汇编语言的语句格式第7页,本讲稿共70页1标号标号 标号是指令的符号地址。有了标号,程序中的其它语句才能标号是指令的符号地址。有了标号,程序中的其它语句才能很方便地访问该语句。有关标号的规定为:很方便地访问该语句。有关标号的规定为:标号要由标号要由18个个ASCII码字符组成,但必须以字母开码字符组成,但必须以字母开 头,其余字符可以是字母、数字或其它特定字符。头,其余字符可以是字母、数字或其它特定字符。不能使用汇编语言已经定义了的符号作为标号,如指令不能使用汇编语言已经定义了的符号作为标号,如指令 助记符助记符MOV、伪指令记忆符、伪指令记忆符END以及寄存器的符号名以及寄存器的符号名 称称R1等。等。标号后边必须跟冒号。标号后边必须跟冒号。同一标号在一个程序中只能定义一次,不能重复定义。同一标号在一个程序中只能定义一次,不能重复定义。第8页,本讲稿共70页2操作码操作码 操作码用于规定语句执行的操作。它用指令助记符或伪指令助记符操作码用于规定语句执行的操作。它用指令助记符或伪指令助记符表示,是汇编语句中唯一不能空缺的部分。表示,是汇编语句中唯一不能空缺的部分。3操作数操作数 操作数用于给指令的操作提供数据或地址。在一条语句中,可能没操作数用于给指令的操作提供数据或地址。在一条语句中,可能没有操作数,也可能只有有操作数,也可能只有1个操作数,还可能同时包含个操作数,还可能同时包含23个操作数。各个操作数。各操作数之间要以逗号分隔。操作数一般以下面几种形式出现:操作数之间要以逗号分隔。操作数一般以下面几种形式出现:u常数常数u工作寄存器名工作寄存器名u特殊功能寄存器名特殊功能寄存器名第9页,本讲稿共70页 u标号名标号名u符号符号“$”$”,表示程序计数器,表示程序计数器PCPC的当前值。如:的当前值。如:SJMP$SJMP$u表达式表达式4注释注释 注释不属于语句的功能部分,它只是对语句的解释说明,只注释不属于语句的功能部分,它只是对语句的解释说明,只要用要用“;”开头,就表明以下为注释内容。使用注释可使程序文开头,就表明以下为注释内容。使用注释可使程序文件的编制显得更加清楚,便于编程人员的阅读和维护。注释的长件的编制显得更加清楚,便于编程人员的阅读和维护。注释的长度不限,一行不够可以换行接着书写,但换行后仍要以度不限,一行不够可以换行接着书写,但换行后仍要以“;”开开头。头。第10页,本讲稿共70页 用户根据系统要求用汇编语言或高级语言编好的程序,叫源用户根据系统要求用汇编语言或高级语言编好的程序,叫源程序。程序。3.2.1 3.2.1 源程序的编辑和汇编源程序的编辑和汇编 由于通用微型计算机的普及,现在单片机应用系统的程序设计都由于通用微型计算机的普及,现在单片机应用系统的程序设计都借助于通用微型计算机。全过程可概括为借助于通用微型计算机。全过程可概括为“机器编辑机器编辑交叉汇编交叉汇编串串行传送行传送”三个部骤,如图三个部骤,如图3-23-2所示。所示。3.2 源程序的编制第11页,本讲稿共70页1.编辑编辑 将源程序输入计算机并进行修改的过程就是编辑。将源程序输入计算机并进行修改的过程就是编辑。编辑工作一般在编辑工作一般在通用微型计算机上利用各种编辑软件完成,故又称其为机器编辑。编辑通用微型计算机上利用各种编辑软件完成,故又称其为机器编辑。编辑完成后,生成一个由汇编指令和伪指令共同组成的完成后,生成一个由汇编指令和伪指令共同组成的ASCIIASCII码文件,其扩码文件,其扩展名为展名为“ASM”ASM”。图图3-2 3-2 单片机汇编语言程序的生成过程单片机汇编语言程序的生成过程 第12页,本讲稿共70页 计算机只能识别机器语言,但程序编制人员通常以汇编语言或计算机只能识别机器语言,但程序编制人员通常以汇编语言或高级语言编制源程序。这样,要让计算机能听从程序编制人员的指挥,高级语言编制源程序。这样,要让计算机能听从程序编制人员的指挥,就必须要就必须要将汇编语言或高级语言转换成机器语言,供计算机识别,将汇编语言或高级语言转换成机器语言,供计算机识别,这个过程称为汇编(或编译)。这个过程称为汇编(或编译)。汇编工作常由汇编软件来完成。汇编软件通常具有指令的错误汇编工作常由汇编软件来完成。汇编软件通常具有指令的错误识别与提示能力,为编程者迅速查找源程序中的错误提供了方便。识别与提示能力,为编程者迅速查找源程序中的错误提供了方便。在汇编过程中,我们只能发现源程序中的语法错误和一般性的逻辑在汇编过程中,我们只能发现源程序中的语法错误和一般性的逻辑错误,但不能检查程序结构上的错误。如果有错误,汇编软件会报错误,但不能检查程序结构上的错误。如果有错误,汇编软件会报告,指出错误位置及错误类型。程序错误被纠正后,要重新进行编告,指出错误位置及错误类型。程序错误被纠正后,要重新进行编译调试,直至程序汇编无误为止。译调试,直至程序汇编无误为止。现在常用的汇编方法是交叉汇编,即用现在常用的汇编方法是交叉汇编,即用PCPC机中的汇编程序去汇编机中的汇编程序去汇编80C5180C51单片机中的源程序。汇编后生成的机器码称为目标程序,扩展单片机中的源程序。汇编后生成的机器码称为目标程序,扩展名为名为“OBJOBJ”。该目标程序可通过。该目标程序可通过PCPC机的串行通信接口直接传送机的串行通信接口直接传送到开发系统的到开发系统的RAMRAM中。中。2.汇编汇编第13页,本讲稿共70页 在前面的课题与实训环节中用到的在前面的课题与实训环节中用到的ORGORG和和ENDEND命令就是典型的命令就是典型的伪指令,它们是为下一步的汇编工作提供起始地址和结束地址的。伪指令,它们是为下一步的汇编工作提供起始地址和结束地址的。我们知道,汇编语言程序的机器汇编是由计算机自动完成我们知道,汇编语言程序的机器汇编是由计算机自动完成的,因此在源程序中应该有向汇编程序发出的命令。的,因此在源程序中应该有向汇编程序发出的命令。这种在源程序中出现,通知汇编程序应该如何完成汇编这种在源程序中出现,通知汇编程序应该如何完成汇编工作的指令,就是伪指令。工作的指令,就是伪指令。下面介绍下面介绍80C5180C51单片机常用的伪指令。单片机常用的伪指令。3.2.2 3.2.2 伪指令伪指令第14页,本讲稿共70页1.ORG1.ORG(OriginOrigin)汇编起始命令)汇编起始命令格式格式为:为:ORG 16ORG 16位地址或标号位地址或标号 该命令总是出现在源程序的开始位置。用来规定目标程序(即此命令该命令总是出现在源程序的开始位置。用来规定目标程序(即此命令后面的程序或数据块)的起始地址。后面的程序或数据块)的起始地址。ORGORG后面通常是后面通常是1616位地址,也可以是已位地址,也可以是已定义的标号地址或表达式。如定义的标号地址或表达式。如ORG 1000HORG 1000H。在程序中如果不用在程序中如果不用ORGORG规定起始地址,则汇编得到的目标程序将从规定起始地址,则汇编得到的目标程序将从0000H0000H开始存放。开始存放。在一个源程序中,在一个源程序中,ORGORG指令可以多次使用,但要求地址值要由小到大依序排列,且指令可以多次使用,但要求地址值要由小到大依序排列,且不能出现空间上的重叠。不能出现空间上的重叠。2.END 2.END 汇编结束命令汇编结束命令格式为:格式为:ENDEND 该命令用于中止源程序的汇编工作。该命令用于中止源程序的汇编工作。ENDEND是汇编语言源程序的结束标志,是汇编语言源程序的结束标志,因此在整个源程序中只能有一条因此在整个源程序中只能有一条ENDEND指令,且位于程序的最后。如果指令,且位于程序的最后。如果ENDEND命令命令出现在源程序中间,对其后面的源程序,计算机将不予汇编。出现在源程序中间,对其后面的源程序,计算机将不予汇编。第15页,本讲稿共70页3.EQU3.EQU(EquateEquate)等值命令)等值命令格式为:格式为:标号名标号名 EQU 表达式表达式 该命令用来给标号赋值。赋值以后,其标号值在整个程序中有该命令用来给标号赋值。赋值以后,其标号值在整个程序中有效。例如:效。例如:DAT EQU 30H 4.DB(Define Byte)4.DB(Define Byte)定义字节命令定义字节命令格式为:格式为:标号:标号:DB 字节数据表字节数据表 该命令用于从标号指定的地址开始,连续存放字节数据表,该命令用于从标号指定的地址开始,连续存放字节数据表,常与查表指令常与查表指令MOVC配合使用。其中字节数据表可以是一个配合使用。其中字节数据表可以是一个或多个字节数据、字符串或表达式。例如:或多个字节数据、字符串或表达式。例如:DB “hello”第16页,本讲稿共70页5.DW(Define Word)5.DW(Define Word)定义字命令定义字命令格式为:格式为:标号:标号:DW 字数据表字数据表 该命令用于从标号指定的地址开始,连续存放该命令用于从标号指定的地址开始,连续存放16位字数据表。位字数据表。该数据表在程序存储器中存放的格式为:高该数据表在程序存储器中存放的格式为:高8位存放在低地址位存放在低地址单元,低单元,低8位存放在高地址单元。例如:位存放在高地址单元。例如:ORG 1000HTABLE:DW 1234H,66H 汇编后汇编后,(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=66H。DB和和DW定义的数据表,数的个数不能超过定义的数据表,数的个数不能超过80个。如遇数目较多时,个。如遇数目较多时,可以使用多个定义命令。在可以使用多个定义命令。在80C51程序设计中,常用程序设计中,常用DB来定来定义数据,义数据,DW来定义地址。来定义地址。第17页,本讲稿共70页6.BIT 6.BIT 定义位命令定义位命令 格式为:格式为:标号名标号名 BIT BIT 位地址位地址 该命令用来将位地址赋值给指定的标号名。例如:该命令用来将位地址赋值给指定的标号名。例如:KAIGUAN BIT P1.0KAIGUAN BIT P1.0将将P1.0P1.0的位地址赋值给标号的位地址赋值给标号KAIGUANKAIGUAN,在后面编程时就可以用,在后面编程时就可以用KAIGUANKAIGUAN来代替来代替P1.0P1.0。7.DS(Define Storage)7.DS(Define Storage)定义空间命令定义空间命令格式为:格式为:标号:标号:DS DS 表达式表达式 该命令用于从指定单元开始,预留一定数目的字节单元作存储该命令用于从指定单元开始,预留一定数目的字节单元作存储区,供程序运行使用。区,供程序运行使用。第18页,本讲稿共70页 程序结构通常分为三种形式:顺序结构、分支结构、循环结程序结构通常分为三种形式:顺序结构、分支结构、循环结构。形式如图构。形式如图3-33-3所示。所示。图图3-3 3-3 三种程序结构三种程序结构3.3 3.3 基本程序结构基本程序结构第19页,本讲稿共70页 顺序程序是最简单的程序结构,它既无分支,又无循环,顺序程序是最简单的程序结构,它既无分支,又无循环,在执行时单片机是按程序中指令的顺序逐条进行的。在执行时单片机是按程序中指令的顺序逐条进行的。编程注意事项:编程注意事项:正确选择程序存放的地址:通常主程序起始地址在正确选择程序存放的地址:通常主程序起始地址在0100H0100H之后,之后,但由于但由于80C5180C51单片机上电后从单片机上电后从0000H0000H开始执行,所以必须在开始执行,所以必须在0000H0000H设设一条转移指令,转至主程序首址。一条转移指令,转至主程序首址。要注意检查所用指令是否合法,在没有把握的情况下,最要注意检查所用指令是否合法,在没有把握的情况下,最好查一下指令表。如,下面的指令是非法的:好查一下指令表。如,下面的指令是非法的:MOVX 2002HMOVX 2002H,2000H2000H 为使程序运行结束时不至于跑飞,可在程序最后加一条暂停指令,为使程序运行结束时不至于跑飞,可在程序最后加一条暂停指令,如:如:SJMP$SJMP$。3.3.13.3.1顺序程序顺序程序第20页,本讲稿共70页例例1 将地址为将地址为2000H、2001H、2002H的片外数据存储单元的内的片外数据存储单元的内容分别传送到容分别传送到2002H、2003H和和2004H单元中去。单元中去。ORG 0000H AJMP 0100H ;转到主程序起始地址;转到主程序起始地址 ORG 0100H MOV DPTR,#2002H ;最后一个数据的起始地址;最后一个数据的起始地址 MOVX A,DPTR ;2002H单元的数据送单元的数据送A MOV DPTR,#2004H ;最后一个数据的目的地址;最后一个数据的目的地址 MOVX DPTR,A;2002H单元的数据送单元的数据送2004H单元单元 MOV DPTR,#2001H ;中间数据的起始地址;中间数据的起始地址第21页,本讲稿共70页 MOVX A,DPTR ;2001H单元的数据送单元的数据送A MOV DPTR,#2003H ;中间数据的目的地址;中间数据的目的地址 MOVX DPTR,A ;2001H单元的数据送单元的数据送2003H单元单元 MOV DPTR,#2000H ;第一个数据的起始地址;第一个数据的起始地址 MOVX A,DPTR ;2000H单元的数据送单元的数据送A MOV DPTR,#2002H ;第一个数据的目的地址;第一个数据的目的地址 MOVX DPTR,A ;2000H单元的数据送单元的数据送2002H单元单元 SJMP$END 还可以怎样修改?还可以怎样修改?第22页,本讲稿共70页 例例2 已知已知30H单元存有单元存有8位二进制数的位二进制数的BCD码,请将其转换为码,请将其转换为共阴显示的字形码,然后从共阴显示的字形码,然后从P1 口输出。口输出。设这些字形码存放在标号为设这些字形码存放在标号为TABLE 的存储单元。程序如下:的存储单元。程序如下:ORG 0000H AJMP MAIN ;转到主程序起始地址;转到主程序起始地址 ORG 0100H MAIN:MOV DPTR,#TABLE;字形码表首地址送;字形码表首地址送DPTR MOV A,30H ;取数;取数 MOVC A,A+DPTR ;查表取值送;查表取值送A MOV P1,A ;字形码送;字形码送P1 SJMP$TABLE:DB 3FH,06H,5BH,4FH,66H;04共阴字形码共阴字形码 DB 6DH,7DH,07H,7FH,6FH;59共阴字形码共阴字形码 END2查表程序查表程序第23页,本讲稿共70页 通常情况下,程序是顺序执行的,但我们也可以根据需要,在通常情况下,程序是顺序执行的,但我们也可以根据需要,在程序中安排一些控制转移指令,改变程序的执行方向,这就是分程序中安排一些控制转移指令,改变程序的执行方向,这就是分支程序。分支程序可以分为单分支和多分支等情况。支程序。分支程序可以分为单分支和多分支等情况。单分支程序结构如图单分支程序结构如图3-3(b)所示。)所示。当条件满足时顺序执行程序段当条件满足时顺序执行程序段A,否则执,否则执行程序段行程序段B。多分支结构如图多分支结构如图3-4所示。先将分支所示。先将分支按序号排列,然后按照分支的值来实现按序号排列,然后按照分支的值来实现多分支选择。多分支选择。图图3-4 3-4 多分支结构多分支结构3.3.2 分支程序分支程序第24页,本讲稿共70页 分支程序在单片机系统中应用较多,在编程时有许多技巧,设分支程序在单片机系统中应用较多,在编程时有许多技巧,设计要点如下:计要点如下:(1)(1)先建立可供条件转移指令测试的条件。先建立可供条件转移指令测试的条件。(2)(2)选用合适的条件转移指令。选用合适的条件转移指令。(3)(3)在转移的目的地址处设定标号。在转移的目的地址处设定标号。第25页,本讲稿共70页 3 3 已知内已知内RAM30HRAM30H单元存有一个单元存有一个ASCIIASCII码,试对其进行判断,如果是码,试对其进行判断,如果是“$”$”(24H24H),),将其存入将其存入40H40H,否则存入,否则存入31H31H单元。单元。程序如下:程序如下:ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV A,30H CJNE A,#24H,DY31 ;不是不是“$”,转去,转去ZY31 MOV 40H,A ;是;是“$”,存入,存入40H单元单元 AJMP END0 DY31:MOV 31H,A ;不是不是$,存入,存入31H单元单元END0:SJMP$END1单分支程序单分支程序第26页,本讲稿共70页(1)位操作程序位操作程序例例4 4 已知某信号灯电路如图已知某信号灯电路如图3-53-5,试编程实现如下功能:,试编程实现如下功能:S0S0单独按下,红灯亮,其余灯灭;单独按下,红灯亮,其余灯灭;S1S1单独按下,绿灯亮,其余灯灭;单独按下,绿灯亮,其余灯灭;S0S0、S1S1均按下,红、绿、黄灯全亮;均按下,红、绿、黄灯全亮;都不按下黄灯亮。都不按下黄灯亮。图图3-5 3-5 某信号灯电路某信号灯电路参考程序如下:参考程序如下:ORG 0000H LJMP START ORG 0100H START:ORL P1,#11000111B;P1.6、P1.7设为输入,红绿黄灯灭设为输入,红绿黄灯灭2多分支程序多分支程序第27页,本讲稿共70页 SS0:JB P1.7,SS1 ;S0未按,转判未按,转判S1 JB P1.6,RED ;S0按下,按下,S1未按,转红灯亮未按,转红灯亮 DL:CLR P1.2 ;红灯亮;红灯亮 CLR P1.1 ;绿灯亮;绿灯亮 CLR P1.0 ;黄灯亮;黄灯亮 SJMP SS0 ;重新检测;重新检测 SS1:JB P1.6,YELLOW ;S0未按,未按,S1未按,转黄灯亮未按,转黄灯亮GREEN:CLR P1.1 ;绿灯亮;绿灯亮 SETB P1.2 ;红灯灭;红灯灭 SETB P1.0 ;黄灯灭;黄灯灭 SJMP SS0 RED:CLR P1.2 ;红灯亮;红灯亮 SETB P1.1 ;绿灯灭;绿灯灭 SETB P1.0 ;黄灯灭;黄灯灭 SJMP SS0 第28页,本讲稿共70页YELLOW:CLR P1.0 ;黄灯亮;黄灯亮 SETB P1.2 ;红灯灭;红灯灭 SETB P1.1 ;绿灯灭;绿灯灭 SJMP SS0 END说明:说明:该程序只是说明位操作指令在分支程序中的应用方法,如果真要实现信号灯的点亮,还要在每段灯亮灭指令后加一段延时程序。第29页,本讲稿共70页 例例5 5 有一巡回检测报警装置,需对有一巡回检测报警装置,需对1616路输入信号进行控制,每路路输入信号进行控制,每路设有一个报警上限值(等于或超出此值即报警,置报警标志设有一个报警上限值(等于或超出此值即报警,置报警标志F0F0),),设设1616路输入信号存放在以路输入信号存放在以50H50H为首地址的内为首地址的内RAMRAM中,中,1616路报警上限值存路报警上限值存在以在以2000H2000H为首地址的为首地址的ROMROM中,试编制该程序。中,试编制该程序。程序如下:程序如下:START:MOV DPTR,#2000H;置;置16路报警上限值首地址路报警上限值首地址 MOV R0,#50H ;置;置16路输入信号数据区首地址路输入信号数据区首地址 MOV R7,#0 ;置;置16路输入信号的序号路输入信号的序号0 LOOP:MOV R1,R0 ;检测信号存;检测信号存R1 MOV A,R7 ;读输入信号序号;读输入信号序号 MOVC A,A+DPTR;查找该序号对应的报警上限值查找该序号对应的报警上限值 CJNE A,R1,NEXT ;与对应的输入信号比较;与对应的输入信号比较 AJMP ALAM ;输入信号等于报警上限值,转报警;输入信号等于报警上限值,转报警(1)字节操作程序)字节操作程序第30页,本讲稿共70页NEXT:JC ALAM ;输入信号超出报警上限值,转报警;输入信号超出报警上限值,转报警 INC R0 ;输入信号小于报警上限值,指向下;输入信号小于报警上限值,指向下 一路输入信号一路输入信号 INC R7 ;指向下一路输入信号序号;指向下一路输入信号序号 CJNE R7,#16,LOOP ;看;看16路是否全查完?路是否全查完?未完继续未完继续 CLR F0 ;16路全查完,清报警标志路全查完,清报警标志 AJMP$;暂停;暂停 ALAM:SETB F0 ;置报警标志;置报警标志 RET 第31页,本讲稿共70页3.3.3 3.3.3 循环程序循环程序 1循环结构循环结构 在程序设计时,常常遇到需要反复执行的某种操作,这时可编写一在程序设计时,常常遇到需要反复执行的某种操作,这时可编写一个程序段重复执行,这就是循环。循环程序一般包括个程序段重复执行,这就是循环。循环程序一般包括4部分,如图部分,如图3-6所所示。对这示。对这4部分的含义,我们以例题的形式加以说明。部分的含义,我们以例题的形式加以说明。例例6 6 编程实现以下数据传送功能:将编程实现以下数据传送功能:将BUFBUF为起始地址的为起始地址的5050个个数取反后,传送到以数取反后,传送到以DATADATA为起始地址的内存单元中。为起始地址的内存单元中。第32页,本讲稿共70页分析:如果采用顺序结构编写,程序会很麻烦,要执行50次从源地址中取数的MOV指令,50次数据取反的CPL指令,50次向目的地址送数的MOV指令。经过观察,我们发现,可以把顺序结构中重复执行的部分提取出来,编成一个独立的小程序段(即循环体部分),然后对这个小程序段重复执行50次(循环次数),这就构成了循环。图图3-6 循环结构循环结构第33页,本讲稿共70页 1.初始化初始化 规定循环体中各控制变量的初始状态。规定循环体中各控制变量的初始状态。2.循环体循环体 这是循环程序需要重复执行的部分。对这部分编程的时候要注意两个这是循环程序需要重复执行的部分。对这部分编程的时候要注意两个问题:问题:指令要具有通用性,程序要便于修改。指令要具有通用性,程序要便于修改。程序尽可能简化。程序尽可能简化。第34页,本讲稿共70页 (3)(3)循环修改循环修改 循环程序每执行一次,都要对数据的地址指针、循环次数等作循环程序每执行一次,都要对数据的地址指针、循环次数等作一次修改,这就是循环修改。一次修改,这就是循环修改。(4)(4)循环控制循环控制 根据循环结束条件,判断循环是否结束。常用作循环控根据循环结束条件,判断循环是否结束。常用作循环控制的变量是循环次数。制的变量是循环次数。第35页,本讲稿共70页参考程序如下:参考程序如下:START:MOV R0,#SBUF ;数据的源地址;数据的源地址 MOV R1,#DATA ;数据的目的地址;数据的目的地址 MOV R7,#50 ;循环次数;循环次数 LOOP:MOV A,R0 ;源地址中数据送源地址中数据送A CPL A ;取反;取反 MOV R1,A ;取反后的数据送目的地址;取反后的数据送目的地址 INC R0 ;源地址加;源地址加1,准备取下一个数,准备取下一个数 INC R1 ;目的地址加;目的地址加1,准备接收下一个数,准备接收下一个数 DJNZ R7,LOOP ;循环结束?未结束重新取数;循环结束?未结束重新取数 RET 循环程序按结构分,有单重循环与多重循环。在多重循环中,只允许外重循环嵌套内循环程序按结构分,有单重循环与多重循环。在多重循环中,只允许外重循环嵌套内重循环;不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。重循环;不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。第36页,本讲稿共70页 2循环结构的典型应用循环结构的典型应用定时定时 在单片机控制系统中,常有定时的需要,如定时中断、定时在单片机控制系统中,常有定时的需要,如定时中断、定时检测、定时扫描等。定时功能可以使用定时检测、定时扫描等。定时功能可以使用定时/计数器实现,但更计数器实现,但更多的是使用定时程序完成。多的是使用定时程序完成。定时程序是典型的循环程序,它通过执行一个具有固定定时程序是典型的循环程序,它通过执行一个具有固定延时时间的循环体来实现时间的推移,因此,又常把定时程延时时间的循环体来实现时间的推移,因此,又常把定时程序叫做延时程序。定时程序的延时时间不受器件的限制,只序叫做延时程序。定时程序的延时时间不受器件的限制,只要选择好循环初值,就可以实现几秒、几分、乃至几年的时要选择好循环初值,就可以实现几秒、几分、乃至几年的时间延迟。间延迟。第37页,本讲稿共70页(1)(1)单循环延时单循环延时 单循环延时是最简单的定时程序。如:单循环延时是最简单的定时程序。如:DELAYDELAY:MOV R7MOV R7,#TIME#TIME ;TIMETIME是循环程序控制变是循环程序控制变 ;量,可以取任意值量,可以取任意值 LOOPLOOP:NOP NOP NOP NOP NOP NOP DJNZ R7 DJNZ R7,LOOPLOOP 其中的其中的NOPNOP是空操作指令,它不做任何操作,只是消磨时是空操作指令,它不做任何操作,只是消磨时间。该程序段的延时时间可以这样计算:间。该程序段的延时时间可以这样计算:NOPNOP指令的机器周期是指令的机器周期是1 1,DJNZDJNZ指令的机器周期是指令的机器周期是2 2,因此循环一,因此循环一次共需次共需5 5个机器周期。如果单片机的晶振频率采用个机器周期。如果单片机的晶振频率采用12MHz12MHz,则一个,则一个机器周期是机器周期是1s1s,因此循环一次的延迟时间是,因此循环一次的延迟时间是5s5s。第38页,本讲稿共70页 延时程序中总的延时时间为延时程序中总的延时时间为5TIME(s),根据程序的需要,),根据程序的需要,TIME可以任意取值(不超过可以任意取值(不超过8位二进制的表示范围)。因此该程位二进制的表示范围)。因此该程序的最长延时时间是(序的最长延时时间是(TIME=0时)时)5256=1280(s)(2)(2)较长时间的延时较长时间的延时 单循环延时的延迟时间较短,为了延长定时时间,可以采用多重循单循环延时的延迟时间较短,为了延长定时时间,可以采用多重循环的方法。环的方法。例例7 编写延时编写延时1s子程序,要求:晶振采用子程序,要求:晶振采用12MHz,用三重循,用三重循环编写。环编写。分析:用分析:用12MHz12MHz晶振,机器周期是晶振,机器周期是1s1s,程序如下:程序如下:DELAY:MOV R7,#20 ;1s D1:MOV R6,#200 ;1s D2:MOV R5,#123 ;1s 第39页,本讲稿共70页 NOP ;1s DJNZ R5,$;2s,共(,共(2123)s DJNZ R6,D2;2s,共,共(2123+2+2)200s,即,即50ms DJNZ R7,D1;2s,共,共(2123+2+2)200+2+120+2=1000062s1s RET ;2s 在该程序中,改变不同的寄存器初值,可以实现不同的定时要求。在该程序中,改变不同的寄存器初值,可以实现不同的定时要求。(3)(3)以一个基本的延时程序满足不同的定时要求以一个基本的延时程序满足不同的定时要求 如果系统中有多个定时需要,我们可以先设计一个基本的延时程序,如果系统中有多个定时需要,我们可以先设计一个基本的延时程序,通过对这个基本延时程序的调用,实现所需的不同定时。如将例通过对这个基本延时程序的调用,实现所需的不同定时。如将例7延时延时1秒的秒的DELAY作为基本的延时程序,则实现作为基本的延时程序,则实现5秒、秒、10秒的调用情况如秒的调用情况如下:下:第40页,本讲稿共70页 MOV R0,#5 ;5s LOOP1:ACALL DELAY ;1s DJNZ R0,LOOP1 MOV R0,#10 ;10s LOOP2:ACALL DELAY ;1s DJNZ R0,LOOP2 例例8 已知某单片机温控系统每隔已知某单片机温控系统每隔50ms测一次温度,测得的测一次温度,测得的8位温位温度值存在特殊功能寄存器度值存在特殊功能寄存器SBUF中,请编程求其中,请编程求其1s的平均值,并存于的平均值,并存于60H中。(设中。(设1s采样温度总和不超过采样温度总和不超过255)程序如下:程序如下:AVR1S:MOV R2,#0 ;温度初值为;温度初值为0 MOV R4,#20 ;平均次数为;平均次数为20第41页,本讲稿共70页 LOOP:MOV A,SBUF ;读温度值;读温度值 ADD A,R2 ;温度求和温度求和 MOV R2,A ;回存;回存 LCALL DELAY50 ;延时;延时50ms,延时子程序略,延时子程序略 DJNZ R4,LOOP ;20次采样完否?未完继续次采样完否?未完继续 MOV A,R2 ;和存入;和存入A MOV B,#20 ;除数存入;除数存入B DIV AB ;求均值;求均值 MOV 60H,A RET 请尝试编写延时请尝试编写延时50ms子程序。子程序。第42页,本讲稿共70页3.4 3.4 程序设计实例程序设计实例3.4.1 数据极值查找程序数据极值查找程序 极值查找就是在指定的数据区极值查找就是在指定的数据区中挑出最大值或最小值。中挑出最大值或最小值。例例9 从内部从内部RAM30H单元开始单元开始存有存有8个无符号个无符号8位二进制数,请编位二进制数,请编程查找到最大值,并将其存放于程查找到最大值,并将其存放于40H单元。单元。分析:假定在比较过程中,分析:假定在比较过程中,用用A A存放大数,与之逐个比较的另存放大数,与之逐个比较的另一个数存放在一个数存放在2AH2AH单元。流程图见单元。流程图见图图3-73-7。图图3-73-7最大值查找程序流程图最大值查找程序流程图第43页,本讲稿共70页 程序如下:程序如下:MOV R1,#30H ;数据区首址;数据区首址 MOV R5,#08H ;数据区长度;数据区长度 MOV A,R1 ;读第一个数;读第一个数 DEC R5 ;修改数据长度;修改数据长度 LOOP:INC R1 MOV 2AH,R1 ;读下一个数;读下一个数 CJNE A,2AH,BJ ;数值比较;数值比较 AJMP LOOP1 BJ:JNC LOOP1 ;A值大,转移值大,转移 MOV A,R1 ;大数送;大数送A LOOP1:DJNZ R5,LOOP ;继续;继续 MOV 40H,A ;最大值送;最大值送40H SJMP$第44页,本讲稿共70页 3.4.2 3.4.2 数码转换程序数码转换程序 数码转换通常采用子程序调用的方法进行,即由子程序完成具数码转换通常采用子程序调用的方法进行,即由子程序完成具体的转换功能,而由主程序组织数据和安排结果。体的转换功能,而由主程序组织数据和安排结果。例例10 在内部在内部RAM的的

    注意事项

    本文(单片机的编程技术优秀课件.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开