《单片机原理与应用》汇编语言程序设计28课件

PPT
  • 阅读 69 次
  • 下载 0 次
  • 页数 40 页
  • 大小 301.001 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
《单片机原理与应用》汇编语言程序设计28课件
可在后台配置第一页与第二页中间广告代码
《单片机原理与应用》汇编语言程序设计28课件
可在后台配置第二页与第三页中间广告代码
《单片机原理与应用》汇编语言程序设计28课件
可在后台配置第三页与第四页中间广告代码
《单片机原理与应用》汇编语言程序设计28课件
《单片机原理与应用》汇编语言程序设计28课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 40
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】《单片机原理与应用》汇编语言程序设计28课件.ppt,共(40)页,301.001 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44730.html

以下为本文档部分文字说明:

2022/11/2412.8汇编语言程序设计通过前面的学习,我们已经了解了单片机内部的结构,MCS-51指令系统的寻址方式、各类指令的格式及功能。下面我们就是要如何利用MCS-51的指令系统,来编写高效、充分利用其特点的程序。2022/11/2422.8.1概述<1>程序设

计语言1.机器语言2.汇编语言3.高级语言2022/11/243<2>编制程序的步骤1.任务分析(硬件、软件系统分析)2.确定算法和工作步骤;3.程序总体设计和流程图绘制关于流程图符号:开始、结束----圆角矩形工作任务----矩形判断分支----菱形程序流向----程序连接-

---开始结束2022/11/2444.分配内存,确定程序与数据区存放地址;5.编写源程序;6.调试、修改,最终确定程序。2022/11/245<3>方法技巧1.模块化设计(按功能分:显示、打印、输入、发送等)2.尽量采用循环及子程序结构(节省内存)2022/11/246

<4>汇编语言的规范1.汇编语言源程序由以下两种指令构成汇编语句(指令语句)伪指令(指示性语句)2.汇编语句的格式:标号:操作码操作数;注释数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)2022/11/2473.

伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。2022/11/248常用的伪指令ORG(Origin)定位目的程序的起始地址。格式:ORG表达式如:ORG0000H•注:表达式必须为16位地址值。END汇编语言

程序结束伪指令。注:一定放在程序末尾!2022/11/249常用的伪指令EQU(EQUate)赋值伪指令。格式:字符名称EQU数值或汇编符号例:AAEQU30HK1EQU40HMOVA,AA;(30H)→A,直接寻址MOVA,K1;(40H)→A2022/11/2410常用的伪指

令DB(DefineByte)从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义数据常数表。格式:DB字节常数或ASCII字符例:ORG1000HDB34H,0DEH,’A’,’B’DB

0AH,0BH,202022/11/2411常用的伪指令DW(DefineWord)从指定单元开始定义(存储)若干个字的数据或ASCII码字符。格式:DW字常数或ASCII字符例:ORG2000HDW1234H,’B’DW0AH,202022/11/

2412常用的伪指令BIT位地址符号指令。(DATA字节地址赋于规定的字符名称)把位地址赋于规定的字符名称。直接地址格式:字符名称BIT位地址例:ABCBITP1.1QQBITP3.22022/11/24132.8.2汇编语言程序编辑和汇编1.编辑(源程序,以.ASM扩展名存盘);2.汇编(手工

或机器汇编);如:(MOVA,#88H;机器码74,88H)又如:地址目标码源程序ORG1000H1000H747FMOVA,#7FH1002H7944MOVR1,#44HEND2022/11/24142.

8.3程序设计基础与举例<1>顺序结构程序org1000h;4K=4096单元;start:movdptr,#table;把0的地址送dptrmova,20hmovca,@a+dptrmov21h,asjmp$org2000htable:db0,1,4,9,16,25end例1:变量存

在内部RAM的20H单元中,其取值范围:0~5,编成,查表法求其平方值2022/11/2415开始表格首地址送DPTR变量送A(20H)A查平方表(A+DPTR)A结束结果送21H单元:A21H2022/11/2416例2:将20H单元的压缩(Pac

ked)BCD码拆成两个ACSII码存入21H、22H单元。内部RAM22H21H20H693639BCD012...9ASCII30H31H32H...39H方法1(20H)A10HBA/B,A中为高4位BCD码,B中为低4位BCD码B+30HBB(21H)A+30HA

A(22H)开始结束2022/11/2418周期数源程序ORG2000HMOVA,20HMOVB,#10HDIVABORLB,#30HMOV21H,BORLA,#30HMOV22H,AEND124221113;除以10H;高4位BCD码转

换位ASCII码;低4位BCD码转换位ASCII码2022/11/24190(21H)(20H)AA与(21H)的低4位交换(21H)+30H(21H)A的高低半字节交换A+30HAA(22H)开始结束方法2:2022/11/2420ORG2000HMOVR0,#21HMOV@R0,#

0MOVA,20HXCHDA,@R0ORL21H,#30HSWAPAORLA,#30HMOV22H,AEND;清21H单元;低4位BCD码送21H单元,;低4位BCD码转换位ASCII码;高4位BCD码转换位ASCII码111121119

周期数源程序2022/11/2421<2>分支程序分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)条件成立?下条指令程序段A单分支结构YN条件成立?程

序段AYN程序段A双分支结构2022/11/2422<3>分支程序分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)K=?程序段nn0程序段1多分支结构程序段012022/11/2423例1:

设变量x以补码形式存放在片内RAM30H单元中,变量y与x的关系是:编程根据x的值求y值并放回原单元。0,50,200,xxxHxxy2022/11/2424A=?y=x+5<0>0y=20Hy=x0取x即(30h)A

开始存y即y20h结束ORG1000HSTART:MOVA,30HJZNEXT;x=0,转移ANLA,#80H;保留符号位JZED;x>0,转移MOVA,#05H;x<0,不转移ADDA,30HMOV30H,ASJMPEDNEXT:MOV30

H,#20HED:SJMP$2022/11/2426START:MOVDPTR,#TABMOVA,R7ADDA,R7;R7×2A,16bit的地址MOVR3,A;暂存R3MOVCA,@A+DPTR;取高位地址XCHA,R3INCAMOVCA,@A+DPTR;取低位地址MO

VDPL,AMOVDPH,R3;转移地址送入DPTRCLRAJMP@A+DPTRTAB:DWP0DWP1…DWPN例2:根据R7的内容,转至对应的分支程序。设R7的内容为0~N,对应的处理程序地址分别为P0~P7P0高位P0低位TABP1高位P1低

位TAB+22022/11/2427<4>循环程序循环程序一般由:初始化部分循环体部分--处理部分、修改部分、控制部分结束部分其结构一般有两种:先进入处理部分,再控制循环•至少执行一次循环体先控制循环,再进入处理部分•循环体是否执行,取决于判断结果。2022/11/2428

开始设置循环初值循环处理循环修改结束处理结束循环结束?开始设置循环初值循环处理循环修改结束处理结束循环结束?NYYN2022/11/2429循环控制的一般方法:循环次数已知利用循环次数控制循环次数未知利用关键字控制利用“逻辑尺”根据“

逻辑尺”的内容,进行控制。2022/11/2430例1:50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。参考p43程序例题;指令周期可以查教材p403附录;参考:P43.DEL:MOVR7,#200;1M

C,机器周期DEL1:MOVR6,#123;1MCNOP;1MCDJNZR6,$;2MCDJNZR7,DEL1;2MCRET;2MC延时时间:t=1+200[(1+1+2*123)+2]+2≈50000us=50ms2022/11/2

431例2(上机调试):将内部RAM中起始地址为data的数据串串送到外部RAM中起始地址为buffer的存储区域中,直到发现‘$’字符,传送停止----循环次数事先不知道先判断,后执行。MOVR0,#data;M

OVDPTR,#buffer;LOOP1:MOVA,@R0;CJNEA,#24H,LOOP2;判断是否为$字符SJMPLOOP3;是,转结束LOOP2:MOVX@DPTR,A;不是,传送数据INCR0;INCDPTR;SJ

MPLOOP1;传送下一数据LOOP3:END2022/11/2432<4>子程序问题子程序设计时注意事项:1.给子程序赋一个名字。实际为入口地址代号。2.要能正确传递参数:入口条件:子程序中要处理的数据如何给予。出口条件:子程序处理结果如何存放。(寄存器、

存储器、堆栈方式)3.保护与恢复现场:保护现场:压栈指令PUSH恢复现场:弹出指令POP4.子程序可以嵌套2022/11/2433例3(上机调试):利用查表法求平方和,设a、b、c分别存于内部RAM的DA、DB、DC三个单元中。MOVA,DA;取a,Da可

以用伪指令定义ACALLSQR;调用查表子程序MOVR1,A;a的平方暂存R1中MOVA,DB;取bACALLSQR;调用查表子程序ADDA,R1;求出平方和暂存A中MOVDC,A;结果存于DC中SJMP$SQR:MOVDPTR,#TAB;子程序MOVCA,@A+DPTRRETTAB:DB0,1,

4,9,16,25,36,49,64,81END22bac利用累加器或寄存器传递参数2022/11/2434<5>算术运算程序的设计例6多字节无符号数相加。上机实验例7多字节无符号数相减.上机实验2022/11/2435<6>码型转换程序的设计一、十六进制数与ASCCII码之间的转换(对

比BCD与ASCCI之间的转换—4.3.1中例2)表4-1十六进制数与ASCII码之间的关系十六进制数十六进制数十六进制数十六进制数030H434H838HC43H131H535H939HD44H232H636HA41HE45H333

H737HB42HF46H2022/11/2436例8将一位十六进制数转换成ASCII码,设十六进制数存放在R0中,转换后的ASCII码放在R2中。HTASC:MOVA,R0;取十六进制数PUSHACC;保护CLRC;SUBBA,#0AH;判断是否大于十POPACC;

JCLOOP;小于十,直接加30HADDA,#07H;大于十,加37HLOOP:ADDA,#30HMOVR2,ARET2022/11/2437例9将多位十六进制数转换成ASCII码,设R0指向十六进制数低位,R2存放字节数,转换后R1指向ASCII码高位。HTASC

:MOVA,@R0;取十六进制数ANLA,#0FH;取低四位ADDA,#15;偏移修正MOVCA,@A+PC;查表得ASCII码MOV@R1,A;保存INCR1MOVA,@R0;取十六进制数高四位SWAPA;ANLA,#0F0HADDA,#06H;偏移修正MOVCA,@A+PC;查表MOV@R

1,A;保存INCR0;指向下一单元INCR1DJNZR2,HTASCRETASCTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H2022/11/2438二、BCD码与二进制数之间的转换(对

比BCD与ASCCI之间的转换)可以参考教材:p320例7--12;p318;;例:双字节数R2R3转换成压缩BCD码存在R4R5R6中。由十进制数与二进制数之间的关系可知:十进制数D与n位二进制数的关系克表示为D=bn-1×2n-1+b

n-2×2n-2+...+b1×2+b0={...{[(bn-1×2+bn-2)×2]+bn-3}...+b1}×2+b0部分和存在R4R5R6中,其中bi每次移入Cy中2022/11/2439DCDTH:CL

RA;MOVR4,A;R4清零MOVR5,A;R4清零MOVR6,A;R6清零MOVR7,#16;循环初值LOOP:CLRCMOVA,R3;R2R3左移一位,并送回RLCA;(即将bi每次移入Cy中)MOVR3,A;MOVA,R2;RLCA;MOVR2,A;MOVA

,R6;R4R5R6×2+bi并调整送回ADDCA,R6DAA;MOVA,R5;ADDCA,R5;DAA;2022/11/2440MOVA,R4;ADDCA,R4DAA;MOVR4,A;DJNZR7,LO

OP;END2.8见教材p124编程练习:

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?