第七课 51单片机汇编程序设计_第1页
第七课 51单片机汇编程序设计_第2页
第七课 51单片机汇编程序设计_第3页
第七课 51单片机汇编程序设计_第4页
第七课 51单片机汇编程序设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、第7课51单片机汇编程序设计,汇编程序设计流程顺序程序设计条件分支程序循环程序模块,汇编程序设计流程,掌握基础的汇编语言编程,是理解微型计算机(单片机)的有效途径,不应认为有了C语言就完全可以不学汇编语言了。本章汇编语言侧重于理解程序指令流程,编程思想。汇编程序设计是把计算机执行任务的每一步细节都设计详细,然后转换为计算机可执行指令的过程。因此汇编程序一般都较长,较繁琐。但是执行效率却是最高的。因为用任何其他高级语言编写的程序,也都需要经过编译器自动编译成对应的汇编程序。,3-2.2顺序程序设计,故名思议:将程序语句一条一条按顺序执行下来,即完成整个任务的程序设计方式。例1:编程将外部数据存储

2、器的1000H和1020H单元的内容相交换。*首先需要想一想怎样验证程序执行的正确性*,一、顺序程序设计,为了验证程序:可以先向两个对应单元存储两个常数43H和78H。读写片外XRAM单元必须使用MOVX指令交换两个单元,则需要一个中间存储单元,ORG0000HMAIN:MOVDPTR,#1000HMOVA,#43HMOVXDPTR,A,MOVDPTR,#1020HMOVA,#78HMOVXDPTR,A,EXCH:MOVDPTR,#1000HMOVXA,DPTRMOVR1,A,MOVDPTR,#1020HMOVXA,DPTRMOVDPTR,#1000HMOVXDPTR,A,MOVDPTR,#1

3、020HMOVA,R1MOVXDPTR,AEND,例2:查表程序。设变量放在片内RAM的20H单元,取值范围09,要求编写查表程序,查出变量的平方值,并放入片内RAM21H单元.(注:所查表格为09的平方值的BCD码),程序思路:被查变量预先存储于20H单元,肯定是用MOV指令使用查表指令查表需要用DB伪指令定义BCD码的常数表格表格内容需要时09的平方值DPTR用于指向表格首地址,ORG0000H;起始地址MOV20H,#9;预先存一个数MOVDPTR,#BCDTAB;给DPTR赋表格首地址MOVA,20H;读取被查数MOVCA,A+DPTR;查表BCD送入AMOV21H,A;转存21H单元

4、SJMP$;本地挂起BCDTAB:DB00H,01H,04H,09H,16H,25H,36H,DB49H,64H,81H,例:一个十六进制数放在HEX单元的低四位,将其转换成ASCII码,查表程序:,解:,十六进制09的ASCII码为30H39H,AF的ASCII码为41H46H,,利用查表指令MOVCA,A+DPTR,先用伪指令DB或DW把表格的数据存入ROM,来获得数据,ASCII码表格的首址为ASCIITAB,编程1:,0123456789,ABCDEF,(A)=3,33H,(A)=15,46H,将内部RAM的20H单元中的8位无符号二进制数,转换为3位BCD码,并将结果存放在FIRST

5、(百位)和SECOND(十位、个位)两个单元中。,例3,解:,可将被转换数除以100,得百位数;余数除以10得十位数;最后余数即为个位数。,例如:255(十进制)除以100,得2(百位数)余数除以10,得5(十位数)最后余数5即为个位数,55H,程序(设(20H)=0FFH):,;除100,;百位BCD,;除以10,十位在A,个位在B,;除数10B,;十位数送高位,;A为十位、个位BCD,ORG0000H,;存十位、个位数,0FFH,64H,02H,37H,0AH,37H,05H,05H,50H,55H,02H,FIRST,SECOND,;余数A,例4:将片内20H单元的一个压缩BCD数(例如

6、36H)转换成2字节的ASCII码,分别存入40H,41H单元。思路:取出20H单元数据,高低4位拆分开,分别加上(位或)30H,则转换成ASCII码,再存储于40H,41H单元。,参考编程:ORG0000HMOV20H,#36HMOVA,20HANLA,#0FHORLA,#30HMOV41H,AMOVA,20HANLA,#0F0HSWAPAORLA,#30HMOV40H,A,换一个方法:ORG0000HMOV20H,#36HMOV40H,20HMOV41H,20HANL40H,#0FHORL40H,#30HMOVA,41HSWAPAORLA,#30HMOV41H,A,二、分支条件程序,先回顾

7、下C语言中分支条件语句有哪些?如何执行?(1)if(条件)执行(2)if(条件)执行1else执行2(3)if(条件1)执行1elseif(条件2)执行2(4)switch(表达式)case:break;,voidmain()chara,b,z;a=100;b=57;if(ab)z=a;if(ab)z=b;if(a=b)z=a+b;printf(“Outz=%dn”,z);,voidmain()chara,b,z;a=100;b=57;if(ab)z=a;elseif(ab)z=b;elsez=a+b;printf(“Outz=%dn”,z);,思考:上述两个例子程序在执行流程和执行结果上有个

8、区别?,一个C程序样例对比,条件分支的几种基本类型,程序段A,条件成立?,下条指令,Y,N,单分支条件=if,程序段A,条件成立?,下条指令,Y,程序段B,N,单分支条件=ifelse,多分支条件判断ifelseif.elseifelse,例1:在片内RAM中40H和41H单元有2个无符号数,编程比较这两个数的大小,并将大数存于内部RAM的GR单元,小数存于LE单元,如果两数相等,则分别送入GR和LE地址单元。验证:40H可先存入35H,41H先存入48H,GR和LE单元地址可分配为GR=30H,LE=31H算法分析:可采用CJNE指令,除相等比较外还可以通过CY标志位判断2个数的大小。,条件

9、判断程序样例,GREQU30HLEEQU31HORG0000HMOV40H,#35HMOV41H,#48HCMP:CLRC;清零CYMOVA,40HCJNEA,41H,NEQ;比较MOVGR,AMOVLE,ASJMP$,NEQ:JCLESSMOVGR,AMOVLE,41HSJMP$LESS:MOVLE,AMOVGR,41HSJMP$,例2:设30H单元存放的是一元二次方程ax2+bx+c=0根的判别式=b24ac的值。,试根据30H单元的值,编写程序,判断方程根的三种情况。在31H中存放“0”代表无实根,存放“1”代表有相同的实根,存放“2”代表两个不同的实根。,解:,为有符号数,有三种情况,

10、这是一多重分支程序即小于零,等于零、大于零。可以用两个条件转移指令来判断,首先判断符号位,用指令JNBACC.7,rel判断,若ACC.7=1,则一定为负数;此时0若ACC.7=0,则0。此时再用指令JNZrel判断若0,则0,否则=0,流程图:,0,=0,0,程序:,;0无实根,;=0有相同实根,;0转TOW,;有两个不同实根,模块类型3:循环程序模块,循环程序:类比while()、dowhile()和for(;),利用比较转移指令CJNE、减1不为“0”转移指令DJNZ等实现,例1:在内部RAM30H4FH连续32个单元中存放了单字节无符号数,求32个无符号数之和,并存入内部RAM51H,

11、50H中。,解:,这是重复相加问题,要设置一些工作单元设:R0做加数地址指针,R7做循环次数计数器,R3做和数的高字节寄存器。,程序的流程图如下:,流程图:,N,Y,N,Y,(A)+(R0)A,(R3)+1R3,程序:,;取被加数,;R0作加数地址指针,;CY=0,和256,则转,;作加法,;CY=1,加到高字节,;修改R0指针,;未完,重复加,;存和数,初始化部分,循环体部分,结束部分,循环执行直到R7=0,循环控制,程序:,实际延时:,例2:延时20ms子程序DELY,982=196s,1s,1s,设:主频为12MHZ,标准8051,2s,(196+2+2)100,+3,=20003s=2

12、0.003ms,2s,1s,+3,采用STC15W4K单片机,软件延时子程序可以用STC-ISP软件生成延时代码,子程序的调用和返回,汇编子程序同C语言中的用户子函数是类似的。把某些特定功能的程序段用子程序方式保存起来,以供随时调用。C语言用户子函数的调用和返回的过程对用户是不可见的,而单片机汇编程序的子程序调用和返回过程则是有明确的进口和出口的,逻辑非常清楚。通过例题理解子程序的调用和返回过程,子程序的调用和返回样例,ORG0000HMOVR0,#20HMOVA,#00HMOVR1,#10CPY:MOVR0,AINCR0INCADJNZR1,CPYMOVR0,#20HMOVR2,#10MOVR1,#30H*ORG0050H,TRANS:MOVA,R0LCALLLUKTBLMOVR1,AINCR0INCR1DJNZR2,TRANSSJMP$ORG0100HLUKTBL:MOVDPTR,#TBLMOVCA,A+DPTRRETORG0200HDB0,1,4,9,16,25,36,49,64,8

温馨提示

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

评论

0/150

提交评论