单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章

上传人:E**** 文档编号:89490827 上传时间:2019-05-25 格式:PPT 页数:28 大小:335KB
返回 下载 相关 举报
单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章_第1页
第1页 / 共28页
单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章_第2页
第2页 / 共28页
单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章_第3页
第3页 / 共28页
单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章_第4页
第4页 / 共28页
单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章》由会员分享,可在线阅读,更多相关《单片机原理与控制技术——双解汇编和C51 第3版 教学课件 ppt 作者 张志良 第4章(28页珍藏版)》请在金锄头文库上搜索。

1、第4章 机械工业出版社同名教材 配套电子教案,单片机原理与控制技术,第3版,第4章 汇编语言程序设计,4.1.1 汇编 将汇编语言源程序转换为机器代码的过程称为汇编。 将由二进制码组成的机器代码程序转换为汇编语言源程序的过程称为反汇编。,4.1 汇编语言程序设计基本概念,4.1.2 伪指令,在汇编时起控制作用,自身并不产生机器码,不属于指令系统,而仅是为汇编服务的一些指令,称为伪指令。 常用的伪指令有以下几种:, 起始伪指令 ORG(Origin),功能:规定ORG下面目标程序的起始地址。,格式:ORG (16位地址),功能:将一个数据或特定的汇编符号赋予规定 的字符名称。, 结束伪指令 EN

2、D,功能:是汇编语言源程序的结束标志。在END 以后所写的指令,汇编程序不再处理。,格式:END, 等值伪指令 EQU(Equate),格式:(字符名称) EQU (数据或汇编符号), 数据地址赋值伪指令 DATA,格式:(字符名称) DATA (表达式),功能:将数据地址或代码地址赋予规定的 字符名称。, 定义字节伪指令DB(Define Byte),格式:DB (8位二进制数表),功能:从指定的地址单元开始,定义若干 个8位内存单元的数据。 数据与数据之间用“,”分割。,格式:(字符名称) BIT (位地址), 定义字伪指令DW(Define Word),格式:DW (16位二进制数据表)

3、,功能:从指定的地址单元开始,定义 若干个16位数据。, 定义位地址伪指令BIT,功能:将位地址赋予所规定的字符名称。, 汇编和调试,4.1.3 程序设计的基本步骤,编写程序要求: 不仅要完成规定的功能任务,而且还应该执行速度快、占用内存少、条理清晰、阅读方便、便于移植、巧妙而实用。 一般应按以下几个步骤进行:, 分析问题,确定算法或解题思路, 画流程图, 编写源程序,顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。 顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。,4.2 汇编语言程序设计举例,4.2.1 顺序程序,CONT: MOV A,R0 ;读低8

4、位 CPL A ;取反 ADD A,#1 ;加1 MOV R2,A ;存低8位 MOV A,R1 ;读高8位 CPL A ;取反 ADDC A,#80H ;加进位及符号位 MOV R3,A ;存高8位 RET ;,【例】 已知16位二进制负数存放在R1R0中, 试求其补码,并将结果存在R3R2中。,解:二进制负数的求补方法可归结为“求反加1”,符号位不变。利用CPL指令实现求反;加1时,则应低8位先加1,高8位再加上低位的进位。注意这里不能用INC指令,因为INC指令不影响标志位。,程序如下:,在许多情况下,需要根据不同的条件转向不同的处理程序,这种结构的程序称为分支程序。 80C51指令系统

5、中设置了条件转移指令、比较转移指令和位转移指令,可以实现分支程序。,4.2.2 分支程序, S0单独按下, 红灯亮,其余灯灭; S1单独按下, 绿灯亮,其余灯灭; S0、S1均按下, 红绿黄灯全亮; S0、S1均未按下, 黄灯亮,其余灯灭。,【例4-6】已知电路如图4-4所示,要求实现:,Keil C51软件调试(见例9-1 ), 程序编译链接及纠错。直至显示:0 Error(s),0 Warning(s) 进入调试状态 ,全速运行。 打开P1口对话框,设置 P1.7 P1.6(s0、s1)状态 。 观测 P1.2P1.0状态 (0亮1灭 ),是否符合题目要求。,画出Proteus 虚拟仿真电

6、路图 装入在Keil 调试时生成的 Hex文件 全速运行 后,即时操作带锁按钮S0、S1 信号灯会按题目要求随之变化,图9-59 Proteus ISIS虚拟仿真信号灯电路,课堂练习题: 电路及灯亮灭要求同上例,其中第2、3两条指令 JB P1.7和JB P1.6按下列要求修改,试重新编程,并进行Keil 软件调试、Proteus 虚拟仿真,看能否达到题目要求。 JB P1.7, JNB P1.6, JNB P1.7, JB P1.6, JNB P1.7, JNB P1.6,,循环程序一般包括以下几个部分: 循环初值; 循环体; 循环修改; 循环控制; 其结构可以有两种组织形式, 如图4-6所

7、示。,4.2.3 循环程序,【例4-7】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+XN,并将S(双字节)存放在R3R4中(设S65536)。,解:程序如下: SXN: MOV R2,#N ;置数据长度(循环次数) MOV R3,#00H ;和单元(高8位)清0 MOV R4,#00H ;和单元(低8位)清0 MOV R0,#50H ;求和数据区首址 LOOP: MOV A,R4 ;读前次低8位和 ADD A,R0 ;低8位累加 MOV R4,A ;存低8位和 CLR A ; ADDC A,R3 ;高8位加进位

8、 MOV R3,A ;存高8位和 INC R0 ;指向下一数据 DJNZ R2,LOOP ;判N个数据累加完否? RET ;退出循环,循环体,置循环初值,循环修改,循环控制,退出循环,DY1ms:MOV R7,#250 ;置循环次数 DLOP: DJNZ R7,DLOP ;2机周250=500机周 RET ;,【例4-8】按下列要求编写延时子程序: 延时1ms,fosc=6MHz; 延时10ms,fosc=12MHz; 延时1s,fosc=6MHz;,解 :延时1ms,fosc=6MHz,一个机器周期为2s,说明:MOV Rn指令为1个机器周期; DJNZ指令为2个机器周期; RET指令为2个

9、机器周期; (2机周250)+1+22s/机周=1006s1ms,Keil C51软件调试,编译(扩展名用.asm)链接并进入调试状态后,全速运行。观察寄存器窗口Sys中:states值为501(机周),sec值为0.001002(s),RET(返回)指令需与子程序调用指令成对出现,单独执行时会出错。因此,Keil调试时,需去除RET指令,用伪指令END替代,才能得到正确的延时时间。 但实际调用时,仍需加上RET指令,延时时间增加2机周。,注意:,DY10ms:MOV R6,#20 ; 置外循环次数 DLP1: MOV R7,#250 ; 置内循环次数 DLP2: DJNZ R7,DLP2 ;

10、 2机周250 =500机周 DJNZ R6,DLP1 ; 500机周20= 10000机周 RET ;,解:延时10ms, fosc=12MHz,一个机器周期为1s。,说明:MOV Rn指令为1个机器周期; DJNZ指令为2个机器周期; RET指令为2个机器周期; (2机周250)+1+220+1+21s/机周 =10063s10ms,Keil C51软件调试结果(用END替代RET): states=10061(机周),sec=0.010061(s)。,DY1S:MOV R5,#5 ; 置外循环次数 DYS0:MOV R6,#200 ; 置中循环次数 DYS1:MOV R7,#250 ;

11、置内循环次数 DYS2:DJNZ R7,DYS2 ; 2机周250 = 500机周 DJNZ R6,DYS1 ; 500机周200=100000机周 DJNZ R5,DYS0 ; 100000机周5=500000机周 RET ;,解:fosc=6MHz,一个机器周期为2s。,说明:MOV Rn指令为1个机器周期; DJNZ指令为2个机器周期; RET指令为2个机器周期; (2机周250+1+2)200+1+25+1+22s/机周 =1006036s1s,Keil C51软件调试结果(用END替代RET): states=503016(机周),sec=1.006032(s)。,【课堂练习题】 按

12、下列要求编写延时子程序: 延时2ms,fosc=6MHz; 延时5ms,fosc=12MHz; 延时10s,fosc=12MHz;,当用PC作基址寄存器时,其表格首地址与PC值间距不能超过256字节,且编程要事先计算好偏移量,比较麻烦。因此,一般情况下用DPTR作基址寄存器。,4.2.4 查表程序,用于查表的指令有两条: MOVC A,A+DPTR MOVC A,A+PC,当用DPTR作基址寄存器时,查表的步骤分三步: 基址值(表格首地址)DPTR; 变址值(表中要查的项与表格首地址之间的 间隔字节数)A; 执行MOVC A,A+DPTR。,解:编程如下: CHAG:MOV DPTR,#TAB

13、D;置共阴字段码表首址 MOV A,30H ;读显示数字 MOVC A,A+DPTR ;查表,转换为显示字段码 MOV 30H,A ;存显示字段码 RET ; TABD:DB 3FH,06H,5BH,4FH,66H;04共阴字段码表 DB 6DH,7DH,07H,7FH,6FH;59共阴字段码表,【例4-10】 在单片机应用系统中,常用LED数码管显示数码,但显示数字(9)与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方法。现要求将30H中的显示数字转换为显示字段码并存入30H。已知共阴字段码表首址为TABD。,在单片机系统中设置+、四个运算命令键,它们的键号分别为0、

14、1、2、3。当其中一个键按下时,进行相应的运算。操作数由P1口和P3口输入,运算结果仍由P1口和P3口输出。具体如下:P1口输入被加数、被减数、被乘数和被除数,输出运算结果的低8位或商;P3口输入加数、减数、乘数和除数,输出进位(借位)、运算结果的高8位或余数。键盘号已存放在30H中。,4.2.5 散转程序,散转程序是一种并行多分支程序。,【例4-12】 单片机四则运算系统。,PRGM:MOV DPTR,#TBJ ;置散转表首地址 MOV A,30H ;读键号 RL A ;键号2A ADD A,30H ;键号3A JMP A+DPTR ;散转 TBJ: LJMP PRGM0 ;转PRGM0(加法) LJMP PRGM1 ;转PRGM1(减法) LJMP PRGM3 ;转PRGM3(除法) LJMP PRGM2 ;转PRGM2(乘法) RET,解:程序如下:,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号