片机原理及应用-汇编语言程序设计.ppt

上传人:牧羊曲112 文档编号:6426485 上传时间:2023-10-30 格式:PPT 页数:31 大小:214KB
返回 下载 相关 举报
片机原理及应用-汇编语言程序设计.ppt_第1页
第1页 / 共31页
片机原理及应用-汇编语言程序设计.ppt_第2页
第2页 / 共31页
片机原理及应用-汇编语言程序设计.ppt_第3页
第3页 / 共31页
片机原理及应用-汇编语言程序设计.ppt_第4页
第4页 / 共31页
片机原理及应用-汇编语言程序设计.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《片机原理及应用-汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《片机原理及应用-汇编语言程序设计.ppt(31页珍藏版)》请在三一办公上搜索。

1、,汇编语言程序设计-程序设计概述,一、汇编语言的特点(1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。(2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。(3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。(4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。,二、汇编语言程序设计的步骤与特点(1)分析任务(2)建立数学模型,确定算法(3)制定程

2、序流程图(4)编写源程序(5)源程序的汇编与调试(6)编写程序说明文件,汇编语言程序设计-程序设计概述,汇编程序控制译码指令1ORG(ORiGin)汇编起始地址命令 ORG 例:ORG 0000H ORG 0023H2END(END of assembly)汇编终止命令 END 3EQU(EQUate)赋值命令 EQU 例:TTY:EQU 1080H LOOP1:EQU TTY,汇编语言程序设计-常用伪指令,4DB(Define Byte)定义字节命令 DB 例:HERE:DB 80H5DW(Define Word)定义数据字命令 DW 例:HERE:DW 1080H6DS(Define St

3、onage)定义存储区命令 DW 例:HERE:DS 0100H7BIT位定义命令 BIT 例:HERE:BIT 7FH,汇编语言程序设计-常用伪指令,汇编语言源程序由以下两种指令构成汇编语句(指令语句)伪指令(指示性语句)汇编语句的格式:标号:操作码操作数;注释 数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)3.伪指令:控制汇编用的特殊指令,这些指令不属 于指令系统,不产生机器代码。,汇编语言程序设计-汇编语言的规范,例 三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求

4、把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。MOVR0,#52H;被加数的低字节地址MOVR1,#55H;加数的低字节地址MOVA,R0ADDA,R1;低字节相加MOV R0,A;存低字节相加结果DECR0DECR1MOVA,R0ADDCA,R1;中间字节带进位相加MOV R0,A;存中间字节相加结果,汇编语言程序设计-顺序结构程序,DECR0DECR1MOVA,R0ADDCA,R1;高字节带进位相加MOV R0,A;存高字节相加结果MOV00H,C;进位送00H位保存,汇编语言程序设计-顺序结构程序,分支程序可根据要求无条件或条件地改变程序执行流向。编写分支

5、程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)1 单分支结构例5-2 变量X存放在VAR单元内,函数值Y存放在FUNC单元中,试按下式的要求给Y 赋值。,汇编语言程序设计-分支结构程序,汇编语言程序设计-分支结构程序,参考程序:ORG0000HVAR DATA30HFUNC DATA31H MOVA,VAR;A X JZ DONE;若X=0,则转DONE JNBACC.7,POSI;若X0,则转POSI MOVA,#0FFH;若X0,则Y=1DONE:MOVFUNC,A;存函数值 SJMP$END,汇编语言程序设计-分支结构程序,参考程序:ORG0000H

6、VAR:DATA30HFUNC:DATA31H MOVA,VAR;A X JZ DONE;若X=0,则转DONE MOVR0,#0FFH;先设X0,R0=1NEG:MOVA,#01H;若X0,则Y=1DONE:MOVFUNC,A;存函数值 SJMP$END,汇编语言程序设计-分支结构程序,例:根据R7的内容,转至对应的分支程序。设R7的内容为0N,对应的处理程序地址分别为P0P7START:MOV DPTR,#TAB MOV A,R7 ADD A,R7;R72A MOV R3,A;暂存R3 MOVC A,A+DPTR;取高位地址 XCH A,R3 INC A MOVC A,A+DPTR;取低位

7、地址 MOV DPL,A MOV DPH,R3;转移地址送入DPTR CLR A JMP A+DPTR TAB:DW P0 DW P1 DW PN,汇编语言程序设计-分支结构程序,循环程序一般由:初始化部分 循环体部分-处理部分、修改部分、控制部分 结束部分其结构一般有两种:先进入处理部分,再控制循环 至少执行一次循环体 先控制循环,再进入处理部分 循环体是否执行,取决于判断结果。循环控制的一般方法:循环次数已知:利用循环次数控制 循环次数未知:利用关键字控制 利用“逻辑尺”:根据“逻辑尺”的内容,进行控制,汇编语言程序设计-循环程序,开始,设置循环初值,循环处理,循环修改,结束处理,结束,循

8、环结束?,Y,N,汇编语言程序设计-循环程序,例:统计数据块的长度入口条件:内部RAM 30H开始的存储区有若干个数据,最后一个数据为字符FFH,结果存入40H单元。ORG 0100HMAIN:MOV R1,#30H;R1作为地址指针 CLRA;累加器A作为计数器LOOP:CJNER1,#0FFH,NEXT;与数据FF比较,不 等转移 LJMPJSH1;找到结束符号,结束循环NEXT:INC A;计数器加1 INCR1;指针加l LJMP L00P;循环,汇编语言程序设计-循环程序,JSHl:INCA;再加入l个字符 MOV30H,A;存结果 END,汇编语言程序设计-循环程序,例延时程序(晶

9、振为12M),由于采用12M晶振,机器周期为1s,DJNZ的指令周期为2,整个程序的执行时间为25020021s100000s0.1s ORG0100H;0.1s延时程序(晶振为12M)MOVR2,#200LOOP:MOVR3,#250DJNZR3,$DJNZR2,LOOP,汇编语言程序设计-循环程序,ORG0100H;1s延时程序(晶振为12M)MOVR1,#10LOOP1:MOVR2,#200LOOP:MOVR3,#250DJNZR3,$DJNZR2,LOOPDJNZR1,LOOP1,汇编语言程序设计-循环程序,带通用性问题,可以把它设计成通用子程序以供调用。这样使程序紧凑,缩短程序长度,

10、调式方便。1 子程序结构应具备 1)必须标明子程序入口地址,即名称 2)必须以返回指令RET结束子程序 2 子程序设计时注意事项:1)要能正确传递参数:入口条件:子程序中要处理的数据如何给予。出口条件:子程序处理结果如何存放。(寄存器、存储器、堆栈方式),汇编语言程序设计-子程序结构程序,2)保护与恢复现场:保护现场:压栈指令PUSH 恢复现场:弹出指令POP3 子程序特性 1)通用性 2)可浮动性 3)可递归和重入性,汇编语言程序设计-子程序结构程序,例单字节十六进制数转换成双字节ASCII码入口条件:待转换的单字节十六进制数在寄存器R2中。出口:高四位的ASCII码在A中,低四位的ASCI

11、I码在B中。ORG0100H MOVA,R2 MOVB,A;暂存待转换的单字节十六进制数 LCALLMS1;转换低四位,汇编语言程序设计-子程序结构程序,XCHA,B;存放低四位的ASCII码 SWAPA;准备转换高四位 LCALLMS1;转换高四位 LJMP$MS1:ANLA,#0FH;将累加器的低四位转换成 ASCII 码 ADDA,#90H DA A ADDCA,#40H DA A RET,汇编语言程序设计-子程序结构程序,例5:将多位十六进制数转换成ASCII码,设R0指向十六进制数低位,R2存放字节数,转换后R1指向ASCII码高位。HTASC:MOV A,R0;取十六进制数 ANL

12、 A,#0FH;取低四位 ADD A,#15;偏移修正 MOVC A,A+PC;查表得ASCII码 MOV R1,A;保存 INC R1 MOV A,R0;取十六进制数高四位 SWAP A;ANL A,#0F0H ADD A,#06H;偏移修正,汇编语言程序设计-查表结构程序,MOVC A,A+PC;查表 MOV R1,A;保存 INC R0;指向下一单元 INC R1 DJNZ R2,HTASC RETASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H,汇编语言程序设计-查表结构程序,例 内

13、部RAM20H单元开始存8个无符号8位二进制数,找出其中的最大数。极值查找操作的主要内容是进行数值大小的比较。假定在比较过程中,以A存放大数,与之逐个比较的另一个数放在2AH单元中。比较结束后,把查找到的最大数送2BH单元中。程序流程如图所示。,汇编语言程序设计-设计与技巧举例,参考程序如下:MOVR0,#20H;数据区首地址MOVR7,#08H;数据区长度MOVA,R0;读第一个数DECR7LOOP:INCR0MOV2AH,R0;读下一个数CJNEA,2AH,CHK;数值比较CHK:JNCLOOP1;A值大转移MOVA,R0;大数送ALOOP1:DJNZR7,LOOP;继续MOV2BH,A;

14、极值送2BH单元HERE:LJMPHERE;停止,汇编语言程序设计-设计与技巧举例,例 编出能根据R6的内容转向各个操作程序的程序。设该操作程序的转向地址分别为OPRD0,OPRDl,OPRDn。程序如下:MOV DPTR,#TAB3;指向转移地址表 MOV A,R6ADD A,R6JNC NANDINC DPHNAND:MOV R7,A MOVC A,A+DPTR;取转向地址高8位 XCH A,R7 INC A MOVC A,A+DPTR;取转向地址低8位 PUSH A;转向地址入栈,汇编语言程序设计-设计与技巧举例,MOV A,R7 PUSH A RET;转向操作程序TAB3:DW OPR

15、D0;转向地址表 DW OPRDl DW OPRDn,汇编语言程序设计-设计与技巧举例,例 试编出能模拟图4-9中电路的程序。,汇编语言程序设计-设计与技巧举例,ORG 0000H D BIT 00H E BIT 01H G BIT 02HLOOP1:ORL P1,#08H;准备P1.3输入LOOP2:MOV C,P1.3;检测K3状态 JC LOOP2;若未准备好(K3断),则LOOP2 ORL P1,#03H;若准备好,则准备输入P1.0和P1.1状态 MOV C,P1.0;输入K0状态 MOV D,C;送入D MOV C,P1.1;输入K1状态 MOV E,C;送入E ANL C,D;DE送C MOV G,C;送入G,汇编语言程序设计-设计与技巧举例,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号