第4章++80C51单片机汇编语言程序设计.PPT.ppt_第1页
第4章++80C51单片机汇编语言程序设计.PPT.ppt_第2页
第4章++80C51单片机汇编语言程序设计.PPT.ppt_第3页
第4章++80C51单片机汇编语言程序设计.PPT.ppt_第4页
第4章++80C51单片机汇编语言程序设计.PPT.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1.第四章汇编语言编程,高级语言,如C语言,汇编语言,如MCS-51指令,汇编,目标文件,编译源程序*。美国机械工程师学会*。语法格式,将源程序翻译成机器代码,计算机识别的二进制代码*。OBJ,编译,目标文件,2,本章结构,4.1单片机编程语言概述4.4汇编语言及其伪指令的编辑和汇编4.2汇编语言程序序列的基本结构形式程序结构分支程序结构循环程序结构4.3汇编语言编程实例,3,4.1.1编程语言和语言处理程序,编程语言:机器语言,汇编语言和中级及高级语言1。机器语言:硬件识别、二进制、无翻译、直接执行、面向机器;速度快,效率高,难以识别和记忆,容易出错,难以修改。4.1概述,地址机器代码源程序ORG2000H2000H7830MAIN:MOVR0,#30H2002HE6MOVA,R0,4,2。汇编语言:由字母和数字符号组成,翻译成机器语言,由中央处理器执行;它是面向机器的,编译后的执行速度接近机器语言,易于阅读,容易出错,但必须熟悉指令系统,移植性差。该程序精细而具体,结构紧凑,运行时间准确,效率高。当计算量大且实时性要求高时,通常使用汇编语言。地址机器码源程序ORG2000H2000H7830MAIN:MOVR0,#30H2002HE6MOVA,R0,5,3。中级和高级语言:面向过程和面向对象。提及数学语言类似于日常会话语言。在高级语言中,一条高级语言指令可以代替几条到几百条汇编指令。直观、易于学习、易于移植(通过编译器),但在执行前还需要编译并解释成机器代码。汇编语言特性及其格式P77,2。语句格式标签:操作码操作数,;注(1)。标签:标签由1-8个ASCII字符组成,但第一个字符必须是字母,其余字符可以是字母、数字或其他特定字符。已在此汇编语言中定义的符号不能用作标签,如指令助记符、伪指令助记符和寄存器符号名。标签后面必须跟有“:”。同一标签在一个程序中只能定义一次,不能重复定义。情况是一样的。一个句子可以有标签,也可以没有标签。标签的存在与否取决于该程序中的其他语句是否需要访问该语句。7,错误标签正确标签1bt:bt1:begin begin:TB 105t:ta5t:add:add 1:3)操作数:参与运算的数据或数据地址。4)注意:解释,增加可读性,汇编时不生成任何机器码,8 . 4 . 1 . 3基本编程方法要求:执行速度快,占用内存少,组织清晰,易于阅读,易于移植,在能够完成指定功能任务的基础上巧妙实用。步骤:1。分析问题2。确定算法3。设计程序流程图4。分配存储单元5。编写汇编语言源程序6。组装并调试程序,。MCS-51汇编语言的伪指令:P93功能:告诉汇编程序如何在不生成机器码的情况下完成汇编。(1) ORG:起始伪指令原点表示程序和数据块的起始地址。指令地址机器代码源程序ORG2000H2000H7830MAIN:MOVR0,#30H2002HE6MOVA, 3000h3000h23db23h,100, a 3001h643002h41,10,(2),END汇编结束伪指令。P94示例:开始:结束(3),EQU分配伪指令。格式:EQU赋值项可以是常量、地址、标签或表达式;其值可以是8位或16位二进制数;分配的字符名称可以用作地址或立即数字。字符名称必须是以字母开头的字母数字字符串,并且之前不得定义。X1 equ 2000 hx2equ 0 FH main : mov dptr、#X1ADDA、# x2、11、(4)db-定义字节伪指令格式:labeldb将条目表中的字节数据存储为从标签开始的连续字节单位。条目表可以是一个字节,逗号分隔的字节字符串,或者是一个ASCII字符串;例如:org2300hseg:db0c2hdb30h,97h,100,“ac”装配结果:2300H=?2301H=?2302H=?12,(5)dw-定义字格式:label: dw用于定义16位地址表。组装后,每个16位二进制数按低地址高字节和高地址低字节的顺序存储。例如:org1000 htab: dw2030h,8ch,“ab”在组装后:(1000h)=20h,(1001 h)=30h,13,(6)ds-定义存储区域的伪指令格式:label ds从指定的地址开始,并保留指定数量的字节单元作为存储区域备用。例如:组装完成后,从1000地址开始将保留20个连续单元。注:对于MCS-51单片机,DB/DW/DS伪指令只能用于程序存储区,不能用于数据存储。位定义伪指令格式:位分配一个位单元,该位单元可以位寻址到指定的字符名称。例如,在X1BIT30HX2BITP1.0被组装之后,比特地址30H被分配给x1,并且对应于P1.0的比特地址(90H)被分配给X2。15、4.2汇编程序的基本结构,顺序程序结构分支程序结构单分支程序结构多分支程序结构循环程序结构,16、17、4.2.1顺序程序结构,汇编语言程序中最简单、最基本的程序结构。在程序执行期间,指令按顺序一个接一个地执行,没有分支、循环和子程序。ORG 0000 HLJMPMainMain :MOVA,# 30HADDA,# 58HMOV30H,ASJMP $,18,序列程序结构分析:找出执行实际功能操作的关键指令,然后使用与该指令相关的指令规则作为该指令的先前配置指令。还必须全面掌握指令占用的资源和操作的影响。Movr0、# 52hdecr1mova、# r0movr1、# 55hmova、 r0addca、 r1mova、 r0addca、 r1mov r0、aadda、 r1mov r0、aclramov r0、adecr0addca、# 00hdecr0decr1mov20h、a、19、4.2.2分支程序结构,程序分支通过传输指令实现,也称为选择结构。它可以分为单支和多支。单分支程序结构是通过条件分支指令实现的,即根据条件判断程序的执行情况,如果条件满足则转移程序,如果条件不满足则顺序执行程序。JZ、日本、日本、新西兰;JC、JNC、JB、JNB、JBC。多分支程序首先根据序列号排列分支程序,然后根据序列号值传送它们。说明:JMP DPTR,20,1。单分支程序结构。程序分支通过条件分支指令实现,即根据条件判断程序的执行。如果条件满足,程序将被转移。如果不满足条件,程序将按顺序执行。(1)无条件转让:LJMP、AJMP、SJMP(2)有条件转让:JZ、日本、日本、新西兰等。(3)逐位传输:JC、JNC、JB、JNB、JBC等。使用这些指令,可以进行各种条件判断,如0、1、正、负、相等、非相位等。可以完成。例4.2假设在外部随机存取存储器中有3个连续的单元ST1、ST2和ST3,其中两个8位无符号二进制数分别存储在ST1和ST2单元中。它被要求找出大量的数字并存储在ST3。启动:CLRCMOVDPTR,#ST1MOVXA, DPTR;取第一个数字movr2,aincdptrmovxa。 dptr取第二个数字subba,r2 jncbig1第二个数字变成了R2的BIG1XCHA第一个数字很大,整个字节交换继续进行,地址是DPTR;a;存储大量retbig 1:movxa。 dptr大量数据存储在ASJMPBIG0,22,2中。多分支程序结构。经常使用CJNE和JMPA DPTR指令。1.多个单分支:多个CJNE指令。2.JMP DPTR与数据表合作:有限范围,256字节。3.JMPA DPTR与分支指令合作:A的中值是分支指令的序列号和字节数的乘积。4.使用RET指令,通过堆栈操作实现:从入口地址表中取出分支地址后,将其推入堆栈,使用RET指令给出个人计算机分支地址。23,2.1使用多个CJNE指令,假设分支序列号值存储在累加器a中,可以使用温度控制系统,例如CJNEA,#data,rel,24,示例4.3,将收集的温度值(Ta)放置在累加器a中。此外,内部RAM54H单元存储控制温度被限制(T54),并且55H单元存储控制温度被限制(T55)。如果状态55,程序转到JW(冷却处理程序);如果状态55,转到冷却程序CNEA,54h,循环2;TaT54,45,R0:ASCII地址指针;R1:16二进制数存储地址指针;R7:十六进制数字段数main:movr0,# 30hmove1,# 60hmove7,# 08hab:a calltran。调用转换子程序SWAPA;高、低4位开关movx r1,a;储存在外部RAMINCR0ACALLTRAN中;调用转换子程序xchda。 r116位组件INCR0INCR1DJNZR7,AB;继续暂停: ajmphalttran : clrc。清除进位位movxa。 r0取ASCII子巴,# 30h减去30 HCJNEA,# 0AH,BBAJMPB : JCDonebc : Subba,# 07H大于或等于0AH,减去07HDONE:RET,46,3。单字节二进制数(0FFH)转换为双字节BCD码(0255)条目:a=二进制数退出:存储R0指定的单位占用资源:a,b,r0-binbcd:movb,# 100divabmov r0百分点,aincr0mova,# 10xcha,bdiva,b。A=十位数;B=一位数SWAPA。十个向高半字节的转变。BCD代码MOVR0,ARET,47,4.3.3定时程序,1。单循环计时程序NOP: 1机器循环MOV R5,循环计时时间:4机器循环时间最大计时时间:4机器循环?48,2。较长时间的计时程序采用多重循环的方法。例如,双环MOV R5,# TIME11机器循环回路2:movr4,# time21个机器循环回路LOOP1:NOP;1个机器周期NOP;1个机器循环DJNZR4、LOOP1;2个机器循环djnzr5,循环2;2个机器周期RET;两个机器周期计时时间:(时间221)时间1机器周期(21)机器周期,49,示例4-12:延迟编程。8051微控制器使用12兆赫兹的晶体振荡器,这需要软件方法来实现60毫秒的延迟程序。分析:2us30000=60ms延迟:movr7,# 200;1DL1:MOVR6,# 150;1DL2:DJNZR6,DL22DJNZR7,DL12SJMP$精确延迟时间:(300美国2美国1美国)2001美国=60.601毫秒,50,3。通过在循环程序段中增加或减少指令来调整定时时间,以便进行微调;这些指令在调整机器周期中起作用,被称为虚拟指令,如NOP。使用虚拟指令时注意:不要破坏有用存储单元的内容;不要破坏有用寄存器的内容;有用标志位的状态没有损坏;51,示例:晶体振荡器频率6mhz movr0,# timeR1,地址:1INCDPTR2NOP1DJNZR0,循环;2,52,4。为了用一个基本延迟程序来满足不同的延迟要求,首先设计一个基本延迟程序,使其延迟时间是每个定时时间的最大公约数;然后,这个基本程序被用作子程序,并通过不同的循环调用。例如,定时时间要求为5us、10us和20us;设计了一个1us的延时子程序,分别循环5次、10次和20次。53,4.3.4查找程序,1。查找指令MOVCA, DPTR可以给DPTR 16位地址;查找表范围64KB;数据表可以在64KB内任意设置,并且可以由多个程序块共享。MOVA, PCPC不能赋值,它的基址是固定的;表查找范围256B;该表单只能由该程序部分使用。示例1中的短程查找表设置程序中的数据表是1010h:02h 1011h:04h 1012h:06h 1013h:08h。执行程序为1000H:MOVA,# 0dh1002h: movca, apc1003h: movr0,结果为:(A)=02H,(R0)=02H,(PC)=1004H,55,例2远程表查找程序中的数据表为:执行程序:1000H:MOVA,# 10h 1002h:pushdp 1004h:pushdpl 1006h:mov dptr,#7000H1009H:MOVCA, 1100ah : popdpph 100ch: popdpl的结果如下:(a)=(PC)=(dptr)=,7010h:02h 7011h:04h 7012h:06h 7013h:08h,02h100eheh初始值高低字节交换,56,4.3.5数据极值搜索程序,例如,内部RAM20H单元开始存储8个无符号8位二进制数,并找到假设在比较过程中,最大数量存储在A中,而另一个被逐个比较的数量以2AH为单位。比较后,将找到的最大数量发送到2BH单元。占用资源R0:数据区头地址R7:数据区长度,57,58,movr0,# 20mover7,# 08hmova, r0decr7loop : incr0mov2ah, r0cjina,2ah,chkchk : jn cloop 1;a大,传送mova, r0loop 1: djnzr7,loopmov2bh,ahere : ajmphere,59,4.3.6数据排序程序,1。算法描述(冒泡方法)冒泡方法:交换相邻的数字

温馨提示

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

评论

0/150

提交评论