




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机与接口技术23(单片机汇编)第一页,共32页。汇编语言程序设计主要内容1.汇编语言格式及构成2.汇编源程序设计步骤及汇编3.顺序程序设计4.分支程序设计5.循环和查表程序设计6.子程序设计第二页,共32页。2.3.1汇编语言格式标号段:操作码段操作数段;注释段
如:LP1:MOVR2,#10;设置循环次数标号段:指明所在指令操作码字节所在的内存地址。标号由大写英文字母开头的字母和数字串组成,长度为1~8个字符。标号段可省略。汇编语言格式及构成第三页,共32页。2.3.2汇编语言构成1.指令性语句(助记符语句)2.指示性语句(伪指令)a.ORG(起始汇编)伪指令例:ORG2000H;指定程序存储地址从2000H开始b.END(结束汇编)伪指令例:ENDc.EQU(赋值)伪指令字符名称EQU数据或汇编符号;将右边的数据或汇编符号赋给左边的字符名称汇编语言格式及构成第四页,共32页。例如:AAEQUR1;AA当作寄存器R1使用A10EQU10H;A10=10HDELAYEQU07E6H;DELAY=07E6HMOVR0,A10MOVA,AALCALLDELAY汇编语言格式及构成第五页,共32页。d.DATA(数据地址赋值)伪指令字符名称DATA表达式;将右边表达式(8位);赋左边,只能是数据;或地址等DATA型字符名称XDATA表达式;16位例:AADATA35HDELAYXDATA0A7E6H汇编语言格式及构成第六页,共32页。e.DB(字节定义)伪指令[标号:]DB项或项表例:TAB:DB45H,73,‘A’;将45H、73、‘A’依次存放;入TAB地址开始的存储单元汇编语言格式及构成…‘A’73TAB45H…第七页,共32页。f.DW(字定义)伪指令[标号:]DW项或项表例:ORG1000HHETAB:DW1234H,8AH,10汇编语言格式及构成地址ROM……1005H00H1004H0AH1003H00H1002H8AH1001H12H1000H34H……第八页,共32页。g.DS(存储空间定义)伪指令[标号:]DS项或项表例:SPC:DS08H;从SPC地址开始,;预留8个存储单元DB25H;(SPC+8)=25H
汇编语言格式及构成返回h.BIT(位地址赋值)伪指令字符名称BIT位地址例:A1BIT00HA2BITP1.0MOVC,A1;将位地址00H的值送Cy
第九页,共32页。2.3.3汇编源程序设计步骤及汇编源程序设计步骤:1)拟定设计任务书,设计任务书包括:程序功能、技术指标、精度等级、实施方案、工程进度、所需设备、研制费用、人员分工2)建立数学模型3)确立算法4)绘制程序流程图5)编制汇编语言源程序6)上机调试
汇编语言源程序的汇编人工汇编机器汇编汇编语言格式及构成返回第十页,共32页。2.3.4顺序程序设计例题1:求一个16位二进制负数的补码。设此16位二进制数存于NUM、NUM+1单元解:补码=反码+1ORG1000HNUMDATA20HMOVR0,#NUMMOVA,@R0
CPLAADDA,#01H顺序程序设计返回MOV@R0,AINCR0MOVA,@R0CPLAADDCA,#00HMOV@R0,ASJMP$END第十一页,共32页。2.3.5分支程序设计分支程序设计例题2:已知VAR单元内有一自变量X,按如下条件编出求函数值Y并将它存入FUNC单元的程序:若X>0,则Y=1;若X=0,则Y=0;若X<0,则Y=-1。返回ORG1000HVARDATA30HFUNCDATA31H第十二页,共32页。分支程序设计MOVA,VARJZDONE;若VAR=0,则转DONEJNBACC.7,POS;若VAR>0,则转POSMOVA,#0FFH;若VAR<0,-1给A
SJMPDONEPOS:MOVA,#01HDONE:MOVFUNC,ASJMP$
END返回课7第十三页,共32页。2.3.6循环和查表程序设计循环和查表程序设计例题3:已知内部RAMADDR为始址的无符号数数据块的块长存储于LEN单元内,请编程找出数据块中的最大数并存入MAX单元解:ORG1000HLENDATA31HMAXDATA32HADDRDATA40H
MOVR0,#ADDR;R0指向数据块,初始化为;数据块首地址MOVMAX,ADDR;MAX单元初始化返回第十四页,共32页。循环和查表程序设计LOOP:MOVA,@R0;开始循环体,将一个数取到ACJNEA,MAX,BRCH;比较该数与MAX的大小BRCH:JCNEXT;若该数小,则进行下一次循环XCHA,MAX;若该数大,则与MAX交换NEXT:INCR0;为下一次循环做准备DJNZLEN,LOOP;判断循环次数
SJMP$
END返回第十五页,共32页。例题4:R0的低四位为一个16进制数码,编写程序,将该数码对应字符的ASCII编码送入R1。(例如:若R0的低4位为1110B,对应16进制数码E,则将字符’E’的ASCII码送入R1)循环和查表程序设计查表:用于查表的参数即为所查数据在表中的位置,即该存储地址距离表起始地址的距离。例如:a2表(a为10以内的自然数),根据a的值查表得a2的值。若a=3,a2=9,该数据存储地址距离表起始地址的距离即为3(个存储单元)。执行MOVCA,@A+PC指令后,@A+PC即指向该存储单元。100816449362516941表起始位置0MOVCA,@A+PC第十六页,共32页。循环和查表程序设计ASCTAB:DB‘0’,
‘1’,
‘2’,
‘3’;制表DB‘4’,‘5’,
‘6’,
‘7’
DB‘8’,
‘9’‘A’,
‘B’DB
‘C’,
‘D’,
‘E’,
‘F’ENDORG1000HMOVA,R0ANLA,#0FH;此时A为该字符在;表中的偏移距离ADDA,#03H;查表指令到表的距离MOVCA,@A+PC;查表MOVR1,A;单字节指令SJMP$;双字节指令ROM…‘F’…‘0’…SJMP$MOVR1,AMOVA,@A+PC解:第十七页,共32页。2.3.7子程序设计子程序可自动保护断点(即主程序中下一条指令的地址),但不会自动保护现场(即运行子程序前的寄存器状态),若要保护现场,则在子程序的开始部分用压入堆栈命令保护现场,在结束部分用弹出堆栈命令恢复现场可利用寄存器、存储单元或堆栈进行子程序的入口参数和出口参数传递子程序设计第十八页,共32页。例题5:设片内RAM单元MDA和MDB内有两数a和b,请编出求c=a2+b2并把c送入片内MDC单元的程序,设a和b皆为10以内的自然数。
SQRTAB
1008164493625表169410…子程序设计SQRTAB:DB0,1,4,9;平方表DB16,25,36DB49,64,81,100
END第十九页,共32页。子程序设计
ORG1000HMDADATA20HMDBDATA21HMDCDATA22HMOVA,MDA;入口参数传递
ACALLSQR;调用子程序MOVR1,AMOVA,MDBACALLSQRADDA,R1MOVMDC,ASJMP$SQR:ADDA,#01;子程序MOVCA,@A+PCRET;单字节指令SQRTAB:DB0,1,4,9,16;平方表DB25,36,49,64,81,100END
SQRTAB
1008164493625表169410RETMOVCA,@A+PC第二十页,共32页。练习1:片外RAM从0000H到007FH有一数据块,请编出将它们传送到3000H到307FH区域的程序。
解:ORG1000HMOVR0,#00HMOVDPTR,#3000HMOVR2,#80HLP1:MOVXA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR2,LP1END汇编语言程序设计课8第二十一页,共32页。练习2:有200名学生的外语统考成绩存放在80C51片外RAM始址为ENGLISH的连续存储单元,请统计成绩大于等于90分的学生人数,并把统计结果存入片内RAM的GRADA单元。汇编语言程序设计LP:MOVXA,@DPTRCJNEA,#90,BRCHBRCH:JCNEXTINCGRADANEXT:INCDPTRDJNZR2,LPSJMP$
END解:ORG1000HENGLISHXDATA2000HGRADADATA30HMOVDPTR,#ENGLISHMOVR2,#200MOVGRADA,#00H第二十二页,共32页。练习3:有两个四字节无符号数分别存放在片内RAM以FIRST和SECOND为始址的区域(低字节在前,高字节在后),请编程将两数之和(设和也为四字节)存于片内RAM以SUM为始址的区域。汇编语言程序设计LP:MOVR0,50HMOVA,@R0MOVR0,51HADDCA,@R0MOV@R1,AINC50HINC51HINCR1DJNZR2,LPSJMP$END解:ORG1000HFIRSTDATA20HSECONDDATA30HSUMDATA40HMOV50H,#FIRSTMOV51H,#SECONDMOVR1,#SUMMOVR2,#4CLRC第二十三页,共32页。练习4:已知片内RAM的MDA单元和MDB单元分别存有两个数a、b,请用查表子程序实现C=a2+2ab+b2,并把C存于片内RAM的MDC单元。设a、b均为5以内的自然数。汇编语言程序设计SQR:ADDA,#1MOVCA,@A+PCRETTAB:DB0,1,4,9,16,25DB36,49,64,81DB100
END解:ORG1000HMDADATA30HMDBDATA31HMDCDATA32HMOVA,MDAADDA,MDBACALLSQRMOVMDC,ASJMP$第二十四页,共32页。练习5:片内RAM从30H单元开始存放有一个正数表,以”-1”作为表的结束标志,编程统计该表的长度并存入片内RAM70H单元。假设表的长度小于255。汇编语言程序设计LP:MOVA,@R0CJNEA,#0FFH,CHKSJMPDONECHK:INC70HSJMPLPDONE:SJMP$
END解:ORG1000HMOVR0,#30HMOV70H,#00H2011机电3-4班第二十五页,共32页。练习6:设晶振频率为6MHz,试编写一能延时20ms的子程序。(提示:采用NOP指令延时)汇编语言程序设计解:分析:1个机器周期为12/(6*106)=2us,则20ms需消耗20*10-3/(2*10-6)=1000个机器周期NOP为单周期指令,所以需循环1000次,一个8位的存储单元只能最大只能存储255,所以,需要采用双重循环。本程序分别采用R2和R3存储内、外循环次数,内循环50次,外循环20次。第二十六页,共32页。汇编语言程序设计DELAY:MOVR3,#100EXT:MOVR2,#100INN:NOPDJNZR2,INNDJNZR3,EXT
RET思考:误差太大,如何精确定时?课9第二十七页,共32页。练习7:设8031单片机片内RAM从30H单元开始存放有20个8位二进制数。要求编一子程序能把它们从大到小依次存入片外RAM从1000H开始的存储区。
问题:需考虑排序的算法汇编语言程序设计解:ORG1000HMAXDATA30HMOVDP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业对数字财务人才的需求分析
- 高校与企业合作的现状与挑战
- 2025至2030年中国电器塑料制品数据监测研究报告
- 产业园厂房环境影响分析
- 2025至2030年中国汽车头枕海绵数据监测研究报告
- 2025至2030年中国手动冲压模数据监测研究报告
- 产品出租合同范例
- 2025至2030年中国半沉头铆钉数据监测研究报告
- 2025至2030年中国全自动小袋填充包装机数据监测研究报告
- 某钢结构建筑火灾数值模拟及防火措施研究
- 常州2025年江苏常州工程职业技术学院其他专技岗管理岗招聘笔试历年参考题库附带答案详解
- 2025年大学宿舍物业服务质量承包合同
- (二调)武汉市2025届高中毕业生二月调研考试 生物试卷(含标准答案)
- Module 2 Unit 2 It will snow in Harbin.(说课稿)-2023-2024学年外研版(三起)英语六年级下册
- 真需求-打开商业世界的万能钥匙
- 2025届湖北省武汉市高考数学一模试卷含解析
- DZ∕T 0080-2010 煤炭地球物理测井规范(正式版)
- 9月份WC50Y支架搬运车的维护与保养
- 项目部技术管理岗位责任制度
- PowerCLI命令使用方法
- 移动模架过孔施工安全方案(最终)
评论
0/150
提交评论