收藏 分销(赏)

单片机应用技术第4章.ppt

上传人:s4****5z 文档编号:13996570 上传时间:2026-05-24 格式:PPT 页数:35 大小:113KB 下载积分:10 金币
下载 相关 举报
单片机应用技术第4章.ppt_第1页
第1页 / 共35页
单片机应用技术第4章.ppt_第2页
第2页 / 共35页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,4,章,汇编语言程序设计,本章要点,80C51,汇编语言语句结构的基本格式,伪指令的功能和应用,汇编的概念,程序设计的步骤和基本方法,顺序程序,分支程序,循环程序,查表程序,散转程序,4.1,汇编语言程序设计基本概念,4.1.1,汇编语言及其语句结构,标号:操作码,目的操作数,源操作数,;注释,4.1.2,伪指令,用汇编语言编写的程序称为汇编语言源程序。而计算机是不能直接识别源程序的,必须把它翻译成目标程序(机器语言程序),这个翻译过程叫“汇编”。,在汇编时起控制作用,自身并不产生机器码,而仅是为汇编服务的一些指令,称为伪指令。伪指令不属于,80C51,指令系统。,起始伪指令,ORG(Origin,),格式:,ORG 16,位地址,功能:规定,ORG,下面目标程序的起始地址。,ORG 0100H,START,;,MOV A,#05H;,标号,START,代表的地址为,0100H,结束伪指令,END,格式:,END,功能:汇编语言源程序的结束标志。,在,END,后面的指令,汇编程序不再处理。一个源程序只能有一个,END,指令,放在所有指令的最后。,等值伪指令,EQU,(,Equate,),格式:,字符名称,EQU,数据或汇编符号,功能:将一个数据或特定的汇编符号赋予规定的字符名称。,ABC EQU 30H;ABC=30H,#ABC=#30H,数据地址赋值伪指令,DATA,格式:,字符名称,DATA,表达式,功能:将数据地址或代码地址赋予规定的字符名称。,DATA,与,EQU,的区别:,EQU,定义的符号必须先定义后使用,,DATA,可以先使用后定义。,定义字节伪指令,DB,(,Define Byte,),格式:,DB 8,位二进制数表,功能:从指定的地址单元开始,定义若干个,8,位内存单元的数据。数据与数据之间用“,”分割。,ORG 4000H,TAB:DB 73H,45,”A”,”2”;(4000H)=73H,(4001H)=2DH,定义字伪指令,DW,(,Define Word,),格式:,DW 16,位二进制数表,功能:从指定的地址单元开始,定义若干个,16,位数据。占用两个字节,高,8,位先存入,低,8,位后存入。不足,16,位者,用,0,填充。,ORG 1000H,HTAB:DW 7856H,89H,30;(1000H)=78H,(1001H)=56H,定义位地址伪指令,BIT,格式:,字符名称,BIT,位地址,功能:将位地址赋予所规定的字符名称。,DEF BIT 30H;,把位地址赋给字符,DEF,,,DEF,可作为位地址,30H,使用。,4.1.3,汇编,将汇编语言源程序转换为计算机所能识别的机器语言代码程序的过程称为汇编。,汇编可分为:,手工汇编,计算机汇编,4.1.4,程序设计的基本方法,编写程序要求:,不仅要完成规定的功能任务,而且还要求:,执行速度快、占用内存少、条理清晰、,阅读方便、便于移植、巧妙而实用。,一般应按以下几个步骤进行:,1.,分析问题,确定算法或解题思路,2.,画流程图,3.,编写源程序,4.,汇编和调试,4.2,程序设计举例,4.2.1,顺序程序,顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。,顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。,例,4-2,已知,16,位二进制负数存放在,R1R0,中,试求其补码,并将结果存在,R3R2,中。,解:二进制负数的求补方法可归结为“求反加,1”,,符号位不变。利用,CPL,指令实现求反;加,1,时,则应低,8,位先加,1,,高,8,位再加上低位的进位。注意这里不能用,INC,指令,因为,INC,指令不影响标志位。,CONT:MOV A,R0,;,读低,8,位,CPL A,;,取反,ADD A,#1,;,加,1,MOV R2,A,;,存低,8,位,MOV A,R1,;,读高,8,位,CPL A,;,取反,ADDC A,#80H,;,加进位及符号位,MOV R3,A,;,存高,8,位,RET,4.2.1,分支程序,根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。,80C51,指令系统中的,条件转移指令,、,比较转移指令,和,位转移指令,,可以实现分支程序。,例,4-8,已知电路如图,4-5,所示,要求实现:,S0,单独按下,,红灯亮,其余灯灭;,S1,单独按下,,绿灯亮,其余,灯灭;,其余情况,,黄灯亮,。,解:程序如下,SGNL:ANL P1,#11100011B,;,红绿黄灯灭,ORL P1,#00000011B,;,置,P1.0,、,P1.1,输入态,P1.5,P1.7,状态不变,SL0:JNB P1.0,SL1,;P1.0=0,S0,未按下,转判,S1,JNB P1.1,RED,;P1.0=1,S0,按下,;,且,P1.1=0,S1,未按下,转红灯亮,YELW:SETB P1.4,;,黄灯亮,CLR P1.2,;,红灯灭,CLR P1.3,;,绿灯灭,SJMP SL0,;,转循环,SL1:JNB P1.1,YELW,;P1.0=0,S0,未按下,;P1.1=0,S1,未按下,转黄灯亮,GREN:SETB P1.3,;,绿灯亮,CLR P1.2,;,红灯灭,CLR P1.4,;,黄灯灭,SJMP SL0,;,转循环,RED:SETB P1.2,;,红灯亮,CLR P1.3,;,绿灯灭,CLR P1.4,;,黄灯灭,SJMP SL0,;,转循环,4.2.3,循环程序,循环程序一般包括以下几个部分:,循环初值;,循环体;,循环修改;,循环控制;,以上四部分可以有两种组织形式,其结构如,图,4-6,所,示。,例,4-10,设,Xi,均为单字节数,并按顺序存放在以,50H,为首地址的内,RAM,存储单元中,数据长度(个数),N,存在,R2,中,试编程求和,S=X1+X2+,+XN,,并将,S,(双字节)存放在,R3R4,中,(设,S,65536,)。,解:程序如下:,SXN:MOV R2,#N,;,置数据长度,(,循环次数,),MOV R3,#00H,;,和单元,(,高,8,位,),清,0,MOV R4,#00H,;,和单元,(,低,8,位,),清,0,MOV R0,#50H,;,求和数据区首址,LOOP:MOV A,R4,;,读前次低,8,位和,ADD A,R0,;,低,8,位累加,MOV R4,A,;,存低,8,位和,CLR A,;,ADDC A,R3,;,高,8,位加进位,MOV R3,A,;,存高,8,位和,INC R0,;,指向下一数据,循环修改,DJNZ R2,LOOP,;,判,N,个数据累加完否?,循环控制,RET,;,退出循环,退出循环,例,4-13,编写延时,10ms,子程序,fosc,=12MHz,。,解,:,fosc,=12MHz,,一个机器周期为,1,s,。,DY10ms:MOV R6,#20,;,置外循环次数,DLP1:MOV R7,#250,;,置内循环次数,DLP2:DJNZ R7,DLP2,;2,机周,250=500,机周,DJNZ R6,DLP1,;500,机周,20=10000,机周,RET,;,说明:,MOV,Rn,指令为,1,个机器周期,;DJNZ,指令为,2,个机器周期,;RET,指令为,2,个机器周期,;,(2,机周,250)+1+220+1+21,s,/,机周,=10063,s10ms,例,4-15,编制一个循环闪烁灯的程序。,设,80C51,单片机的,P1,口作为输出口,经驱动电路,74LS240(8,反相三态缓冲,/,驱动器,),接,8,只发光二极管,如图,4-8,所示。当输出位为,“,1,”,时,发光二极管点亮,输出位为,“,0,”,时为暗。试编程实现:每个灯闪烁点亮,10,次,再转移到下一个灯闪烁点亮,10,次,循环不止。,解:程序如下:,FLASH:MOV A,#01H,;,置灯亮初值,FSH0:MOV R2,#0AH,;,置闪烁次数,FLOP:MOV P1,A,;,点亮,LCALL DY1s,;,延时,1s,MOV P1,#00H,;,熄灭,LCALL DY1s,;,延时,1s,DJNZ R2,FLOP,;,闪烁,10,次,RL A,;,左移一位,SJMP FSH0,;,循环,RET,例,4-16,已知,P1,口数据每隔,10ms,刷新一次,试求其,1s,内的平均值,平均值存,30H,。,解:本题需求,100,个数据的平均值,一般有两种方法:一种是全部累加后再平均;另一种是边平均边累加,现给出两种方法的程序。,(,1,)全部累加后再平均,AVRG1:MOV R2,#0,;,低,8,位累加寄存器清,0,MOV R3,#0,;,高,8,位累加寄存器清,0,MOV R4,#100,;,置平均次数,ALOP:MOV A,P1,;,读,P1,口数据,ADD A,R2,;,低,8,位累加,MOV R2,A,;,回存,CLR A,;,高,8,位与进位累加,ADDC A,R3,;,MOV R3,A,;,回存,LCALL DY10ms,;,延时,10ms,DJNZ R4,ALOP,;,判,100,次累加完否?未完继续,MOV A,R3,;100,次累加完,求平均值,被除数,A,、,B,MOV B,R2,;,MOV R0,30H,;,置商间址,MOV R6,#0,;,置除数,100,除数,R6R5,MOV R5,#100,;,LCALL SUM,;(A,、,B),(R6,、,R5)=,商,R0,余数,A,CJNE A,#50,NEXT,;,四舍五入,NEXT:JC GRET,;C=1,50,舍,INC 30H,;C=0,50,入,GRET:RET,(,2,)边平均边累加,AVRG2:MOV 30H,#0,;,商累加寄存器清,0,MOV31H,#0,;,余数累加寄存器清,0,MOVR4,#100,;,置平均次数,ALOP:MOVA,P1,;,读,P1,口数据,MOVB,#100,;,置除数,(,平均次数,),DIVAB,;P1,口数据除以,100,ADDA,30H,;,商累加,MOV 30H,A,;,回存,MOV A,B,;,ADDA,31H,;,余数累加,MOV31H,A,;,回存,CLRC,;,SUBBA,#100,;,JCGON,;,余数累加,100,余数累加寄存器不变,INC30H,;,余数累加,100,商累加寄存器,+1,MOV31H,A,;,减去,100,后差余数累加寄存器,GON:LCALLDY10ms,;,延时,10ms,DJNZR4,ALOP,;,判,100,次累加完否?未完继续,MOVA,31H,;100,次累加完毕,余数累加四舍五入,CJNEA,#50,NEXT,;,NEXT:JCGRET,;C=1,50,舍,INC30H,;C=0,50,入,GRET:RET,4.2.4,查表程序,在,80C51,中,数据表格是存放在程序存储器,ROM,中,而不是在,RAM,中。编程时,可以通过,DB,伪指令将表格的内容存入,ROM,中。,用于查表的指令有两条:,MOVC A,A+,DPTR,MOVC A,A+,PC,当用,DPTR,作基址寄存器时,查表的步骤分三步:,基址值(表格首地址),DPTR,;,变址值(表中要查的项与表格首地址之间的间隔字节数),A,;,执行,MOVC A,,,A+DPTR,。,当用,PC,作基址寄存器时,由于,PC,本身是一个程序计数器,与指令的存放地址有关,所以查表时其操作有所不同。也可分为三步:,变址值(表中要查的项与表格首地址之间的间隔字节数),A,;,偏移量(查表指令下一条指令的首地址到表格首地址之间的间隔字节数),+AA,;,执行,MOVC A,,,A+PC,指令。,说明:表格首地址与,PC,值间距不能超过,256,字节,且编程要事先计算好偏移量,比较麻烦。,例,4-17,在单片机应用系统中,常用,LED,数码管显示数码,但显示数字,(,9),与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方法。现要求将,30H,中的显示数字转换为显示字段码并存入,30H,。已知共阴字段码表首址为,TABD,。,解:编程如下:,CHAG:MOV DPTR,#TABD,;,置共阴字段码表首址,MOV A,30H,;,读显示数字,MOVC A,A+DPTR,;,查表,转换为显示字段码,MOV 30H,A,;,存显示字段码,RET,;,TABD:DB 3FH,06H,5BH,4FH,66H,;0,4,共阴字段码表,DB 6DH,7DH,07H,7FH,6FH,;5,9,共阴字段码表,例,4-19,用查表程序求,0,40,之间整数的立方。已知该整数存在内,RAM 30H,中,查得立方数存内,RAM 30H,(高,8,位),31H,。,解:编程如下:,CUBE:MOV DPTR,#TAB,;,置立方表首址,MOV A,30H,;,读数据,ADD A,30H,;,数据,2A,MOV 30H,A,;,暂存立方表数据序号,MOVC A,A+DPTR,;,读立方数据高,8,位,XCH A,30H,;,存立方数据高,8,位,立方表数据序号,A,INC A,;,指向立方数据低,8,位,MOVC A,A+DPTR,;,读立方数据低,8,位,MOV 31H,A,;,存立方数据低,8,位,RET,;,TAB:DB 0,0,0,1,0,8,0,27,0,64,;0,40,立方表,DB 0,125,0,216,0FAH,00H,;,4.2.5,散转程序,散转程序是一种并行多分支程序。它根据系统的某种输入或运算结果,分别转向各个处理程序。与分支程序不同的是,散转程序一般采用,JMP A+DPTR,指令,根据输入或运算结果,确定,A,或,DPTR,的内容,直接跳转到相应的分支程序中去。,例,4-20,单片机四则运算系统。,在单片机系统中设置,+,、,、,、,四个运算命令键,它们的键号分别为,0,、,1,、,2,、,3,。当其中一个键按下时,进行相应的运算。操作数由,P1,口和,P3,口输入,运算结果仍由,P1,口和,P3,口输出。具体如下:,P1,口输入被加数、被减数、被乘数和被除数,输出运算结果的低,8,位或商;,P3,口输入加数、减数、乘数和除数,输出进位(借位)、运算结果的高,8,位或余数。键盘号已存放在,30H,中。,解:程序如下:,PRGM:MOV P1,#0FFH,;P1,口置输入态,MOV P3,#0FFH,;P3,口置输入态,MOV DPTR,#TBJ,;,置,“,”,表首地址,MOV A,30H,;,读键号,RL A,;,键号,2A,ADD A,30H,;,键号,3A,JMP A+DPTR,;,散转,TBJ:LJMP,PRGM0,;,转,PRGM0(,加法,),LJMP,PRGM1,;,转,PRGM1(,减法,),LJMP,PRGM3,;,转,PRGM3(,除法,),LJMP,PRGM2,;,转,PRGM2(,乘法,),PRGM0:MOV A,P1,;,读加数,ADD A,P3,;P1+P3,MOV P1,A,;,和,P1,CLR A,;,ADDC A,#00H,;,进位,A,MOV P3,A,;,进位,P3,RET,;,PRGM1:MOV A,P1,;,读被减数,CLR C,;,SUBB A,P3,;P1-P3,MOV P1,A,;,差,P1,CLR A,;,RLC A,;,借位,A,MOV P3,A,;,借位,P3,RET,;,PRGM2:MOV A,P1,;,读被乘数,MOV B,P3,;,置乘数,MUL AB,;P1,P3,MOV P1,A,;,积低,8,位,P1,MOV P3,B,;,积高,8,位,P3,RET,;,PRGM3:MOV A,P1,;,读被除数,MOV B,P3,;,置除数,DIV AB,;P1,P3,MOV P1,A,;,商,P1,MOV P3,B,;,余数,P3,RET,;,说明:由于,LJMP,为,3,字节指令,因此键号需先乘,3,,以便转到正确的位置。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服