




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,单片机原理与应用Principle从0000H单元开始存放下面的指令LJMP0030HORG0030H;从0030H单元开始存放下面的指令MAIN:MOVSP,#50HORG0040H;从0040H单元开始存放下面的数据TAB:DB23,89,.,定义字节命令DB(DefineByte),在程序存储器中定义字节数据。Xn可以是一字节常数;用双引号或者单引号括起来的字符或字符串;各个数之间用逗号隔开。,DB,8,ORG1000HA1:DB01001010B,23o,23,78H,A2:DB5,”12AB”,12D,-2,(1000H)=01001010B=4AH,(1001H)=23o=13H,(1002H)=23=17H,(1003H)=78H,(1004H)=35H(5的ASCII码),(1005H)=31H(1的ASCII码),(1006H)=32H(2的ASCII码),(1007H)=41H(A的ASCII码),(1008H)=42H(B的ASCII码),(1009H)=12D=0CH(100AH)=-2=0FEH,【例】,.,定义数据字命令DW(DefineWord),在程序存储器中定义16位的数据字。存放时,数据字的高8位在低地址,低8位在后高地址。通常,DB用来定义数据,DW用来定义地址。,DW,DW“AA”;存入41H,41HDW“A”;存入00H,41HDW“ABC”;不合法,因为超过了两个字节DW100H,1ACH,-804;按顺序存入01H、00H、01H、0ACH、0FCH、0DCH,9,【例】,.,预留存储区命令DS(DefineStorage),在程序存储器中保留指定数目的单元作为预留存储区,供程序运行使用。,【例】ADDRTAB:DS20;从标号ADDRTAB代表的地址开始,预留20个;连续的地址单元。,DS,DB、DW、DS只能对于程序存储器使用,10,.,位定义命令BIT,把位地址赋给字符名称。,【例】:AQBITP1.0;把P1.0的位地址赋给字符名AQ,在其后;的编程中AQ可以作为位地址使用。,BIT,11,.,赋值命令EQU(Equate),给数或符号赋给字符可以是常数、地址、标号或表达式。赋值以后的字符既可以作地址使用,也可以作立即数使用。,【例】CSEQU0FFFFH,A1EQUR1A2EQU10HDELAYEQU0708H,A1可作为寄存器R1来使用,A2可作为8位直接地址或立即数使用,DELAY可作为16位地址或者立即数使用。,字符名EQU数或汇编符号,12,.,数据地址赋值伪指令DATA,将表达式的值赋给字符。表达式可以是一个数据或地址,也可以是一个包含所定义字符名在内的表达式,但不能是一个汇编符号(如R0R7)。与EQU的区别:EQU必须先定义后使用。DATA无此限制,所以DATA伪指令可以放在源程序的开头或末尾,MOVR0,ADDRESSMOVR1,#ADDRESSADDRESSDATA31H,将31H单元内容送R0,(R1)=31H。,字符名DATA表达式,13,.,汇编终止命令END(Endofassembly),用于终止源程序的汇编工作,在一个源程序中只能有一条END命令,并且位于程序的最后。如果END命令出现在程序中间,则其后面的源程序将不予处理。,14,.,一般汇编调试工具要求的汇编格式,一般用汇编语言编写的程序,要求指出该程序存放于内存地址的位置,并且将用到的数据和需要预留存放数据的空间用伪指令定义好然后编写程序代码最后用原地踏步或返回起始位置循环作为结束。,ORGSJMP$END,【例】程序格式如下:,15,16,.,汇编语言程序的基本结构形式,17,.,分支结构,使用条件转移指令对程序的执行结果进行判断JZ、JNZ、CJNE、DJNZJC、JNC、JB、JNB、JBC,18,.,【例】二分支。在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中存放着两个无符号二进制数,要求找出其中的大数并存入ST3单元中。,19,.,【例】三分支-多次二选一。设变量x存入30H单元,求得函数y存入31H单元。按下式要求给y赋值:,要根据x的大小来决定y值,在判断x5和y10时,采用CJNE和JC以及CJNE和JNC指令进行判断。,20,.,ORG1000HMOVA,30H;取xCJNEA,#5,NEXT1;与5比较NEXT1:JCNEXT3;x5,则转NEXT3CJNEA,#10,NEXT2;与10比较NEXT2:JNCNEXT4;x10,则转NEXT4MOVR0,#0;5x10,y=0SJMPNEXT5NEXT3:MOVR0,ADECR0;x5,y=x-1SJMPNEXT5NEXT4:MOVR0,AINCR0;x10,y=x+1NEXT5:MOV31H,R0;存结果SJMP$END,.,多分支转移,使用变址寻址转移指令(散转指令)JMPA+DPTR;PC(A)+(DPTR)数据表、转移指令表、堆栈操作,21,22,.,通过数据表实现程序多分支,MOVA,#k;分支序号k送AMOVDPTR,#BRTAB;表首址MOVCA,A+DPTR;查表后,(A)=BRk-BRTABJMPA+DPTR;散转指令,(PC)=BRkBRTAB:DBBR0-BRTAB;数据表,BRTAB+0DBBR1-BRTAB;分支入口地址与表首址之差,BRTAB+1DBBRn-BRTAB;BRTAB+nBR0:;各个分支程序BR1:BRn:,23,.,通过转移指令表实现程序多分支,MOVA,#k;分支序号k送ARLA;分支序号乘以2MOVDPTR,#BRTAB;表首址JMPA+DPTR;(PC)=BATAB+2kBRTAB:AJMPBR0;转分支程序0,BRTABAJMPBR1;转分支程序1,BRTAB+2AJMPBRn;转分支程序n,BRTAB+2nBR0:;各个分支程序BR1:BRn:,24,.,使用长转移指令LJMP时,,MOVA,#kRLAADDA,R3MOVDPTR,#BRTABJMPA+DPTRBRTAB:LJMPBR0;BRTABLJMPBR1;BRTA+3LJMPBRn;BRTAB+3n,25,.,通过堆栈操作实现程序多分支,MOVDPTR,#BRTAB;分支程序入口地址表首址MOVA,#k;分支序号放入A中RLA;分支序号值乘以2MOVR1,A;暂存A值入R1INCA;A指向低位地址MOVCA,A+DPTR;取低位地址BRn7-0PUSHACC;低位地址入栈MOVA,R1;恢复A值MOVCA,A+DPTR;取高位地址BRn15-8PUSHACC;高位地址入栈RET;分支入口地址装入PCBRTAB:DWBR0;分支程序入口地址表,BRTAB、BRTAB+1DWBR1;BRTAB+2、BRTA+3DWBRn;BRTAB+2n、BRTAB+2n+1,RETPC158(SP),SP(SP)-1PC70(SP),SP(SP)-1,26,.,循环结构,初始化部分对于循环次数计数器、地址指针赋初值,对于使用到的寄存器或者存储单元赋初值,为循环作准备。循环体部分为下一次循环创造条件:修改循环次数计数器、地址指针,避免死循环。循环的判断与控制:判断循环次数计数器,或者检查判断循环条件。可以直接由循环体内转到循环体外或外层循环;不能从循环体外直接跳转到循环体内,只能从外层向内层一层层进入。循环结束处理:结果保存等。,27,.,【例】单循环。编程实现把外部RAM中从8000H开始的100个字节数据传送到8100H开始的单元中。,MOVR7,#100MOVDPL,#00HLOOP:MOVDPH,#80HMOVXA,DPTRMOVDPH,#81HMOVXDPTR,AINCDPLDJNZR7,LOOP,MOVR0,#00LOOP:MOVP2,#80HMOVXA,R0MOVP2,#81HMOVXR0,AINCR0CJNER0,#100,LOOP,或,28,.,【例】由循环内部跳出循环。把长度为10H的字符串从内部RAM缓冲区inbuf向位于外部RAM的输出缓冲区outbuf传送,一直进行遇到回车符CR或整个字符串传送完毕。,START:MOVR7,#10HMOVR0,#inbufMOVDPTR,#outbufLOOP:MOVA,R0CJNEA,#0D0H,CONTINUESJMPFINISHCONTINUE:MOVXDPTR,AINCR0INCDPTRDJNZR7,LOOPFINISH:SJMP$END,29,.,子程序,在主程序中调用子程序LCALL/ACALL标号;调用子程序时,断点入栈保存由子程序返回主程序RET;子程序返回时,断点出栈从而回到主程序。子程序中,视情况进行现场保护和现场恢复1、使用堆栈:PUSH/POP2、暂存到其它存储单元中,最终恢复即可,30,.,调用延时子程序DELAY。,主程序:子程序:该子程序根本不需要主程序提供入口参数,从进入子程序开始,到子程序返回,这个过程花费CPU一定的时长。循环体只能执行有限次,避免“死循环”。,DELAY:PUSH06HPUSH07HMOVR7,#100DLY0:MOVR6,#98NOPDLY1:DJNZR6,DLY1DJNZR7,DLY0POP07HPOP06HRET,LCALLDELAY,31,.,80C51单片机汇编语言程序设计举例,定时程序查表程序求平方极值查找程序查找关键字扩展阶乘计算压缩和解压程序算术运算:加、减、乘、除数据排序数制与编码转换程序LED的简单控制KEY+LED的简单控制,.,单循环定时程序,DELAY:MOVR5,#TIME;1LOOP:NOP;1NOP;1DJNZR5,LOOP;2RET;2,1+(1+1+2)*R5+2*机器周期12M机器周期=1us定时时长为:,32,如何调整定时时长?,.,较长时间的定时程序,DELAY:MOVR5,#TIME1;1LOOP2:MOVR4,#TIME2;1LOOP1:NOP;1NOP;1DJNZR4,LOOP1;2DJNZR5,LOOP2;2RET;2,1+1+(1+1+2)*R4+2*R5+2*机器周期,33,.,通过一个基本延时程序产生不同的定时,MOVR0,#05H;5msLOOP1:LCALLDELAY;1msDJNZR0,LOOP1MOVR0,#OAH;10msLOOP2:LCALDELAYDJNZR0,LOOP2MOVR0,#14H;20msLOOP3:LCALLDELAYDJNZR0,LOOP3,34,.,查表指令,按顺序读出存储器中的数据称为查表。先确定好PC或DPTR的内容,然后有规律地改变A的内容,就可以进行程序存储器中表格数据的读出。MOVCA,A+DPTR可在64KB范围内查表,长查表指令。MOVCA,A+PC查距本指令256个字节以内的数据,短查表指令。PC=当前查表指令地址+1变址调整值,即该指令执行后的地址到表格首址之间的距离注意:如果数据表存放在外部ROM中,执行查表指令时,会在控制引脚PSEN上产生一个程序存储器读信号。,35,.,查表程序,功能:复杂计算、非线性计算、非数值计算的处理。查表:把事先计算或测得的数据按顺序编制成表格存放在程序存储器ROM中(伪指令DB或DW);查表程序根据被测数据,查出表格中对应的结果。优点:编程简单、执行速度快、适合于实时控制。,36,.,【例】分别用两条查表指令编写一段子程序,功能为:根据累加器A中的数(09之间)查找平方表,求出相应的平方数,放在A中。,SQUARE:MOVDPTR,#TABMOVCA,A+DPTRRETTAB:DB0,1,4,9,16,25,36,49,64,81,SQUARE:ADDA,#1MOVCA,A+PCRET;1TAB:DB0,1,4,9,16,25,36,49,64,81,或,37,.,【例】子程序。编程实现运算式c=a2+b2。假定a、b、c分别存放在内部RAM的30H、31H、32H单元中,ORG0000HSJMPMAINORG0030HMAIN:MOVA,30HLCALLSQUAREMOV30H,AMOVA,31HLCALLSQUAREADDA,30HMOV32H,ASJMP$,38,.,【例】阶乘计算求Y=n!(n=0,1,2,9)的值。,按照求阶乘的运算,需继续n-1次乘法,运算程序复杂。采用查表法。事先计算n的阶乘值并作成表格,通过查表程序获得结果。9!=362880=58980H,表格中每个结果占用3个存储单元。Y地址=表首址+n3程序中:n值存放在A中,Y值存入R2R1R0中。,39,.,ORG2000HTEMEQU30HFACTORIAL:MOVB,#3MULAB;n在A中,n3MOVB,A;暂存B中MOVDPTR,#TAB;指向表首址TABLMOVA,A+DPTR;查表取低字节MOVR0,A;存入R0INCDPTR;修正地址指针MOVA,B;恢复n3MOVA,A+DPTR;查表取中间字节MOVR1,A;存入R1INCDPTR;修正地址指针MOVA,B;恢复n3MOVCA,A+DPTR;查表取高字节MOVR2,A;存入R2RETTAB:DB0,0,0,0,0,1,0,0,2,0,0,6;0,1,2,3的阶乘DB0,0,18H,0,0,78H,0,2,D0H;4,5,6的阶乘DB0,13H,0B0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年冲压工技能题库及答案
- 2025年科学启蒙知识题库及答案
- 河道土方开挖及护坡施工方案
- 辽宁省辽西联合校2023-2024学年高三上学期期中考试物理试题(含答案)
- 浙江省嘉兴市海盐县2024-2025学年三年级上学期期中科学试题(含答案)
- 2025年微机原理试卷及答案
- 青海乐理考试题及答案
- 螺栓计算试题及答案
- 2025年张宇讲座新题目及答案
- 数学江苏试卷及答案
- 冠心病自我管理量表CSMS
- 大众文化概论-课件
- 初中英语写作教学专题讲座
- 安全风险辨识与分级管控制度
- 立志追梦圆梦!(航天员桂海潮班会)
- 【无线射频电路】-微波笔记·糖葫芦低通滤波器的设计
- 大学通用俄语1
- 机械加工切削参数表
- 智能纤维案例
- 供应商现场考核记录
- 视频拍摄入门(上)课件
评论
0/150
提交评论