《单片机》-第4章 单片机的软件编程_第1页
《单片机》-第4章 单片机的软件编程_第2页
《单片机》-第4章 单片机的软件编程_第3页
《单片机》-第4章 单片机的软件编程_第4页
《单片机》-第4章 单片机的软件编程_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1主要内容汇编语言程序设计的一般步骤及方法汇编语言中的伪指令汇编语言典型程序设计24.1.1软件编程的步骤1.分析问题,明确任务2.确定算法3.制定程序流程图4.编写源程序5.汇编和调试34.1.2软件编程中的技巧1.尽量采用模块化程序设计方法2.合理地绘制程序流程图3.少用无条件转移指令,尽量采用循环结构和子程序结构4.充分利用累加器5.精心设计主要程序段6.对于中断要注意保护和恢复现场44.2汇编程序的汇编汇编就是将汇编语言转换成机器语言的过程。54.2.1伪指令为了方便对汇编语言源程序进行汇编,单片机指令系统允许使用一些特定的指令为汇编程序提供相关信息。ORGENDEQUDATADBDWDSBIT6起始地址伪指令ORG格式:

ORG16位地址功能:规定程序段或数据块的起始地址。汇编过程中,机器检测到该语句时,便确认了汇编的起始地址,然后把ORG伪指令下一条指令的首字节机器码存入16位地址所指示的存储单元内,其他的后续指令字节或数据连续依次存入后面的存储单元中。在一个源程序中,可以多次使用ORG指令,以规定不同的程序段的起始位置。但所规定的地址应该是从小到大,而且不允许重叠。7汇编结束伪指令END格式:

END功能:用来表示程序结束汇编的位置。

END一般用在汇编语言源程序的末尾,该伪指令后面的语句将不被汇编成机器码。一个汇编语言源程序可能有几个程序段组成,包括主程序和若干个子程序,但只能有一个END指令。

8赋值伪指令EQU格式:字符名EQU

数据或汇编符号功能:将该指令右边的值赋给左边的“字符名”

汇编过程中,EQU伪指令被汇编程序识别后自动将EQU后面的“数据或汇编符号”赋给左边的“字符名”。该“字符名”被赋值后,既可用作一个数据,也可用作一个地址。9数据赋值伪指令DATA格式:

字符名

DATA表达式功能:用来将右边表达式的值赋给左边的字符名。

此伪指令的功能与EQU类似。使用时它们的区别在于:(1)DATA可以先使用再定义,它可以放在程序的开头或结尾,也可以放在程序的其他位置,比EQU指令要灵活。(2)用EQU伪指令可以把一个汇编符号赋给一个字符名称,如R0,而DATA伪指令则不能。DATA伪指令在程序中常用来定义数据或地址。10定义字节伪指令DB格式为:

[标号:] DB8位数据或数据表功能:用来为汇编语言源程序在程序存储器中指定的地址单元开始定义一个或多个字节数据。该伪指令把右边“8位数据或数据表”中的数据依次存入程序存储器以左边标号为起始地址的单元中。此时,“8位数据或数据表”中的数据可用二进制、十进制、十六进制或ASCII码等形式表示,各数据间用逗号分隔。11定义字伪指令DW(DefineWord)格式为:[标号:]DW16位数据或数据表功能:用来为汇编语言源程序在程序存储器中指定的地址单元开始定义一个或多个字数据。

DW伪指令与DB伪指令的功能类似,区别仅在于DB定义的是字节,DW定义的是字,即两个字节。16位数据的存放顺序是高8位在前,低8位在后。12定义存储空间伪指令DS(DefineStorage)格式为:[标号:]DS表达式功能:用来从指定的地址单元留出一定量的字节空间作为备用空间。预留字节单元的个数由表达式决定。13举例例1:

ORG1000HTAB: DB 48H,100,11000101B,‘D’,‘6’,−2

例2:

ORG2000HTAB: DW345DH,45H,−2,‘BC’14ORG1000HDB 32H,7AHDS02HDW1234H,58H举例15位地址赋值伪指令BIT格式为:字符名BIT

位地址功能:用来将右边的位地址赋给左边的字符名。例如:ORG1000H X1BIT30H

X2BITP1.1START:MOV C,X1 MOV X2,C164.3典型程序设计举例

顺序结构分支结构循环结构174.3.1顺序结构程序设计1、顺序结构顺序结构程序在执行时是从第一条指令开始依次执行每一条指令,直到执行完毕。这种结构的程序虽然简单,它往往是构成复杂结构程序的基础。

例1:将20H单元的两个压缩BCD码拆开变成ASCII码,存入21H、22H单元。ORG0000HMOVA,20HMOVB,#10HDIVABORLB,#30HMOV22H,BORLA,#30HMOV21H,ASJMP$END

开始(20H)A10HBA/B(A中为高4位BCD码,B中为低4位BCD码)(B)+30HB(B)

(22H)(A)+30HA(A)

21H结束流程图汇编语言程序184.3.2分支结构程序设计通过对条件是否满足的判断,产生一个或多个分支,以决定程序的流向,这种程序称为分支程序。【例4-4】设内部RAM20H、21H两个单元中存有两个无符号数,试比较它们的大小,并将较大者存入20H单元中,较小者存放在21H单元中。编程思路:可将两无符号数相减后的CY标志作为判断条件,也可先用CJNE指令,再用CY标志作判断条件,比较两数大小。流程图如图所示。194.3.3循环结构程序设计结构特点:利用转移指令反复运行需要多次重复的程序段。循环程序的组成:

1.初始化部分(设定循环次数等)。

2.循环体(重复执行的部分,用于完成实际操作) 3.循环控制(不断修改和判别循环变量,直至结束)。

4.循环结束处理。循环次数的控制先判断再处理先处理再判断次数已知的循环程序常采用计数器控制,常采用“DJNZ”指令实现。次数未知的循环程序通常通过给定的条件标志来判断循环是否结束,一般会使用条件比较指令,如“CJNE”指令实现。20循环程序设计

有20个无符号数存放在内部RAM41H开始的存储单元中,试对它们求和并将结果存放在40H单元中(设和≤255)。

ORG 0100HCLR A MOV R7,#14H MOV R0,#41H LOOP:ADD A,@R0 INC R0 DJNZ R7,LOOP MOV 40H,A SJMP $END先处理后判断先判断后处理以下程序设计采用先处理后判断的结构21LED灯闪烁控制延时程序设计设置寄存器R1初值为199设置寄存器R7初值为250$代表当前指令的起始地址DL

标号:代表了延时程序的开始调用返回221S延时程序源程序:DELAY:MOVR2,#10DEL3:MOVR3,#200DEL2:MOVR4,#125DEL1:NOPNOPDJNZR4,DEL1DJNZR3,DEL2DJNZR2,DEL3RET典型循环程序234.3.4子程序设计通常将这些经常需要重复使用的、能完成某种基本功能的程序段单独编制成子程序,以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方执行一条调用指令,转到子程序中完成规定操作,再返回原来程序中继续执行下去,这就是所谓的子程序结构。241.子程序调用与返回子程序第一条指令所在的地址称为入口地址,该指令前必须有标号,最好以子程序所能完成的功能名作为标号。调用子程序指令ACALL或LCALL应放在主程序中。返回指令RET放在子程序的末尾。

4.3.4子程序设计252.参数的现场保护如果子程序使用的寄存器与主程序使用的寄存器有冲突,则应在转入子程序后首先采取措施保护现场。方法是将要保护的单元内容压入堆栈保存起来,在返回主程序之前将压入的数据再弹出到原工作单元,恢复主程序原来的状态,即恢复现场。

4.3.4子程序设计263.主程序与子程序的参数传递①利用工作寄存器R0~R7或者累加器A实现参数传递。②利用指针寄存器传送。③利用堆栈传送。

4.3.4子程序设计27制作任务

十字路口交通灯的设计要求:1、用4个发光二极管模拟十字路口交通灯的东西和南北向的红、绿灯。用一个LED数码管模拟倒计时显示。2、当东西方向红灯亮时,南北方向绿灯亮。当东西方向绿灯亮时,南北方向红灯亮。每隔5秒进行切换,由LED数码管从5倒计时显示。28编程思路各二极管在相应P1口线输出为0时发光。各阶段状态对应如下表:端口P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P1状态悬空悬空东西黄东西绿东西红南北黄南北绿南北红码值STATE011110110F6HSTATE111110101F5HSTATE211110011F3HSTATE311101110EEHSTATE411011110DEH29参考程序 ORG 0000H LJMP START ORG 0100HSTART:MOVSP,#50HSTATE0:MOVA,#0F6H ;初始状态全红灯

MOV P1,A MOV R2,#1 ;延时1秒

LCALL DELAYSTATE1:MOVA,#0F5H ;南北绿灯,东西红灯

MOV P1,A MOV R2,#20 ;延时20秒

LCALLDELAYSTATE2:MOVA,#0F3H ;南北黄灯,东西红灯

MOV P1,A MOV R2,#5 ;延时5秒

LCALLDELAY30参考程序STATE3:MOVA,#0EEH;南北红灯,东西绿灯

MOV P1,A MOV R2,#20 ;延时20秒

LCALL DELAYSTATE4:MOVA,#0DEH ;南北红

温馨提示

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

评论

0/150

提交评论