单片机原理及其应用课件--第四章_第1页
单片机原理及其应用课件--第四章_第2页
单片机原理及其应用课件--第四章_第3页
单片机原理及其应用课件--第四章_第4页
单片机原理及其应用课件--第四章_第5页
已阅读5页,还剩218页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及其应用扬州大学单片机原理接口及其应用(Principle and Application of Single Chip Microcomputer)1单片机原理及其应用扬州大学第1章 概述第2章 MCS-51单片机硬件结构第3章 MCS-51寻址方式和指令系统第4章 MCS-51汇编程序设计第5章 中断系统第6章 定时器/计数器及串行口第7章 存储器扩展第8章 接口电路扩展第9章 应用举例2单片机原理及其应用扬州大学第4章 MCS-51汇编程序设计4.1 汇编语言基本概念4.2 汇编语言程序设计3单片机原理及其应用扬州大学4.1 汇编语言基本概念4.1.1 程序设计语言4.1.2

2、汇编语言的语句结构4.1.3 伪指令4单片机原理及其应用扬州大学4.1.1 程序设计语言程序设计语言的结构及其功能可以分为三种:1机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。机器语言编程困难,一般不再用其编程。2汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。比机器语言编程方便,但要熟悉机器硬件结构、指令系统才能用好它。汇编语言与机器语言一样是面向机器的,无通用性。5单片机原理及其应用扬州大学3高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言。近年来单片机也流行采用高级语言编程。如C516单片机原

3、理及其应用扬州大学4.1.2 汇编语言的语句结构1汇编语言的指令类型MCS-51单片机汇编语言,包含两类不同性质的指令。(1)基本指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器代码。(2)伪指令:汇编时用于控制汇编的指令。它们都不是机器的指令,无机器码产生。7单片机原理及其应用扬州大学2汇编语言的语句格式汇编语言源程序是由汇编语句(即指令)组成的。汇编语言一般由四部分组成。其典型的汇编语句格式如下:标号:操作码操作数;注释START:MOVA,30H;A(30H)8单片机原理及其应用扬州大学START:MOV A, #0; 赋初值(4-1) (p.69)MOV

4、R1, #10 ;计数器赋初 值MOV R2, #00000011BLOOP:ADDA, R2;累加DJNZ R1, LOOPHERE:SJMP HERE标号:即符号地址,需要时加上。标号后加冒号;标号由字母开头(18字符),标号不能与指令助记符、预定义符号相同。操作数:数值操作数,根据需要可用16进制 (后缀H)、10进制、二进制 (后缀B) 表示。16进制数以AF开头时,前面要加0。$符号的使用:程序最后一句可用 SJMP $ 代替。注释:以分号开头,根据需要对于指令的作用加以解释。9单片机原理及其应用扬州大学4.1.3 伪指令用汇编语言编写的程序必须经汇编(翻译)成机器代码,单片机才可运

5、行它。为了控制汇编程序如何完成源程序的汇编过程并产生目标程序,需要在源程序中加入汇编控制命令,即伪指令。1ORG :汇编起始地址命令用来说明ORG指令以下程序段在存储器中存放的起始地址。例如ORG1000HSTART: MOVA,#20HMOVB,#30H一个程序中可多次使用ORG指令,地址要由小到大排列。10单片机原理及其应用扬州大学2EQU :赋值命令给标号赋予一个确定的数值。其它语句可以引用这个标号TTYEQU 1080H3DB :定义数据字节命令把数据以字节的形式存放在连续存储单元中。ORG 1500HHERE: DB 56H,0A7H,35,A (1500h 56H A7H 23H

6、41H)4DW :定义数据字命令按字的形式把数据存放在连续存储单元中。11单片机原理及其应用扬州大学ORG 1600HABC: DW 1234H, 4567H (1600h 12H 34H 45H 67H)5DS :定义存储区命令从指定的地址单元开始,保留一定数量存储单元。 ORG 1000HBASE:DS50H6BIT:位定义命令赋字符名为某个位地址值。EA:BIT0AFH7END:汇编结束命令告知汇编程序源程序结束12单片机原理及其应用扬州大学4.2 汇编语言程序设计4.2.1 汇编语言程序设计步骤4.2.2 汇编语言程序的汇编4.2.3 顺序程序4.2.4 分支程序4.2.5 循环程序4

7、.2.6 子程序4.2.7 查找程序4.2.8 码制转换程序4.2.9 程序举例13单片机原理及其应用扬州大学4.2.1 汇编语言程序设计步骤1分析问题完成什么任务,解决什么问题;已知的数据,运算精度和速度;2确定算法用何种方法解决问题;多个算法的比较;怎样组织数据;3设计程序流程图把算法和解决问题的步骤具体化;通过流程图掌握程序的总体结构;14单片机原理及其应用扬州大学4分配内存单元和I/O端口地址片内RAM划分:工作寄存器组;堆栈区;其它暂存区和缓冲区等;片外RAM;确定各I/O端口的地址5编写汇编语言源程序按流程图编写源程序;程序通常由主程序、子程序、中断服务程序等构成。6调试程序对程序

8、的各个部分分别调试;有些还要与硬件系统连接后调试;切记:编程不易,调试更难。只有掌握了程序的调试、测试才算会编程。15单片机原理及其应用扬州大学4.2.2 汇编语言程序的汇编汇编语言源程序翻译成机器代码的过程称为“汇编”1. 手工汇编通过查指令代码将指令逐条翻译成机器代码并输入到单片机中。这种方法要求自行按绝对地址定位指令,并计算偏移量。工作量大、繁琐、易错,修改不易,已被机器汇编取代。2. 机器汇编在系统机上用相应的汇编程序对源程序文件(*.asm)自动翻译。由于使用不同种类的计算机进行汇编工作,称为交叉汇编 (汇编后的机器代码不能直接在系统机上运行)。机器汇编三步骤:(1)编辑输入源程序;

9、(2)机器汇编;(3)下载机器代码并运行调试。 16单片机原理及其应用扬州大学例4-2 (p.75)地址 机器码 行号源程序LOC OBJLINESOURCE00001ORG0H00000200202LJMP20H00203ORG20H002074084START:MOVA, #8002275F0765MOVB, #76H002525E06ADDA, Acc002725F07ADDA, B002980FE8SJMP$9END2000-(2009+2)=FFF517单片机原理及其应用扬州大学4.2.3 顺序程序顺序程序是一种最简单,最基本的程序。特点:程序按编写的顺序依次往下执行每一条指令,直到

10、最后一条。【例4.1】 将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中(低位在31H,高位在32H)。程序流程如图4-1所示。18开始取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码结束图4-1 拆字程序流程图单片机原理及其应用扬州大学参考程序如下:ORG2000HMOVA,30H;取数ANLA,#0FH;取低4位ADDA,#30H;转换成ASCII码MOV31H,A;保存结果MOVA,30H;取数SWAPA;高4位与低4位互换ANLA,#0FH;取低4位(原来的高4位)ADDA,#30H;转换成ASCII码MOV32H,A;

11、保存结果SJMP$END20单片机原理及其应用扬州大学【例4.2】 设X、Y两个小于10的整数分别存于片内30H、31H单元,试求两数的平方和并将结果存于32H单元。解:两数均小于10,故两数的平方和可存放于一个字节,可利用乘法指令求平方。程序流程如图4-2所示。21开始取数据X求X2暂存X2取数据Y求Y2求X2+Y2保存平方和结束图4-2 例4.2程序流程图单片机原理及其应用扬州大学参考程序如下:ORG2000HMOVA,30H;取30H单元的数据XMOVB,A;将X送入B寄存器MULAB;求X2,结果在累加器中MOVR1,A;将结果暂存于R1寄存器中MOVA,31H;取31H单元数据YMO

12、VB,A;将Y送入B寄存器MULAB;求Y2,结果在累加器中ADDA,R1;求X2+ Y2MOV32H,A;保存结果SJMP$;暂停END23单片机原理及其应用扬州大学4.2.4 分支程序1分支程序的基本形式分支程序有三种基本形式,如图4-3所示。N条件满足?N条件满足?YYABA( )(b)aK=0 K=1K=? K=nA0 A1An(c)图4-3 分支程序结构流程图24单片机原理及其应用扬州大学分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。2双向分支程序设计举例【例4.3】(4-12) 求符号函数的值 (p.

13、88)1X 0Y = 0X = 01X 0,转MOVA, #81H(原码); A -1AJMPNEGTPOSI:MOVA, #1H; A 1NEGT:MOV41H, A; 存结果SJMP; 暂停END27单片机原理及其应用扬州大学3多向分支程序设计举例【例4.4】(4-13) 根据R2的值转向n个分支程序。(p.90) (R2)=0,转向PRG0; (LJMP PRG0)(R2)=1,转向PRG1; (LJMPPRG1)(R2)=n,转向PRGN; (LJMPPRGN)解:利用JMP A+DPTR 指令直接给PC赋值,使程序实现转移。 28单片机原理及其应用扬州大学参考程序如下:JMP6: M

14、OVDPTR,#TAB5 ; 转移指令表首地址MOVA,R2; 取分支转移参量送AMOVB,#3; 乘数3送B (3字节指令)MULAB; 形成转移偏移量MOVR6, A; 暂存偏移量低8位MOVA, B; A偏移量高8位ADDA, DPHMOVDPH, A; 加到DPH中MOVA, R6; 取回偏移量低8位JMPA+DPTR; 分支跳转PC (A)+(DPTR)TAB5: LJMPPRG0; 转移指令表LJMPPRG1LJMPPRGn29单片机原理及其应用扬州大学【例4.5】(4-14)根据(31H 30H)的内容决定程序流向 (31H) 0, 退出MOVC, ACC.7; 保存符号MOVF

15、0, CCPLAADDA, #1; 求补码MOVC, F0MOVACC.7, C; 恢复符号RETURN:RET-MAIN:MOVR2, #11HMOVR3, #22HLCALL SUB1; (R7)=91H (-11H)MOVR2, #11HMOVR3, #A2H; A2H= -22HLCALL ADD1; (R7)=91H (-11H)48单片机原理及其应用扬州大学【例4.10】(4-4 p.78) 4位BCD码减法子程序(被减数 减数)。被减数在 51H, 50H 中,减数在 61H, 60H 中,差在 41H, 40H中。因减法指令后不能用DA A指令进行十进制调整,需用BCD补码来编

16、程。BCD补码加子程序减数在R0指向的单元,被减数在R1指向的单元。BSUB:MOVA, #9AHSUBBA, R0; 求减数十进制补码ADDA, R1; 补码加DAA; BCD调整CPLC; 调整借位INCR0INCR1; 指向高位字节49RET单片机原理及其应用扬州大学2位十进制数补码加法对进位的影响分析:被减数减数被减数减数的补码被减数(100减数)(被减数减数)100当 (被减数减数) 0, 上式百位为1, 即 Cy=1,但此时应没有借位,Cy应该是0;当 (被减数减数) 0, 上式百位为0, 即 Cy=0,但此时应有借位, Cy应该是1;可见只要在补码加后,加上CPL C就能得到正确

17、的结果。50单片机原理及其应用扬州大学BCDSUB: MOVR1, #50H; 指针指向被减数MOVR0, #60H; 指向减数CLRC; 清零CLCALLBSUB; 低字节做减法MOV40H, A; 存结果LCALLBSUB; 高字节做减法MOV41H, ASJMP$5. 子程序调用时的参数传递(1) 通过寄存器或片内RAM传递参数见前面的例子51单片机原理及其应用扬州大学(2) 通过堆栈传递参数【例4-11】 在HEX单元存有两个十六进制数,试编程分别把它们转换成ASCII码存入ASC和ASC+1单元。解:本题子程序采用查表方法完成一个十六进制数的ASCII码转换,主程序完成入口参数的传递

18、和子程序的两次调用。ORG1200HPUSHHEX;入口参数压栈ACALLHASC;求低位十六进制数的ASCII码POPASC;出口参数存入ASC单元MOVA,HEX;十六进制数送ASWAPA;高位十六进制数送低4位PUSHACC;入口参数压栈ACALLHASC;求高位十六进制数的ASCII码POPASC+1;出口参数送ASC+1单元SJMP$;原地踏步,结束52单片机原理及其应用扬州大学HASC:DECSPDECSP;入口参数地址送SPPOPACC;入口参数送AANLA,#0FH;取出入口参数低4位ADDA,#07H;地址调整(修正量)MOVC A,A+PC ;查相应ASCII码2PUSHA

19、CC;出口参数压栈2INCSP2INCSP;SP指向断点地址高8位1RET;返回主程序ASCTABL: DB0,1,2,3,4,5,6,7DB 8,9,A,B,C,D,E,F END53单片机原理及其应用扬州大学(3)利用指针寄存器传递参数【例4-12】 编出能实现打印 THIS IS AN EXAMPLE 的程序。解:将需要打印的字符及代码紧跟在调用指令之后。主程序:MAIN:ACALLPRINT;调用打印子程序DB THIS IS AN EXAMPLE ;要打印的字符及代码 DB 0AH,0DH,00HNEXT:54单片机原理及其应用扬州大学子程序:PRINT: POPDPH;把调用指令下

20、面字节的地址弹出,作为数据指针POPDPLPPP1:MOVA,#00HMOVC A,A+DPTR;取出欲打印的字符INCDPTRJZPPPEND;判断A中是否为结束字符PPP2:;打印程序SJMPPPP1;未完,继续打印PPPEND:JMPA+DPTR;指向主程序NEXT处,取代返回指令 RET55单片机原理及其应用扬州大学4.2.7 查找程序1. 查表程序【例4-13】(4-5) 由A中的数(09)查平方表 (p.80)ADDA, #1; 加上修正量MOVC A, A+PC;查表FIN:RETTAB:DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81修正量计算:修正量

21、表首址 (MOVC指令地址1)TAB-FIN = 156单片机原理及其应用扬州大学【例4-14】(4-6) (p.81)单片机温度控制器的温度传感器输出电压与温度呈非线性关系。从A/D转换器输出的10位二进制电压值与温度值构成一个表。电压值存于R2R3中,查出的温度值也存于R2R3中。LTB2: MOVDPTR, #TAB2 ; 表首址MOVA, R3; 取电压值低8位CLRCRLCA; R3乘2(左移一位)MOVR3, AXCHA, R2; 取电压值高两位,暂存R3RLCA; R2乘2+R3.7(左移一位)XCHA, R2; R3和R2交换,(A)=(R3)ADDA, DPLMOVDPL,

22、A; (R2R3)+(DPTR) DPTRMOVA, DPHADDCA, R257MOVDPH, A单片机原理及其应用扬州大学CLRA; 偏移量0MOVCA, A+DPTR; 查温度值第一字节MOVR2, A; 置入R2CLRA; 偏移量0INCDPTR; 指向温度值下一字节MOVCA, A+DPTR; 查温度值第二字节MOVR3, A; 置入R3RET, TAB2: DW由于用了 MOVC A, A+DPTR指令, TAB2表格长度可大于256字节。58单片机原理及其应用扬州大学【例4-15】(4-7) 单片机巡回检测装置对16路输入进行检测,每路均有最大允许值,为双字节数。编程实现查表取最

23、大值。(p.82)路数x与其最大值y组成表格在TAB3中。x存于R2里, y放在R3R4中。TB3:MOVA, R2;取xADDA, R2;x乘2MOVR3, A; 暂存变址值ADDA, #6;加查表修正量MOVCA, A+PC ;查高位字节XCHA, R3;存最大值高位并取回变址值ADDA, #3;加查表修正量MOVCA, A+PC ;查低位字节MOVR4, A;存最大值低位RETTAB3:DW 1520, 3721, 42645, 758059DW , 单片机原理及其应用扬州大学2. 关键字查找程序在表中查指定的数据。无序表采用顺序查找法,有序表可用对分查找法。【例4-16】(4-8) 从50个字节的表中查找放于40H的关键字H,查到该字,将其地址送 R2R3; 否则R2R3清零。 (p.82)获取关键字设查找次数设表首地址查表找到关键字?YN调整查表偏移量保存调整关键字存放地址关键字地址N查完?Y R2,R3置零 返回60单片机原理及其应用扬州大学1000HORGMOV40H, #H; 置关键字MOVR1, #50; 查找次数MOVA, #14; 修正量MOVDPTR, #TAB4 ; 置表首址(假设关键字地址)LOOP

温馨提示

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

评论

0/150

提交评论