收藏 分享(赏)

计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础.ppt

上传人:hskm5268 文档编号:6836228 上传时间:2019-04-23 格式:PPT 页数:30 大小:367KB
下载 相关 举报
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础.ppt_第1页
第1页 / 共30页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础.ppt_第2页
第2页 / 共30页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础.ppt_第3页
第3页 / 共30页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础.ppt_第4页
第4页 / 共30页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、第三章 汇编语言与程序设计基础,3-1 汇编程序的约定,3-2 伪指令,3-3 顺序程序,3-4 分支程序,3-5 循环程序,3-6 位操作程序,3-7 子程序,汇编语言程序:用汇编语言编写的、完成特定功能的指令序列。 汇编程序:能将汇编语言源程序转换成机器语言目标程序的系统软件。,汇编语言程序到机器语言程序的转换过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。 2.机器汇编:用汇编程序进行汇编。,3-1 汇编程序的约定,源程序使用机器汇编要考虑汇编程序的约定。,1)按指令格式和语法规则编写程序。 常数的表示:十进制数:20十六进制数:87H,0F0H二进制数

2、:01011001B字符: H字符串: “Hello”。 2)使用宏指令提供汇编信息。,汇编的主要任务:,1)确定程序中每条汇编语言指令所对应的机器码。 2)确定每条指令在存储器中的存放地址。 3)提供出错信息。 4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)。,一. 汇编语言指令类型 1.机器指令:指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令:汇编控制指令,仅提供汇编信息,没有指令代码。,常用伪指令及其功能: 1. ORG起始地址指令:指明程序和数据块起始地址。 指令地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN:MOV

3、R0,#30H2002H E6 MOV A,R0(请手工汇编上面3句程序)ORG 3000H3000H 23 DB 23H,100,A 3001H 100 3002H A,2.DB 定义字节型常数指令。 例: DB 12H,100,A,3-2 伪指令,4. EQU 等值。为标号或标识符赋值。 X1 EQU 2000H X2 EQU 0FH MAIN: MOV DPTR,#X1,5. END 结束汇编指令。 例:START: END,3. DW 定义双字节型常数指令。 例: DW 1234H,5678H,7. BIT 位定义。 例:BNAM BIT 30H,6. DS 定义存储区域的大小。 例:

4、 ORG 0350H DS 3 则0350H,0351H,0352H 3个单元就预留下来了,3-2 汇编语言程序设计步骤,一.确定方案和计算方法 二.了解应用系统的硬件配置、性能指标。 三.建立系统数学模型,确定控制算法和操作步骤。 四.画程序流程图 表示程序结构和程序功能,五. 编制源程序 1.合理分配存储器单元和了解I/O接口地址。 2.按功能设计程序,明确各程序之间的相互关系。 3.用注释行说明程序,便于阅读和修改和 调试。,常用程序结构: 直线程序、分支程序、 循环程序、子程序,3-3 直线程序 直线程序又称简单程序, 程序走向只有一条路径。,例1:设变量存放在RAM20H单元, 其取

5、值分别为00H,01H,02H,03H, 04H,05H,要求编制一段查表程序, 查出变量的平方值, 并放在片内RAM21H单元。 查表程序的关键在于把表中的数据放在你能够表达的位置。,程序代码:ORG 1000H START:MOV DPTR,#2000HMOV A,20HMOVC A,DPTR+AMOV 21H,ASJMP $ORG 2000H TABLE:DB 00H,01H,04H,09H,10H,25HEND,例2:编制一段程序,要求在端口线P1.0,P1.1上分别产生周期为200us和400us的方波。设单片机的外接频率为12MHz。,分析:利用定时器产生方波,将定时器设置成为工作

6、方式3,将寄存器T0定时100us,T1定时200us,达到定时时间后引起中断,在中断服务程序中各自将P1.0和P1.1引脚取反。,定时器预设值的设置: 单片机的晶体振荡频率为12MHz,计时器的计时频率为1MHz,机器周期为1us。 T0定时100us,因此寄存器T0需要计数100次 ,其预置值为64H+1=9CH。 T1定时200us,因此寄存器T1需要计数200次 ,其预置值为C8H+1=38H。,定时器T0,T1的工作方式设置: T0采用工作方式3,因此TMOD寄存器的值设置为#22H。,定时器T0,T1的控制设置: 打开T0,T1;要求TCON寄存器的值设置为#50H。,ORG 00

7、02HMOV SP, #40H ;置堆栈指针MOV TMOD, #22H ;T0及T1为工作方式2MOV TL0, #9CH ;确定T0的时间常数MOV TL1, #38H ;确定T1的时间常数MOV TCON , #50H ;启动T0及T1,开始定时MOV IE, #8AH ;允许T0,T1的中断ORG 000BH ;T0的中断入口地址 IT0: MOV TL0, #9CH ;重置时间常数CPL P1.0 ;P1.0取反RETI ;中断返回ORG 001BH ;T1的中断入口地址 IT1: MOV TL1, #38H ;重置时间常数CPL P1.1 ;P1.1取反RETI ;中断返回END,

8、3-4分支程序 由条件转移指令构成程序判断框部分,形成程序分支结构。 例题:设变量x以补码数的形式存放在片内RAM30H单元,函数y与x有如下关系式(此题关键在于识别X的模态),y,X,x0,#20H,x=0,X+5,x0,试编制程序,根据x的 值求出y并放回原单 元(30H)。,80H=1000 0000,程序代码:ORG 1000HMOV A,30HJZ NEXTANL A,#80HJZ EDMOV A,#05HADD A,30HMOV 30H,ASJMP ED NEXT: MOV 30H,#20H ED: SJMP $,80H=1000 0000,rel,3-5 循环程序 包含多次重复执

9、行的程序段,循环结构使程序紧凑。,3-5-1 循环程序的构成,各个环节任务: 一初始化部分 循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,二循环体 循环工作部分: 需多次重复处理的工作。 循环控制部分: 1.修改指针或循环控制变量。 2.检测循环条件:满足循环条件,继续循环,否则退出循环。 三.结束部分 处理和保存循环结果。 允许0次循环的循环结构:在循环工作之前检测循环条件。,3-5-2 单重循环 简单循环结构:循环体中不套循环。,例:求n个单字节数据的累加,设数据串起始单元为43H,数据串长度在42H单元,累加和不超过2个字节(SUMH,SUML)。,SUM: MOV R0

10、,#42H ;设指针MOV A,R0MOV R2,A ;循环计数器nCLR A ;结果单元清0MOV R3,A 使高位存储单元R3清零 ADD1:INC R0 ;修改指针ADD A,R0 ;累加JNC NEXT ;处理进位:无进位则转走INC R3 ;有进位,高字节加1 NEXT:DJNZ R2,ADD1 ;循环控制:数据是否加完?MOV 40H,A ;循环结束,保存结果MOV 41H,R3RET,循环控制方法:计数控制、特征标志控制。,一.计数控制: 设循环计数器控制循环次数。 正计数和倒计数两种方式。 正计数每循环一次,循环计数器加1(k)INC法 倒计数每循环一次,循环计数器减1(k)D

11、JNZ法,二.特征控制:设定循环结束标志实现循环控制。CJNE法,例:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。,START: MOV DPTR,#LIST ;数表首地址MOV B,#127H ;预置最大值 NEXT: MOVX A,DPTR ;取数INC DPTR ;修改指针CJNE A,#-1,NEXT1; 是否为数表结尾?SJMP DONE ;循环结束 NEXT1: CJNE A,B,NEXT2 ;比较 NEXT2:JNC NEXT :不出现借位标记说明A大于或等于BMOV B,A ;保存较小值SJMP NEXT DONE: SJMP DONE,习题

12、:统计一班考试为100分和不及格人数,成绩单在41H起始单元。1班的人数在40H里,说明此时的A不必保留,3-5-3 多重循环 循环体中套循环结构。以双重循环使用较多。,例:将内存一串单字节无符号数升序排序。 步骤:每次取相邻单元的两个数比较,决定是否需要交换数据位置。 第一次循环,比较N-1次,取到数据表中最大值。 第二次循环,比较N-2次,取到次大值。 第N-1次循环:比较一次,排序结束。,SORT: MOV A,#N-1 ;N个数据排序MOV R4,A ;外循环次数 LOOP1: MOV A,R4MOV R3,A ;内循环次数MOV R0,#TAB ;设数据指针 LOOP2: MOV A

13、,R0 ;取二数MOV B,AINC R0MOV A,R0CJNE A,B,L1 ;比较 L1: JNC UNEX ;AB,不交换DEC R0 ;否则交换数据XCH A ,R0INC R0MOV R0,A UNEX: DJNZ R3,LOOP2 ;内循环结束?DJNZ R4,LOOP1 ;外循环结束?RET,软件延时程序。 用循环程序将指令重复多次执行,实现软件延时。,试计算延时程序的执行时间。源程序 指令周期(M) 指令执行次数,DELAY:MOV R6,#64H 1I1:MOV R7,#0FFH 1I2:DJNZ R7,I2 2DJNZ R6,I1 2RET 2,延时时间计算:(设时钟f=

14、12MHz) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,3-6 子程序 子程序:能完成某项特定功能的独立程序段,可被反复调用。,3-6-1 子程序设计 一子程序入口用标号作为子程序名。 二调用子程序之前设置好堆栈。 三用返回指令RET结束子程序,并保 证堆栈栈顶为调用程序的返回地址。 四.子程序嵌套须考虑堆栈容量。 五.提供足够的调用信息:如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,3-6-2 子程序的入口及出口参数 按子程序与主程序之间传递参数的方式分类。,入口参数:调

15、用子程序之前,需要传给子程序的参数或者所在单元。 出口参数:子程序送回调用程序的结果参数或者所在单元。,选用不同的参数传递方式。 1.寄存器传送参数 2.存储器传送参数 3.堆栈传送参数,设计子程序应满足通用性的要求,不针对具体数据的编程。 如:1.子程序功能为求单字节数的立方值: AA3,入口参数和出口参数为A。 2.子程序功能为求单字节数的n次方: (41H)(42H)(40H)A,入口参数为(40H)和A, 出口参数为(42H)(41H)。,例:将R4R5R6中三个字节数据对半分解,变成6个字节, 存入显示缓冲区(DISMEM0DISMEM5)。,1)子程序UFOR1的功能:将A累加器中

16、单字节数据,对半分解成两个字节,存入R0所指向的相邻两个单元 UFOR1: MOV R0,#00HXCHD A,R0 ;保存低半字节INC R0 ;修改指针MOV R0,#00HSWAP AXCHD A,R0 ;保存高半字节RET 2)调用子程序UFOR1之前,将待分解的内容送A,存放地址送R0。 3)输出结果放在DISMEM05,例 子程序:比较两个数据串是否完全相等,若完全相等,A=0;否则A=FFH。,PMT: MOV R2,A ;设数串长度 CHC: MOV A,R0 ;各取数串中的一个数MOV 42H,R1CJNE A,42H,NOM ;是否相等?不相等转移INC R0 ;相等,修改

17、指针INC R1DJNZ R2,CHC ;全部比较完?MOV A,#0 ;完全相等SJMP PEND NOM:MOV A,#0FFH ;不完全相等 PEND:RET 思考题:两个数据串的起始地址在什么地方?(R0),例:查表求出数据的ASCII码,再以字符形式输出。,1)子程序HEXASC功能:取出堆栈中数据,查表将低半字节转换成ASCII码送累加器A。 2)分别将待转换数据入栈,然后调用子程序HEXASC。,MOV SP,#30HPUSH 40H ;入口参数入栈LCALL HEXASCPOP A HEXASC:DEC SP ;跳过返回地址DEC SPPOP A ;取入口参数 ;查表求ASCI

18、I码PUSH A ;保存出口参数INC SP ;指向返回地址INC SPRETDB 0, 1, ;ASCII码表,3-7 算术运算程序 3-7-1 多字节加减运算程序,1.多字节加法子程序,Z=X+Y。 ADDS: CLR C LOOP: MOV A,R0ADDC A,R1 ;加一字节MOV R1,A ;存和一字节INC R0 ;修改指针INC R1DJNZ R2,LOOP ;全部字节加完?RET,习题1 编写十进制多字节加法子程序,Z=X+Y。 习题2 编写多字节减法子程序,Z=X-Y。 思考题 修改程序使运算结果保存到其他存储单元。,3-7-2 多字节无符号数乘除运算,相加计算多字节乘法程

19、序,步骤: 1.部分积清零。 2.检测乘数各位,为1则部分积对位加被乘数,否则加0。 3.对位方法:被乘数左移或部分积右移。,初值: 0 00 Cy R4R5 待借位右移R6R7并检测Cy+ R2R3 当Cy=1 Cy R4R5 得部分积并右移对位乘积最后右移一次,110 101 110000+ 110 11110,例:双字节相乘 R2R3R6R7R4R5R6R7 解:部分积清零,右移检测乘数,决定部分积是否加被乘数,部分积右移对位。,循 环 16 次,相减计算多字节除法程序,步骤: 1.对齐高位被除数试减除数。 2.若够减商上1,不够减商上0且恢复余数。 3.余数左移或除数右移对位。 4.循

20、环重复前3步,直至取够相应位数的商。,例R2R3R4R5R6R7R4R5 (余数R2R3) 解1.判断R2R3R6R7?使商不大于16位。2.被除数左移1位,试减除数。3.若够减,商加1并保留余数。,10111 0101/ 01110110010101000101100101011001010110000101011,CyR2R3R4R50- R6R7 + 1 够减R2R3 不够减恢复余数,循环16次,3-7-3 代码转换程序 (一)十六进制数转换为ASCII码,(二)ASCII码转换为十六进制数,09的ASCII码:3039H,AF的ASCII码:4146H。,HASC:CJNE A, #0AH,N AHEX:CLR C N: JNC N1 SUBB A, #30HADD A, #30H CJNE A, #0AH, NSJMP SE N: JC N1 N1: ADD A, #37H SJMP AE SE: RET N1: SUBB A, #11HCJNE A, #06H, N2N2: JNC ERRADD A, #0AHSJMP AEERR: MOV A, #0FFHAE: RET,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报