计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础_第1页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础_第2页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础_第3页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础_第4页
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章汇编语言和计算机编程基础,3-1汇编程序协议,3-2医生命令,3-3顺序节目,3-4季度节目,3-5周期节目,3-6位操作节目,3-7子程序,汇编程序:编写汇编程序,编写汇编程序,从汇编语言程序到机器语言程序的转换过程称为程序集。1.手动剪辑:手动检查命令列表剪辑。用于设计短程序或调试器的地方。机械组件:使用组装器组装。3-1汇编程序的承诺,源程序应考虑使用机器汇编汇编汇编程序的承诺。1)根据命令格式和语法规则编写程序。常数的表示法:十进制数:20十六进制数:87h,0f0h二进制数:01011001B字符:h字符串:“Hello”。2)使用宏命令提供程序集信息。编译的主要任务:1)确定

2、与程序中的每个汇编语言命令相对应的机器代码。2)确定每个命令存储在内存中的地址。3)提供错误信息。4)目标可执行文件(* .OBJ/* .HEX)和列表档案(* .LST)。I .汇编语言命令类型1。机械命令:命令系统中的所有命令,每个命令都有相应的机械代码。2.医生命令:仅提供组件控制命令、组件信息,没有命令代码。常用医生指令及其功能:1。ORG起始地址指令:指示节目和块起始地址。命令地址机器代码源org2000h 2000h 78 30main 3360mov r0,# 30h 2002h E6 mov a,r0(手动装配上述三个程序)org 3000h 3000h 23db 23h,10

3、0,a 3001 h 100 30示例EQU等价物。为标签或标识符指定值。x1 equ 2000 hx 2 equ 0fh main : mov dptr,# x1,5。退出end组件命令。示例:START: END,3。DW定义双字节常量命令。例如:DW 1234H、5678H、7。BIT位定义。示例:BNAM BIT 30H,6。DS定义了存储区域的大小。示例:ORG 0350H DS 3保留了3个单元0350H、0351H和0352H。3-2汇编语言计算机编程步骤1。确定方案和计算方法2。了解应用程序系统的硬件配置、性能指标三、构建系统数学模型、确定控制算法和程序。4.节目流程图表示节目

4、结构和节目功能,5 .准备源节目1。合理分配内存设备并了解I/o介面地址。按照功能设计程序明确节目之间的相互关系。3.用注释行描述程序,便于阅读、修改和调试。公共节目结构:直线节目、分支节目、循环节目、子节目、3-3直线节目直线节目、简单程序,节目方向只有一条路径。示例1:必须将存储在RAM20H单元格中的变量分别设置为0H、01H、02H、03H、04H、05H,编译代码表程序,找到变量的平方值,然后将其放在切片内的RAM21H单元格中。验票程序的关键是把表格的数据放在你能表达的位置。节目代码:org1000h start 3360 mov dptr、# 2000h mov a、20h mo

5、vc a、dptr a mov P1.1、a sjmp $ org 2000h table 3360 db00,分析:使用计时器生成方波,将计时器设置为工作方式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寄存器值

6、设置为#22H。计时器T0,T1控制设置:T0,T1打开TCON寄存器值必须设置为#50H。,ORG0002H MOV SP,# 40H堆栈指针MOV TMOD,# 22HT0和T1的工作方式为2 MOV TL0,#9CH。确定T0的时间常数MOV TL1,#38H。确定T1的时间常数MOV TCON,#50H。T0和T1启动,计时移动启动,# 8ah允许T0、T1的中断ORG000BHT0的中断入口地址IT0: MOVTL0,# 9CH获取时间常数CPLP1.0重置P1.0反奇偶性;中断返回ORG001BHT1的中断入口地址IT1: MOVTL1,# 38H获取时间常数CPLP1.1重置P1

7、.1反奇偶性;中断返回END,3-4分支程序用条件传输命令构造节目判断框部分,形成程序分支结构。示例:变量X作为补充编号存储在切片内的RAM30H单元格中。函数Y和X具有以下关系(牙齿问题的核心是标识X的模态),Y,X,x0,#20H,x=0,X 5,x0,试点节目,80H=1000 0000,节目代码:org例如:清除结果单元、设置指针、设置循环控制变量的初始值等,循环循环操作的一部分:需要多次重复的操作。回路控制部分:1。修改指针或循环控制变量。2.侦测回圈条件:符合回圈条件,回圈继续,否则回圈结束Iii。结束部分处理并保存循环结果。允许零循环的循环结构:在循环操作之前检测循环条件。3-5

8、-2单回路简单回路结构:回路本体没有回路。示例:获取N个单字节数据的累积,将数据字符串的起始单元设置为43H,数据字符串的长度为42H个单元,将2字节(SUMH,SUML)相加且不超过。sum : mov r0,# 42h设置指针MOVA、R0 MOVR2、A。循环柜台n CLRA结果单元0 MOVR3,A将父存储单元R3整理为0 ADD1:INCR0。指针ADDA,R0修改累积JNC NEXT舍入处理:如果没有舍入,则定位至INCR3。舍入,高字节1 NEXT:DJNZ R2,ADD1循环控制:是否添加了数据?MOV40H,A;退出循环、保存结果MOV41H、R3 RET、循环控制方法:控制

9、计数、控制特征标志、I .控制计数:设置循环计数器以控制循环数。正数和倒数两种茄子方法。每个正计数回路加1(k)INC,每个回路减1(k)DJNZ,2 .特征控制:设置循环结束标志以实现循环控制。CJNE方法,例如,寻找正数表格最小值。正数表使用LIST作为切片外部RAM中的起始单元格,使用-1作为结束标志。START: MOVDPTR,# LIST数表第一个地址MOVB,# 127H字典设置最大值NEXT: MOVX A,DPTR取数字INCDPTR。修改指针CJNE A、#-1、NEXT1。是桌子的尽头吗?SJMP DONE环路结束NEXT1: CJNE A、B、NEXT2比较NEXT2:

10、JNCNEXT:不显示指示A大于或等于B MOVB、A的借用标记。储存小值SJMP NEXT DONE: SJMP DONE。练习题:将一班的考试统计为100分和不及格的人数,成绩单在41H开始单位。1班的人员在40H,说明现在A不需要保存,3-5-3多个循环体中不需要设置循环结构。多用双重循环。示例:按升序对内存单字节无符号数字进行排序。步骤:一次比较相邻单元的两个数字,以确定是否需要交换数据位置。第一个循环,N-1次比较,作为数据表中的最大值导入。第二个循环,N-2次比较,第二个大值。N-1循环:比较一次,排序结束。SORT: MOV A,# n-1;n个数据排序MOV R4,a;外回路数

11、LOOP1: MOV A、R4 MOV R3、A;内部周期数MOV R0,# tab数据指针loop2设置:mov a、r0;二进制数MOV B、A INC R0 MOV A、R0 CJNE A、B、L1;比较L1:JNC UNEX;AB,DECR0更换渡边杏否则数据XCH A,R0 INC R0 MOV R0,A UNEX: DJNZ R3,LOOP2;内部回路结束?DJNZ R4,环路1;外部循环结束了吗?RET,软件延迟节目。使用循环程序多次重复命令以实现软件延迟。,计算延迟节目运行时间。源节目命令周期(M)命令执行次数,delay : movr6,# 64 h1 I 1: movr7,

12、# 0f FH 1 I 2: djnz r7,i22 djnz R6,i12 ret2,延迟计算:在调用子程序两次之前设置堆栈。3使用返回命令RET退出子程序,并确保堆栈顶部是调用方的返回地址。4.子节目嵌套需要考虑堆栈容量。5.提供足够的调用信息:包括子节目名称、子节目功能、入口参数和出口参数、子程序占用的硬件资源以及子程序调用的其他子节目名称。分类为3-6-2子例程的入口和出口参数子例程与主节目之间的参数传递方式。门户参数:调用子程序之前必须传递给子程序的参数或单元。出口参数:子程序返回调用方的结果参数或相应的单位。请选择其他参数传递方法。1.寄存器传输参数2。存储传输参数3。堆栈传输参数

13、,设计子程序必须满足通用性的要求,不能对特定数据进行编程。范例:1。子节目功能获得单字节数的立方值:AA3、入口参数和出口参数A。2.子节目功能获得1字节数的N次:(41H)(42H)(40H)A,入口参数(40H)和A,出口参数(42H)(41H)。例如:将R4R5R6的3字节数据分解成两半,更改为6字节,并存储在显示器缓冲区(DISMEM0DISMEM5)中。1)子节目UFOR1功能:将A累加器的单字节数据分解为两个字节,存储指向R0牙齿的两个相邻单元UFOR1: MOV R0、#00H XCHD A、R0。半字节INC R0存储指针MOV R0,#00H SWAP A XCHD A,R0

14、;修改父1/2字节RET 2存储)调用子节目UFOR1之前,分解的内容发送到A,保存地址发送到R0。3)输出放置在DISMEM05中。副程式:两个资料字串完全相同,如果完全相同,则a=0;否则,A=FFH。PMT: MOVR2,A;设定字串长度CHC: MOVA,R0。每个数字字符串之一的数字MOV42H、R1 CJNE A、42H、NOM相同吗?不相同的传输INCR0相同,指针INCR1 DJNZ R2,CHC修改都比较完了吗?moba,# 0;完全相同的SJMP PEND NOM:MOV A,# 0FFHPEND:RET测试问题不完全相同:两个数据字符串的起始地址是哪里?(R0),例如,在

15、祖怀表中查找数据的ASCII代码,然后将其作为文字输出。1)子节目HEXASC功能:从堆栈中删除数据,核对表将低半字节转换为ASCII代码,以发送累加器A。2)将每个要转换的数据放入堆栈,然后调用子节目HEXASC。MOV SP,# 30H PUSH 40H入口参数堆栈lcall hexasc pop a hexasc 3360 dec sp;跳过返回地址DEC SP POP A;获取入口参数ASCII码推a的查找表;出口参数INC SP存储返回地址INC SP RET DB 0、1、ASCII代码表,3-7算术运算节目3-7-1多字节加法节目,1 .多字节加子节目,z=x y . Adds

16、: clrc loop : mova,r0 addc a,R1;添加单字节MOVR1,A。存储和单字节INCR0指针INCR1 DJNZ R2,LOOP修改完成添加所有字节?RET,练习1创建十进制多字节附加子节目Z=X Y。练习2创建多字节减子例程,Z=X-Y。考试题更正程序将计算结果存储在其他存储设备上。3-7-2多字节无符号数乘法和除法运算,其他计算多字节乘法节目,步骤:1。部分乘积0。2.测试乘数各位,1的部分乘积加上被乘数。否则,将0相加。对齐方法:向左或向右移动乘数。初始值:0 00 Cy R4R5向右移动R6R7并检测Cy R2R3。Cy=1 Cy R4R5获得部分乘积,并将右移位乘积最后向右移动一次。110 101 110 000 110 1110,例如,双字节乘以r2r 3r 7 r4r 5r 6r 7解决方案,16次循环,减法计算多字节除法节目,步骤:1。根据高被除数,尝试扣除。2.如果足以

温馨提示

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

评论

0/150

提交评论