单片机原理与接口技术(第2版)第4章80C51的汇编语言程序设计

上传人:仙*** 文档编号:241997343 上传时间:2024-08-09 格式:PPT 页数:40 大小:2.16MB
返回 下载 相关 举报
单片机原理与接口技术(第2版)第4章80C51的汇编语言程序设计_第1页
第1页 / 共40页
单片机原理与接口技术(第2版)第4章80C51的汇编语言程序设计_第2页
第2页 / 共40页
单片机原理与接口技术(第2版)第4章80C51的汇编语言程序设计_第3页
第3页 / 共40页
点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,第,4,章,80C51,的汇编语言程序设计,程序编制的,方法,和,技巧,4.1,源程序的,编辑,和,汇编,4.2,基本,程序结构,4.3,子程序,及其调用,4.4,简单,I/O,设备的并口直接驱动,示例,4.5,2024/8/9,1,单片机应用系统由,硬件系统,和,应用程序,构成,汇编语言,高级语言,应用程序设计方法,汇编语言,,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。,高级语言,,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。,2024/8/9,2,4.1,程序编制的方法和技巧,4.1.1,程序编制的步骤,明确任务:功能要求、技术指标,运行环境调研,任务分析,将实际问题转化为计算机处理的程序算法,算法比较与优化(内存需求,与,运行速度),算法设计,2024/8/9,3,流程描述,流程图符号,“,超级循环,”,框架,2024/8/9,4,强化模块观念,使程序占用空间减少、结构清晰,循环初值和结束条件,避免,“,死机,”,现象,子程序的现场保护(注意栈平衡、寄存器内容),程序模块(主程序模块、各种子程序模块),模块化优点:分块设计、便于阅读、调试方便,4.1.2,程序编制的方法和技巧,采用循环和子程序,对中断子程序还有注意保护,PSW,的内容,2024/8/9,5,4.1.3,汇编语言的语句格式,非数字字符开头,后跟字母、数字、,“,-,”,、,“,?,”,等,不能用已定义的保留字(指令助记符、伪指令等),后跟英文冒号,“,:,”,Keil,的汇编器,A51,可以识别的语句形式为:,标号(即符号地址),标号,:,指令助记符,操作数,1,操作数,2,操作数,3,;,注释,指令助记符,是指令功能的英文缩写。,2024/8/9,6,数据:二进制(,B,),十进制(,D,或省略,D,),十六进制(,H,),注意,A,F,开头时要加,“,0,”,ASCII,码,如,A,,,1245,符号:符号名、标号或,“,$,”,(,PC,的当前值),表达式:由运算符和数据构成(见表,4.1,),操作数,注释,英文分号,“,;,”,开头,2024/8/9,7,优先级,运 算 符,功 能,表达式及其结果示例,高,低,(),括号,4*,(,5+6,)即,44,NOT,、,HIGH,、,LOW,取反、取高字节、取低字节,NOT 55H,即,AAH,;,HIGH 1234H,即,12H,、,正号、负号,5,、,6,*、,/,、,MOD,乘、除(取商)、取余数,17/5,即,3,;,17 MOD 5,即,2,、,加、减,5,4,即,9,;,5,4=,即,1,SHL,、,SHR,左移、右移,2 SHL 2,即,8,;,8 SHR 2,即,2,AND,、,OR,、,XOR,与、或、异或,45H AND 0FH,即,05H,、,=,、,、,=,比较运算符,MOV A,X8,;,若,X8,为真,则为,MOV A,01H,若,X8,为假,则为,MOV A,00H,表,4.1,2024/8/9,8,4.2,源程序的编辑和汇编,目标程序的产生过程如下图:,2024/8/9,9,4.2.1,源程序的编辑和汇编,源程序的编辑,ORG,0000H,LJMP MAIN,ORG,0040H,MAIN:MOV R7,#16,MOV R0,#60H,MOV A,#55H,LOOP:MOV R0,A,INC R0,DJNZ R7,LOOP,SJMP$,END,依据汇编语言规则,用好,伪指令,符号,不用中文,SJMP$,用于调试,以,.ASM,存盘,2024/8/9,10,源程序的汇编,汇编源程序转为目标程序的过程叫,汇编,汇编通常在,Windows,下的,集成开发环境,完成,用,A51.EXE,汇编生成,.OBJ,、,.LIB,及,.LST,目标程序的连接,.OBJ,、,.LIB,经,BL51.EXE,生成无扩展名的,绝对地址目标文件,绝对地址目标文件,可以用于仿真器调试,调试无误的目标文件用,OH51.EXE,转换为,.HEX,文件,.HEX,文件经,编程器,写入单片机存储器,2024/8/9,11,4.2.2,伪指令,伪指令,也叫汇编命令。仅对汇编过程进行指示,伪指令无对应的单片机可执行代码,起始地址设定伪指令,ORG,ORG,表达式,表达式通常为十六进制地址,例:,ORG 8000H,START:MOV A,#30H,ORG,可多次使用,但地址值的顺序要由小到大,结束汇编伪指令,END,END,该伪指令位于源程序的,最后一行,。,2024/8/9,12,定义字节数据表伪指令,DB,定义字数据表伪指令,DW,1000H,标号:,DB,字节数据表,如:,ORG 1000H,DB -2,-4,-6,8,10,18,FEH,FCH,FAH,08H,0AH,12H,1001H,标号:,DW,字数据表,ORG 1400H,DATA1:DW 32,4A,H,3CH,1400H,32H,4A,H,00H,3CH,1401H,1402H,1403H,大端模式,2024/8/9,13,定义常值为符号名伪指令,EQU,符号名,EQU,常值表达式,LEN,EQU,10,SUM,EQU,21H,BLOCK,EQU,22H,CLR A,MOV R7,LEN,MOV R0,BLOCK,LOOP:ADD A,R0,INC R0,DJNZ R7,LOOP,MOV,SUM,A,符号名为:,地址,常数,段名,字符串,寄存器名,位名,比较:,标号,只能是地址,2024/8/9,14,定义位地址为符号名伪指令,BIT,符号名,BIT,位地址表达式,如:,ST BIT P1.0 ;,将,P1.0,的位地址赋给符号名,ST,CF BIT 0D7H ;,将位地址为,D7H,的位定义为符号名,用,BIT,定义的,“,符号名,”,一经定义便不能重新定义和改变,其它一些伪指令参见教材表,4.2,2024/8/9,15,4.3,基本程序结构,一般不影响标志寄存器,PSW,的状态。,传送类指令有两大类,一般传送(,MOV,),特殊传送,如:,MOVC,MOVX,PUSH,、,POP,XCH,、,XCHD,SWAP,2024/8/9,16,4.3.1,顺序程序,(无分支、无循环),4.3,基本程序结构,【,例,4-1】,片内,RAM,的,21H,单元存放一个十进制数据十位的,ASCII,码,,22H,单元存放该数据个位的,ASCII,码。编写程序将该数据转换成压缩,BCD,码存放在,20H,单元。,2024/8/9,17,ORG 0040H,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,2024/8/9,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,并送回原单元。,2024/8/9,19,ORG 0040H,START:MOV A,30H ;,取,x,至累加器,JZ NEXT,;x=0,转,NEXT,ANL A,#80H ;,否,保留符号位,JZ DONE,;x 0,转结束,MOV A,#05H ;x 0,处理,ADD A,30H,MOV 30H,A ;X+05H,送,Y,SJMP DONE,NEXT:MOV 30H,#20H;x=0,20H,送,Y,DONE:SJMP DONE,END,2024/8/9,20,【,例,4-3】,根据,R7,的内容,x,(转移序号)转向相应的处理程序。,设,R7,内容为,0,4,,对应的处理程序入口地址分别为,PP0,PP4,。,2024/8/9,21,START:MOV R7,#3 ;,以转移序号,3,为例,ACALL JPNUM,AJMP START,JPNUM:MOV DPTR,#TAB ;,置分支入口地址表首址,MOV A,R7,ADD A,R7,;,乘,2,,调整偏移量,MOV R3,A,MOVC A,A+DPTR ;,取地址高字节,暂存于,R3,XCH A,R3,INC A,MOVC A,A+DPTR ;,取地址低字节,MOV DPL,A ;,处理程序入口地址低,8,位送,DPL,MOV DPH,R3 ;,处理程序入口地址高,8,位送,DPH,CLR A,JMP A+DPTR,2024/8/9,22,TAB:DW PP0,DW PP1,DW PP2,DW PP3,DW PP4,PP0:MOV 30H,#0 ;,转移序号为,0,时,置功能号,“,0,”,于,30H,单元,RET,PP1:MOV 30H,#1 ;,转移序号为,1,时,置功能号,“,1,”,于,30H,单元,RET,PP2:MOV 30H,#2 ;,转移序号为,2,时,置功能号,“,2,”,于,30H,单元,RET,PP3:MOV 30H,#3,;,转移序号为,3,时,置功能号,“,3,”,于,30H,单元,RET,PP4:MOV 30H,#4 ;,转移序号为,4,时,置功能号,“,4,”,于,30H,单元,RET,2024/8/9,23,4.3.3,循环程序,(,2,种:先执行,后判断;先判断,后执行),【,例,4-4】,将内部,RAM,的,30H,至,3FH,单元初始化为,00H,。,MAIN:MOV R0,#30H;,置初值,MOV A,#00H ;,MOV R7,#16 ;,LOOP:MOV R0,A ;,循环处理,INC R0 ;,DJNZ R7,LOOP;,循环修改,判结束,SJMP$;,结束处理,2024/8/9,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 ;,结束处理,2024/8/9,25,4.4,子程序及其调用,完成,通用功能,、,反复使用,的程序设计成,子程序。,使应用程序结构清晰紧凑,便于阅读和调试,执行要由其它程序来调用,执行完后要返回到调用程序,结构上仍然采用一般程序的,3,种结构,调用时注意:,一是现场的保护和恢复;,二是主程序与子程序间的参数传递。,2024/8/9,26,4.4.1,现场保护与恢复,在主程序中实现(,结构灵活,),PUSH PSW ;,保护现场(含当前工作寄存器组号),PUSH ACC ;,PUSH B ;,MOV PSW,#10H;,切换当前工作寄存器组,LCALL addr16 ;,子程序调用,,POP B ;,恢复现场,POP ACC ;,POP PSW ;,含当前工作寄存器组切换,2024/8/9,27,在子程序中实现(,程序规范、清晰,),SUB1:PUSH PSW ;,保护现场(含当前工作寄存器组号),PUSH ACC ;,PUSH B ;,MOV PSW,#10H;,切换当前工作寄存器组,POP B ;,恢复现场,POP ACC ;,POP PSW ;,内含当前工作寄存器组切换,RET,2024/8/9,28,4.4.2,参数传递,利用累加器或寄存器(,简单、快速,但参数个数不多,),【,例,4-6】,实现两个,8,位的十六进制无符号数求和的子程序。,SADD:MOV A,R3 ;,取加数(在,R3,中),CLR C,ADD A,R4 ;,被加数(在,R4,中)加,A,JC PP1,MOV R3,#00H;,结果小于,255,时,高字节,R3,内容为,00H,SJMP PP2,PP1:MOV R3,#01H;,结果大于,255,时,高字节,R3,内容为,01H,PP2:MOV R4,A ;,结果的低字节在,R4,中,RET,入口,:,(,R3,),=,加数;,(,R4,),=,被加数。,出口,:,(,R3,),=,和的高字节;,(,R4,),=,和的低字节。,2024/8/9,29,利用存储器(,个数多,用,R0,或,R1,及,DPTR,为参数表指针,),【,例,4-7】,将内部,RAM,中两个,4,字节无符号整数相加,和的高字节由,R0,指向。数据采用大端模式存储。,入口,:,(,R0,),=,加数低字节地址;,(,R1,),=,被加数低字节地址。,出口,:,(,R0,),=,和的高字节起始地址。,NADD:MOV R7,#4 ;,字节数,4,送计数器,CLR C ;,NADD1:MOV A,R0 ;,利用指针,取加数低字节,ADDC A,R1 ;,利用指针,被加数低字节加,A,MOV R0,A ;,DEC R0,DEC R1,DJNZ R7,NADD1,INC R0 ;,调整指针,,指向出口,RET,2024/8/9,30,利用堆栈,【,例,4-8】,将内部,RAM,中,20H,单元中的,1,个字节十六进制数转换为,2,位,ASCII,码,存放在,R0,指示的两个单元中。,入口:预转换数据(低半字节)在栈顶,出口:转换结果(,ASCII,码)在栈顶,HEASC:MOV R1,SP ;,借用,R1,为堆栈指针,DEC R1,DEC R1 ;R1,指向被转换数据,XCH A,R1 ;,取被转换数据,ANL A,#0FH ;,取一位十六进制数,ADD A,#2 ;,偏移调整,所加值为,MOVC,与,DB,间总字节数,MOVC A,A+PC ;,查表,XCH A,R1 ;1,字节指令,存结果于堆栈中,RET ;1,字节指令,ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,DB 38H,39H,41H,42H,43H,44H,45H,46H,2024/8/9,31,验证程序段,MAIN:MOV A,20H ;,SWAP A,PUSH ACC ;,预转换的数据(在低半字节)入栈,ACALL HEASC,POP ACC ;,弹出栈顶结果于,ACC,中,MOV R0,A ;,存转换结果高字节,INC R0 ;,修改指针,PUSH 20H ;,预转换的数据(在低半字节)入栈,ACALL HEASC,POP ACC ;,弹出栈顶结果于,ACC,中,MOV R0,A ;,存转换结果低字节,SJMP$,2024/8/9,32,4.4.3,常用子程序示例(略),2024/8/9,33,4.5,简单,I/O,设备的并口直接驱动示例,4.5.1,独立式键盘与,LED,显示示例,【,例,4-17】,数据端与,P0,口,正序,连接。编写程序,分别实现功能:上电后数码管显示,“,P,”,,按下任何键后,显示从,“,0,”,开始每隔,1,秒加,1,,加至,“,F,”,后,数码管显示,“,P,”,,进入等待按键状态。,2024/8/9,34,TEMP EQU 30H,ORG 0000H,JMP START,ORG 0100H,START:MOV SP,#5FH,MOV P0,#8CH;,显示,P,MOV P3,#0FFH,NOKEY:MOV A,P3,CPL A,JZ NOKEY ;,无键按下,MOV TEMP,P3;,有键按下,CALL D10ms,MOV A,P3,CJNE A,TEMP,NOKEY;,去抖,MOV R7,#16,MOV R2,#0,LOOP:MOV A,R2,MOV DPTR,#CODE_P0,MOVC A,A+DPTR,MOV P0,A,INC R2,SETB RS0;,切换组,CALL D_1S,CLR RS0,DJNZ R7,LOOP,JMP START,D_1S,:(子程序),D10ms,:(子程序),CODE_P0:DB 0C0H,0F9H,0A4H,0B0H,DB 99H,92H,82H,0F8H,DB 80H,90H,88H,83H,DB 0C6H,0A1H,86H,8EH,2024/8/9,35,有时为方便走线而采用逆序连接,显示段码要进行调整:,CODE_P2:DB 03H,9FH,25H,0DH,99H,49H,40H,1FH,DB 01H,09H,11H,0C1H,63H,85H,61H,71H,CODE_P0:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,试比较:,2024/8/9,36,4.5.2,矩阵式键盘与,LED,显示示例,步骤:,判有无键按下、判按下哪个键、依键号进入相应程序,2024/8/9,37,判有无键按下,行线接输入口,列线接输出口。置所有列线为低电平,然后读行线状态,若行线均为高电平,则没有键按下;若行线状态不全为高电平,则可断定有键按下。,判按下哪个键,先让,C0,列为低电平,其余列线为高电平,读行线状态,如行线状态不全为,“,1,”,,则说明所按键在该列;否则所按键不在该列,再使,C1,列线为低电平,其它列为高电平,判断,C1,列有无按键按下。,进入相应程序,键号,=,行首号,+,列号。,根据键号进入相应的功能程序。,(程序略),2024/8/9,38,列数多时可用,线反转法,(,依据键号与键值的对应关系,),。如,“,D,”,号键,先使行线输出全,“,0,”,,读列线,结果为,D0H,;再使列线输出全,“,0,”,,读行线,结果为,07H,。,2,次读的结果拼成一个字节,即,D7H,,该值称为键值。,将键值与键号的对应关系列成一个有序表,并设置一个计数器,将所按键值用线反转法求出后,将其作为关键字在键值表中从表首开始计数查找,查到匹配处时相应的计数值就是键号,根据键号就可以进入相应的处理程序了。,2024/8/9,39,Thank You!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!