




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/5/1,1,第4章80C51的汇编语言程序设计,程序编制的方法和技巧,4.1,源程序的编辑和汇编,4.2,基本程序结构,4.3,子程序及其调用,4.4,简单I/O设备的并口直接驱动示例,4.5,2020/5/1,2,单片机应用系统由硬件系统和应用程序构成,汇编语言高级语言,应用程序设计方法,汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。,高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。,2020/5/1,3,4.1程序编制的方法和技巧,4.1.1程序编制的步骤,明确任务:功能要求、技术指标运行环境调研,任务分析,将实际问题转化为计算机处理的程序算法算法比较与优化(内存需求与运行速度),算法设计,2020/5/1,4,流程描述,流程图符号,“超级循环”框架,2020/5/1,5,强化模块观念,使程序占用空间减少、结构清晰循环初值和结束条件,避免“死机”现象子程序的现场保护(注意栈平衡、寄存器内容),程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便,4.1.2程序编制的方法和技巧,采用循环和子程序,对中断子程序还有注意保护PSW的内容,2020/5/1,6,4.1.3汇编语言的语句格式,非数字字符开头,后跟字母、数字、“-”、“?”等不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号“:”,Keil的汇编器A51可以识别的语句形式为:,标号(即符号地址),标号:指令助记符操作数1,操作数2,操作数3,;注释,指令助记符,是指令功能的英文缩写。,2020/5/1,7,数据:二进制(B)十进制(D或省略D)十六进制(H),注意AF开头时要加“0”ASCII码,如A,1245符号:符号名、标号或“$”(PC的当前值)表达式:由运算符和数据构成(见表4.1),操作数,注释,英文分号“;”开头,2020/5/1,8,表4.1,2020/5/1,9,4.2源程序的编辑和汇编,目标程序的产生过程如下图:,2020/5/1,10,4.2.1源程序的编辑和汇编,源程序的编辑,ORG0000HLJMPMAINORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOVR0,AINCR0DJNZR7,LOOPSJMP$END,依据汇编语言规则用好伪指令符号不用中文SJMP$用于调试以.ASM存盘,2020/5/1,11,源程序的汇编,汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51.EXE汇编生成.OBJ、.LIB及.LST,目标程序的连接,.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51.EXE转换为.HEX文件.HEX文件经编程器写入单片机存储器,2020/5/1,12,4.2.2伪指令,伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码,起始地址设定伪指令ORG,ORG表达式,表达式通常为十六进制地址,例:,ORG8000HSTART:MOVA,#30H,ORG可多次使用,但地址值的顺序要由小到大,结束汇编伪指令END,END,该伪指令位于源程序的最后一行。,2020/5/1,13,定义字节数据表伪指令DB,定义字数据表伪指令DW,1000H,标号:DB字节数据表,如:ORG1000HDB-2,-4,-6,8,10,18,1001H,标号:DW字数据表,ORG1400HDATA1:DW324AH,3CH,1400H,1401H,1402H,1403H,大端模式,2020/5/1,14,定义常值为符号名伪指令EQU,符号名EQU常值表达式,LENEQU10SUMEQU21HBLOCKEQU22HCLRAMOVR7,LENMOVR0,BLOCKLOOP:ADDA,R0INCR0DJNZR7,LOOPMOVSUM,A,符号名为:地址常数段名字符串寄存器名位名,比较:标号只能是地址,2020/5/1,15,定义位地址为符号名伪指令BIT,符号名BIT位地址表达式,如:STBITP1.0;将P1.0的位地址赋给符号名STCFBIT0D7H;将位地址为D7H的位定义为符号名,用BIT定义的“符号名”一经定义便不能重新定义和改变其它一些伪指令参见教材表4.2,2020/5/1,16,4.3基本程序结构,一般不影响标志寄存器PSW的状态。,传送类指令有两大类一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP,2020/5/1,17,4.3.1顺序程序,(无分支、无循环),4.3基本程序结构,【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。,2020/5/1,18,ORG0040HSTART:MOVA,21H;取十位ASCII码ANLA,#0FH;保留低半字节SWAPA;移至高半字节MOV20H,A;存于20H单元MOVA,22H;取个位ASCII码ANLA,#0FH;保留低半字节ORL20H,A;合并到结果单元SJMP$END,2020/5/1,19,4.3.2分支程序,(单分支、双分支、多分支),【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。,2020/5/1,20,ORG0040HSTART:MOVA,30H;取x至累加器JZNEXT;x=0,转NEXTANLA,#80H;否,保留符号位JZDONE;x0,转结束MOVA,#05H;x0处理ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND,2020/5/1,21,【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。设R7内容为04,对应的处理程序入口地址分别为PP0PP4。,2020/5/1,22,START:MOVR7,#3;以转移序号3为例ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址MOVA,R7ADDA,R7;乘2,调整偏移量MOVR3,AMOVCA,A+DPTR;取地址高字节,暂存于R3XCHA,R3INCAMOVCA,A+DPTR;取地址低字节MOVDPL,A;处理程序入口地址低8位送DPLMOVDPH,R3;处理程序入口地址高8位送DPHCLRAJMPA+DPTR,2020/5/1,23,TAB:DWPP0DWPP1DWPP2DWPP3DWPP4PP0:MOV30H,#0;转移序号为0时,置功能号“0”于30H单元RETPP1:MOV30H,#1;转移序号为1时,置功能号“1”于30H单元RETPP2:MOV30H,#2;转移序号为2时,置功能号“2”于30H单元RETPP3:MOV30H,#3;转移序号为3时,置功能号“3”于30H单元RETPP4:MOV30H,#4;转移序号为4时,置功能号“4”于30H单元RET,2020/5/1,24,4.3.3循环程序,(2种:先执行,后判断;先判断,后执行),【例4-4】将内部RAM的30H至3FH单元初始化为00H。,MAIN:MOVR0,#30H;置初值MOVA,#00H;MOVR7,#16;LOOP:MOVR0,A;循环处理INCR0;DJNZR7,LOOP;循环修改,判结束SJMP$;结束处理,2020/5/1,25,【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域,直到发现$字符停止传送。,MAIN:MOVR0,#60H;置初值MOVDPTR,#1000HLOOP0:MOVA,R0;取数据CJNEA,#24H,LOOP1;循环结束?SJMPDONE;是LOOP1:MOVXDPTR,A;循环处理INCR0;循环修改INCDPTRSJMPLOOP0;继续循环DONE:SJMPDONE;结束处理,2020/5/1,26,4.4子程序及其调用,完成通用功能、反复使用的程序设计成子程序。使应用程序结构清晰紧凑,便于阅读和调试,执行要由其它程序来调用,执行完后要返回到调用程序,结构上仍然采用一般程序的3种结构,调用时注意:一是现场的保护和恢复;二是主程序与子程序间的参数传递。,2020/5/1,27,4.4.1现场保护与恢复,在主程序中实现(结构灵活),PUSHPSW;保护现场(含当前工作寄存器组号)PUSHACC;PUSHB;MOVPSW,#10H;切换当前工作寄存器组LCALLaddr16;子程序调用,POPB;恢复现场POPACC;POPPSW;含当前工作寄存器组切换,2020/5/1,28,在子程序中实现(程序规范、清晰),SUB1:PUSHPSW;保护现场(含当前工作寄存器组号)PUSHACC;PUSHB;MOVPSW,#10H;切换当前工作寄存器组POPB;恢复现场POPACC;POPPSW;内含当前工作寄存器组切换RET,2020/5/1,29,4.4.2参数传递,利用累加器或寄存器(简单、快速,但参数个数不多),【例4-6】实现两个8位的十六进制无符号数求和的子程序。,SADD:MOVA,R3;取加数(在R3中)CLRCADDA,R4;被加数(在R4中)加AJCPP1MOVR3,#00H;结果小于255时,高字节R3内容为00HSJMPPP2PP1:MOVR3,#01H;结果大于255时,高字节R3内容为01HPP2:MOVR4,A;结果的低字节在R4中RET,入口:(R3)=加数;(R4)=被加数。,出口:(R3)=和的高字节;(R4)=和的低字节。,2020/5/1,30,利用存储器(个数多,用R0或R1及DPTR为参数表指针),【例4-7】将内部RAM中两个4字节无符号整数相加,和的高字节由R0指向。数据采用大端模式存储。,入口:(R0)=加数低字节地址;(R1)=被加数低字节地址。,出口:(R0)=和的高字节起始地址。,NADD:MOVR7,#4;字节数4送计数器CLRC;NADD1:MOVA,R0;利用指针,取加数低字节ADDCA,R1;利用指针,被加数低字节加AMOVR0,A;DECR0DECR1DJNZR7,NADD1INCR0;调整指针,指向出口RET,2020/5/1,31,利用堆栈,【例4-8】将内部RAM中20H单元中的1个字节十六进制数转换为2位ASCII码,存放在R0指示的两个单元中。,入口:预转换数据(低半字节)在栈顶,出口:转换结果(ASCII码)在栈顶,HEASC:MOVR1,SP;借用R1为堆栈指针DECR1DECR1;R1指向被转换数据XCHA,R1;取被转换数据ANLA,#0FH;取一位十六进制数ADDA,#2;偏移调整,所加值为MOVC与DB间总字节数MOVCA,A+PC;查表XCHA,R1;1字节指令,存结果于堆栈中RET;1字节指令ASCTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H,2020/5/1,32,验证程序段,MAIN:MOVA,20H;SWAPAPUSHACC;预转换的数据(在低半字节)入栈ACALLHEASCPOPACC;弹出栈顶结果于ACC中MOVR0,A;存转换结果高字节INCR0;修改指针PUSH20H;预转换的数据(在低半字节)入栈ACALLHEASCPOPACC;弹出栈顶结果于ACC中MOVR0,A;存转换结果低字节SJMP$,2020/5/1,33,4.4.3常用子程序示例(略),2020/5/1,34,4.5简单I/O设备的并口直接驱动示例,4.5.1独立式键盘与LED显示示例,【例4-17】数据端与P0口正序连接。编写程序,分别实现功能:上电后数码管显示“P”,按下任何键后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,进入等待按键状态。,2020/5/1,35,TEMPEQU30HORG0000HJMPSTARTORG0100HSTART:MOVSP,#5FHMOVP0,#8CH;显示PMOVP3,#0FFHNOKEY:MOVA,P3CPLAJZNOKEY;无键按下MOVTEMP,P3;有键按下CALLD10msMOVA,P3CJNEA,TEMP,NOKEY;去抖MOVR7,#16MOVR2,#0,LOOP:MOVA,R2MOVDPTR,#CODE_P0MOVCA,A+DPTRMOVP0,AINCR2SETBRS0;切换组CALLD_1SCLRRS0DJNZR7,LOOPJMPSTART,D_1S:(子程序)D10ms:(子程序),CODE_P0:DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,90H,88H,83H,DB0C6H,0A1H,86H,8EH,2020/5/1,36,有时为方便走线而采用逆序连接,显示段码要进行调整:CODE_P2:DB03H,9FH,25H,0DH,99H,49H,40H,1FHDB01H,09H,11H,0C1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社工证考试题库及答案
- 校园小超市安全知识培训课件
- 工会相关考试试题及答案
- 校车碰撞测试题及答案
- 用公务员面试题及答案
- 公共外交面试题及答案
- 减灾中心面试题及答案
- 校园现金测试题及答案
- 2025年国能铜陵发电有限公司招聘考试笔试试题(含答案)
- 2025年广元团市委下属事业单位招募人员考试笔试试题(含答案)
- 群团工作笔试试题及答案
- 英语口语8000句精装版2
- 中等职业学校数字媒体技术应用专业人才培养方案
- 仓储管理赋能培训
- 高一上学期《早读是需要激情的!》主题班会课件
- 龙门吊警示教育
- 食堂购买蔬菜管理制度
- (二模)金华十校2025年4月高三模拟考试语文试卷(含答案解析)
- 油画修复技术探讨-深度研究
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板)
- 班主任培训:家校共育
评论
0/150
提交评论