婺源县非物质文化遗产

上传人:j****9 文档编号:54525534 上传时间:2018-09-14 格式:PPT 页数:39 大小:2.18MB
返回 下载 相关 举报
婺源县非物质文化遗产_第1页
第1页 / 共39页
婺源县非物质文化遗产_第2页
第2页 / 共39页
婺源县非物质文化遗产_第3页
第3页 / 共39页
婺源县非物质文化遗产_第4页
第4页 / 共39页
婺源县非物质文化遗产_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《婺源县非物质文化遗产》由会员分享,可在线阅读,更多相关《婺源县非物质文化遗产(39页珍藏版)》请在金锄头文库上搜索。

1、2018/9/14,1,第4章 80C51的汇编语言程序设计,程序编制的方法和技巧,4.1,源程序的编辑和汇编,4.2,基本程序结构,4.3,子程序及其调用,4.4,简单I/O设备的并口直接驱动示例,4.5,2018/9/14,2,单片机应用系统由硬件系统和应用程序构成,汇编语言高级语言,应用程序设计方法,汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。,高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。,2018/9/14,3,4.1 程序编制的方法和技巧,4.1.1 程序编制的步骤,明确任务:功能要求、技术指标运行环境调研,任务分

2、析,将实际问题转化为计算机处理的程序算法算法比较与优化(内存需求与运行速度),算法设计,2018/9/14,4,流程描述,流程图符号,“超级循环”框架,2018/9/14,5,强化模块观念,使程序占用空间减少、结构清晰 循环初值和结束条件,避免“死机”现象 子程序的现场保护(注意栈平衡、寄存器内容),程序模块(主程序模块、各种子程序模块) 模块化优点:分块设计、便于阅读、调试方便,4.1.2 程序编制的方法和技巧,采用循环和子程序,对中断子程序还有注意保护PSW的内容,2018/9/14,6,4.1.3 汇编语言的语句格式,非数字字符开头,后跟字母、数字、“-”、“?”等 不能用已定义的保留字

3、(指令助记符、伪指令等) 后跟英文冒号“:”,Keil的汇编器A51可以识别的语句形式为:,标号(即符号地址),标号: 指令助记符 操作数1, 操作数2, 操作数3, ;注释,指令助记符,是指令功能的英文缩写。,2018/9/14,7,数据:二进制(B)十进制(D或省略D)十六进制(H),注意AF开头时要加“0”ASCII码,如 A,1245 符号:符号名、标号或“$”(PC的当前值) 表达式:由运算符和数据构成(见表4.1),操作数,注释,英文分号“;”开头,2018/9/14,8,表4.1,2018/9/14,9,4.2 源程序的编辑和汇编,目标程序的产生过程如下图:,2018/9/14,

4、10,4.2.1 源程序的编辑和汇编,源程序的编辑,ORG 0000HLJMP MAINORG 0040H MAIN:MOV R7,#16 MOV R0,#60HMOV A,#55H LOOP:MOV R0,AINC R0DJNZ R7,LOOPSJMP $END,依据汇编语言规则 用好伪指令 符号不用中文 SJMP $ 用于调试 以 .ASM存盘,2018/9/14,11,源程序的汇编,汇编源程序转为目标程序的过程叫汇编 汇编通常在Windows下的集成开发环境完成 用A51.EXE汇编生成.OBJ、.LIB及.LST,目标程序的连接,.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地

5、址目标文件 绝对地址目标文件可以用于仿真器调试 调试无误的目标文件用OH51.EXE转换为.HEX文件 .HEX文件经编程器写入单片机存储器,2018/9/14,12,4.2.2 伪指令,伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码,起始地址设定伪指令ORG,ORG 表达式,表达式通常为十六进制地址,例:,ORG 8000H START:MOV A,#30H ,ORG可多次使用,但地址值的顺序要由小到大,结束汇编伪指令END,END,该伪指令位于源程序的最后一行。,2018/9/14,13,定义字节数据表伪指令DB,定义字数据表伪指令DW,1000H,标号: DB

6、 字节数据表,如: ORG 1000H DB -2,-4,-6,8,10,18,1001H,标号: DW 字数据表,ORG 1400H DATA1:DW 324AH,3CH ,1400H,1401H,1402H,1403H,大端模式,2018/9/14,14,定义常值为符号名伪指令EQU,符号名 EQU 常值表达式,LEN EQU 10SUM EQU 21H BLOCK EQU 22HCLR AMOV R7,LENMOV R0,BLOCKLOOP:ADD A,R0INC R0DJNZ R7,LOOPMOV SUM,A,符号名为: 地址 常数 段名 字符串 寄存器名 位名,比较:标号只能是地址,

7、2018/9/14,15,定义位地址为符号名伪指令BIT,符号名 BIT 位地址表达式,如: ST BIT P1.0 ;将P1.0的位地址赋给符号名ST CF BIT 0D7H ;将位地址为D7H的位定义为符号名,用BIT定义的“符号名”一经定义便不能重新定义和改变 其它一些伪指令参见教材表4.2,2018/9/14,16,4.3.1 顺序程序,(无分支、无循环),4.3 基本程序结构,【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。,2018/9/14,17,ORG 0040H

8、 START:MOV A,21H ;取十位ASCII码ANL A,#0FH ;保留低半字节SWAP A ;移至高半字节MOV 20H,A ;存于20H单元MOV A,22H ;取个位ASCII码ANL A,#0FH ;保留低半字节ORL 20H,A ;合并到结果单元SJMP $END,2018/9/14,18,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并送回原单元。,2018/9/14,19,ORG 0040

9、H START:MOV A,30H ;取x至累加器JZ NEXT ;x = 0,转NEXTANL A,#80H ;否,保留符号位JZ DONE ;x 0,转结束MOV A,#05H ;x 0处理ADD A,30H MOV 30H,A ;X+05H送YSJMP DONENEXT:MOV 30H,#20H ;x = 0,20H送YDONE:SJMP DONE END,2018/9/14,20,【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。 设R7内容为04,对应的处理程序入口地址分别为PP0PP4。,2018/9/14,21,START:MOV R7,#3 ;以转移序号3为例ACAL

10、L JPNUMAJMP STARTJPNUM:MOV DPTR,#TAB ;置分支入口地址表首址MOV A,R7ADD A,R7 ;乘2,调整偏移量MOV R3,A MOVC A,A+DPTR ;取地址高字节,暂存于R3XCH A,R3 INC A MOVC A,A+DPTR ;取地址低字节MOV DPL,A ;处理程序入口地址低8位送DPLMOV DPH,R3 ;处理程序入口地址高8位送DPHCLR A JMP A+DPTR,2018/9/14,22,TAB:DW PP0DW PP1DW PP2DW PP3DW PP4 PP0:MOV 30H,#0 ;转移序号为0时,置功能号“0”于30H单

11、元RETPP1:MOV 30H,#1 ;转移序号为1时,置功能号“1”于30H单元RETPP2:MOV 30H,#2 ;转移序号为2时,置功能号“2”于30H单元RETPP3:MOV 30H,#3 ;转移序号为3时,置功能号“3”于30H单元RETPP4:MOV 30H,#4 ;转移序号为4时,置功能号“4”于30H单元RET,2018/9/14,23,4.3.3 循环程序,(2种:先执行,后判断;先判断,后执行),【例4-4】将内部RAM的30H至3FH单元初始化为00H。,MAIN:MOV R0,#30H ;置初值MOV A,#00H ; MOV R7,#16 ; LOOP:MOV R0,

12、A ;循环处理INC R0 ;DJNZ R7,LOOP ;循环修改,判结束 SJMP $ ;结束处理,2018/9/14,24,【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域,直到发现$ 字符停止传送。,MAIN:MOV R0,#60H ;置初值MOV DPTR,#1000H LOOP0:MOV A,R0 ;取数据CJNE A,#24H,LOOP1 ;循环结束?SJMP DONE ;是 LOOP1:MOVX DPTR,A ;循环处理INC R0 ;循环修改INC DPTR SJMP LOOP0 ;继续循环DONE:SJMP DONE ;结束处理

13、,2018/9/14,25,4.4 子程序及其调用,完成通用功能、反复使用的程序设计成子程序。使应用程序结构清晰紧凑,便于阅读和调试,执行要由其它程序来调用,执行完后要返回到调用程序,结构上仍然采用一般程序的3种结构,调用时注意: 一是现场的保护和恢复; 二是主程序与子程序间的参数传递。,2018/9/14,26,4.4.1 现场保护与恢复,在主程序中实现(结构灵活),PUSH PSW ;保护现场( 含当前工作寄存器组号) PUSH ACC ; PUSH B ; MOV PSW,#10H ;切换当前工作寄存器组 LCALL addr16 ;子程序调用, POP B ;恢复现场 POP ACC

14、; POP PSW ;含当前工作寄存器组切换,2018/9/14,27,在子程序中实现(程序规范、清晰),SUB1:PUSH PSW ;保护现场( 含当前工作寄存器组号) PUSH ACC ;PUSH B ;MOV PSW,#10H ;切换当前工作寄存器组 POP B ;恢复现场POP ACC ;POP PSW ;内含当前工作寄存器组切换RET,2018/9/14,28,4.4.2 参数传递,利用累加器或寄存器(简单、快速,但参数个数不多),【例4-6】实现两个8位的十六进制无符号数求和的子程序。,SADD:MOV A,R3 ;取加数(在R3中)CLR CADD A,R4 ;被加数(在R4中)加AJC PP1MOV R3,#00H ;结果小于255时,高字节R3内容为00HSJMP PP2PP1:MOV R3,#01H ;结果大于255时,高字节R3内容为01HPP2:MOV R4,A ;结果的低字节在R4中RET,入口:(R3)=加数;(R4)=被加数。,出口:(R3)=和的高字节;(R4)=和的低字节。,2018/9/14,29,利用存储器(个数多,用R0或R1及DPTR为参数表指针),【例4-7】将内部RAM 中两个4字节无符号整数相加,和的高字节由R0指向。数据采用大端模式存储。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号