单片机原理及接口技术第4章80C51的汇编语言程序设计课件

PPT
  • 阅读 63 次
  • 下载 0 次
  • 页数 40 页
  • 大小 2.158 MB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
单片机原理及接口技术第4章80C51的汇编语言程序设计课件
可在后台配置第一页与第二页中间广告代码
单片机原理及接口技术第4章80C51的汇编语言程序设计课件
可在后台配置第二页与第三页中间广告代码
单片机原理及接口技术第4章80C51的汇编语言程序设计课件
可在后台配置第三页与第四页中间广告代码
单片机原理及接口技术第4章80C51的汇编语言程序设计课件
单片机原理及接口技术第4章80C51的汇编语言程序设计课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 40
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】单片机原理及接口技术第4章80C51的汇编语言程序设计课件.ppt,共(40)页,2.158 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44744.html

以下为本文档部分文字说明:

2022/11/241第4章80C51的汇编语言程序设计程序编制的方法和技巧4.1源程序的编辑和汇编4.2基本程序结构4.3子程序及其调用4.4简单I/O设备的并口直接驱动示例4.52022/11/242单片机应用系统由硬件系统和应用程序构成汇编语言高级语言应用程序设计方法

汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。2022/11/2434.1程序编制的方法和技巧4.1.1程序编制的步骤明确任务:功能要求、技术指标运行环

境调研任务分析将实际问题转化为计算机处理的程序算法算法比较与优化(内存需求与运行速度)算法设计2022/11/244流程描述流程图符号开始或结束符号工作任务符号判断分支符号程序连接符号程序流向符号程序流向符号“超级循环”框架初始化开始循环扫描、处理2022/11/24

5强化模块观念使程序占用空间减少、结构清晰循环初值和结束条件,避免“死机”现象子程序的现场保护(注意栈平衡、寄存器内容)程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便4.1.2程序编制的方法和技巧采用循环和子程序对中断子程序

还有注意保护PSW的内容2022/11/2464.1.3汇编语言的语句格式非数字字符开头,后跟字母、数字、“-”、“?”等不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号“:”Keil的汇编器A51可以识别的语句形式为:标号(即符号地址)[标号:]指令助记符[操作数1,][操作数2

,][操作数3,][;注释]指令助记符是指令功能的英文缩写。2022/11/247数据:二进制(B)十进制(D或省略D)十六进制(H),注意A~F开头时要加“0”ASCII码,如„A‟,‘1245‟符号:符号名、标号或“$”(PC

的当前值)表达式:由运算符和数据构成(见表4.1)操作数注释英文分号“;”开头2022/11/248优先级运算符功能表达式及其结果示例高↓↓↓↓↓↓↓低·()括号4*(5+6)即44NOT、HIGH、LOW取反

、取高字节、取低字节NOT55H即AAH;HIGH1234H即12H+、-正号、负号+5、-6*、/、MOD乘、除(取商)、取余数17/5即3;17MOD5即2+、-加、减5+4即9;5-4=即1SHL、SHR左移、右移2S

HL2即8;8SHR2即2AND、OR、XOR与、或、异或45HAND0FH即05H<、>、=、<>、<=、>=比较运算符MOVA,X>8;若X>8为真,则为MOVA,01H若X>8为假,则为MOVA,00H表4.12

022/11/2494.2源程序的编辑和汇编目标程序的产生过程如下图:汇编器A51.EXE编译器C51.EXE目标文件(浮动地址).OBJC源文件.C汇编源文件.ASM连接器BL51.EXE调试目标文件(绝对地址)无扩展名转换器OH51.EXE可烧写目标文件.

HEX.LST.LST.M51库文件.LIB映像文件仿真调试写入芯片2022/11/24104.2.1源程序的编辑和汇编源程序的编辑ORG0000HLJMPMAINORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV

@R0,AINCR0DJNZR7,LOOPSJMP$END依据汇编语言规则用好伪指令符号不用中文SJMP$用于调试以.ASM存盘2022/11/2411源程序的汇编汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51.EXE汇编生成.OBJ、.LIB及.LST

目标程序的连接.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51.EXE转换为.HEX文件.HEX文件经编程器写入单片机存储器2022/11/24124.2.2伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无

对应的单片机可执行代码起始地址设定伪指令ORGORG表达式表达式通常为十六进制地址,例:ORG8000HSTART:MOVA,#30H……ORG可多次使用,但地址值的顺序要由小到大结束汇编伪指令ENDEND该伪指令位于源程序的最后一行。202

2/11/2413定义字节数据表伪指令DB定义字数据表伪指令DW1000H[标号:]DB字节数据表如:ORG1000HDB-2,-4,-6,8,10,18FEHFCHFAH08H0AH12H1001H[标号:]DW字数据表ORG1400HDATA1:DW324

AH,3CH……1400H32H4AH00H3CH1401H1402H1403H大端模式2022/11/2414定义常值为符号名伪指令EQU符号名EQU常值表达式LENEQU10SUMEQU21HBLOCKEQU22HCLRAMOVR7,#LENMOVR0

,#BLOCKLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOVSUM,A符号名为:地址常数段名字符串寄存器名位名比较:标号只能是地址2022/11/2415定义位地址为符号名伪

指令BIT符号名BIT位地址表达式如:STBITP1.0;将P1.0的位地址赋给符号名STCFBIT0D7H;将位地址为D7H的位定义为符号名用BIT定义的“符号名”一经定义便不能重新定义和改变其它一些伪指令参见教材表4.22022/11/24164.3

基本程序结构一般不影响标志寄存器PSW的状态。传送类指令有两大类一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP2022/11/24174.3.1顺序程序(无分支、无循环)4.3基本

程序结构【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。开始结束取十位的ASCII码保留低半字节移至高半字节,存回

取个位的ASCII码保留低半字节合并到结果单元2022/11/2418ORG0040HSTART:MOVA,21H;取十位ASCII码ANLA,#0FH;保留低半字节SWAPA;移至高半字节MOV20H,A;存于20H单元MOVA,22H;取个位AS

CII码ANLA,#0FH;保留低半字节ORL20H,A;合并到结果单元SJMP$END2022/11/24194.3.2分支程序(单分支、双分支、多分支)【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当

x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。开始结束取x至累加器X=0?X+05H送Y20H送YNX>0?NYY2022/11/2420ORG0040HSTART:MOVA,30H;取x至累加器JZNEX

T;x=0,转NEXTANLA,#80H;否,保留符号位JZDONE;x>0,转结束MOVA,#05H;x<0处理ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x

=0,20H送YDONE:SJMPDONEEND2022/11/2421【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。设R7内容为0~4,对应的处理程序入口地址分别为PP0~PP4。取分支号,乘2X=?分支程序PP1地址高、低字节存DPTR分支程序P

P0分支程序PP2分支程序PP3返回分支程序PP4X=0X=1X=2X=3X=42022/11/2422START:MOVR7,#3;以转移序号3为例ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址MOV

A,R7ADDA,R7;乘2,调整偏移量MOVR3,AMOVCA,@A+DPTR;取地址高字节,暂存于R3XCHA,R3INCAMOVCA,@A+DPTR;取地址低字节MOVDPL,A;处理程序入口地址低8位送DPLMOVDPH,

R3;处理程序入口地址高8位送DPHCLRAJMP@A+DPTR2022/11/2423DWPP1DWPP2DWPP3DWPP4PP0: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单元RET202

2/11/24244.3.3循环程序(2种:先执行,后判断;先判断,后执行)【例4-4】将内部RAM的30H至3FH单元初始化为00H。置初值开始结束循环处理循环修改结束处理循环结束?YNMAIN:MOVR0,#30H;置初值MOVA,

#00H;MOVR7,#16;LOOP:MOV@R0,A;循环处理INCR0;DJNZR7,LOOP;循环修改,判结束SJMP$;结束处理2022/11/2425【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域,直到发现‘$‟

字符停止传送。置初值开始结束循环处理循环修改结束处理循环结束?YNMAIN:MOVR0,#60H;置初值MOVDPTR,#1000HLOOP0:MOVA,@R0;取数据CJNEA,#24H,LOOP1;循环结束?SJMP

DONE;是LOOP1:MOVX@DPTR,A;循环处理INCR0;循环修改INCDPTRSJMPLOOP0;继续循环DONE:SJMPDONE;结束处理2022/11/24264.4子程序及其调用完成通用功能、反复使用的程序设计成子程序。使应用程序结构清晰

紧凑,便于阅读和调试执行要由其它程序来调用,执行完后要返回到调用程序结构上仍然采用一般程序的3种结构调用时注意:一是现场的保护和恢复;二是主程序与子程序间的参数传递。2022/11/24274.4.1现场保护与恢复在主程序

中实现(结构灵活)PUSHPSW;保护现场(含当前工作寄存器组号)PUSHACC;PUSHB;MOVPSW,#10H;切换当前工作寄存器组LCALLaddr16;子程序调用,POPB;恢复现场POPACC;POPPSW;含当前工作寄存器组切换202

2/11/2428在子程序中实现(程序规范、清晰)SUB1:PUSHPSW;保护现场(含当前工作寄存器组号)PUSHACC;PUSHB;MOVPSW,#10H;切换当前工作寄存器组……POPB;恢复现场POPACC;POPPSW;内含当

前工作寄存器组切换RET2022/11/24294.4.2参数传递利用累加器或寄存器(简单、快速,但参数个数不多)【例4-6】实现两个8位的十六进制无符号数求和的子程序。SADD:MOVA,R3;取加数(在R3中)CLRCADDA,R4;被加数(在R4中)加AJC

PP1MOVR3,#00H;结果小于255时,高字节R3内容为00HSJMPPP2PP1:MOVR3,#01H;结果大于255时,高字节R3内容为01HPP2:MOVR4,A;结果的低字节在R4中RET入

口:(R3)=加数;(R4)=被加数。出口:(R3)=和的高字节;(R4)=和的低字节。2022/11/2430利用存储器(个数多,用R0或R1及DPTR为参数表指针)【例4-7】将内部RAM中两个4字节无符号整数相加,和的高字节由R0指向。数据采用大端模式存储。入口:(R0)=加数低字节地

址;(R1)=被加数低字节地址。出口:(R0)=和的高字节起始地址。NADD:MOVR7,#4;字节数4送计数器CLRC;NADD1:MOVA,@R0;利用指针,取加数低字节ADDCA,@R1;利用指针,被加数低字节加AMOV@R0

,A;DECR0DECR1DJNZR7,NADD1INCR0;调整指针,指向出口RET2022/11/2431利用堆栈【例4-8】将内部RAM中20H单元中的1个字节十六进制数转换为2位ASCII码,存放在R0指示的两个单元中。入口:预转换数据(低半字节)在栈顶出口:转换结果(ASCI

I码)在栈顶HEASC:MOVR1,SP;借用R1为堆栈指针DECR1DECR1;R1指向被转换数据XCHA,@R1;取被转换数据ANLA,#0FH;取一位十六进制数ADDA,#2;偏移调整,所加值为MOVC与DB间总字节数MOVCA,@A+PC;查表XCHA,@R

1;1字节指令,存结果于堆栈中RET;1字节指令ASCTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H2022/11/2

432验证程序段MAIN:MOVA,20H;SWAPAPUSHACC;预转换的数据(在低半字节)入栈ACALLHEASCPOPACC;弹出栈顶结果于ACC中MOV@R0,A;存转换结果高字节INCR0;修改指针PUSH20H;预转换的数据(在低半字节)入栈

ACALLHEASCPOPACC;弹出栈顶结果于ACC中MOV@R0,A;存转换结果低字节SJMP$2022/11/24334.4.3常用子程序示例(略)2022/11/24344.5简单I/O设备的并口直接驱动示例4.5.1独立式键盘与LED显示示例【例4-17】数据端与P

0口正序连接。编写程序,分别实现功能:上电后数码管显示“P”,按下任何键后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,进入等待按键状态。89S51P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7abcd

efgdpcom+5V100ΩP3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7K0K1K2K3K4K5K6K7共阳极2022/11/2435TEMPEQU30HORG0000HJMPSTARTORG0100HSTART:MOVSP,#5FHMOVP0,#8CH;显示"P

"MOVP3,#0FFHNOKEY:MOVA,P3CPLAJZNOKEY;无键按下MOVTEMP,P3;有键按下CALLD10msMOVA,P3CJNEA,TEMP,NOKEY;去抖MOVR7,#16MOVR2,#0LOO

P:MOVA,R2MOVDPTR,#CODE_P0MOVCA,@A+DPTRMOVP0,AINCR2SETBRS0;切换组CALLD_1SCLRRS0DJNZR7,LOOPJMPSTARTD_1S:(子程序)D10ms:(子程序)CODE_P0:DB0C0

H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,90H,88H,83H,DB0C6H,0A1H,86H,8EH2022/11/2436有时为方便走线而采用逆序连接,显示段码要进行调整:COD

E_P2:DB03H,9FH,25H,0DH,99H,49H,40H,1FHDB01H,09H,11H,0C1H,63H,85H,61H,71H89S51P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0abcdefgdpcom+5V100ΩP3.

0P3.1P3.2P3.3P3.4P3.5P3.6P3.7K0K1K2K3K4K5K6K7共阳极CODE_P0:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB80H,90H,88H,83H,0C6H,0A1H,86H,8EH试比较:20

22/11/24374.5.2矩阵式键盘与LED显示示例89S51P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7abcdefgdpcom+5V共阳极P2.7P2.6P2.5P2.4P2.2P2.1P2.0abcdefgdpcom100Ω×2

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.70123456789ABCDEFE+5V5.1K×4键号L0L1L2L3P2.3C0C2C1C3行首号步骤:判有无键按下、判按下哪个键、依键号进入相应程序2022/11/243889S51P1.0

P1.1P1.2P1.3P1.4P1.5P1.6P1.70123456789ABCDEFE+5V5.1K×4键号L0L1L2L3C0C2C1C3行首号判有无键按下行线接输入口,列线接输出口。置所有列线为低电平,然后读行线状态,若行线均为高电平,则没有键按下;若行线

状态不全为高电平,则可断定有键按下。判按下哪个键先让C0列为低电平,其余列线为高电平,读行线状态,如行线状态不全为“1”,则说明所按键在该列;否则所按键不在该列,再使C1列线为低电平,其它列为高电平,判断C1列有无按键按下。进入

相应程序键号=行首号+列号。根据键号进入相应的功能程序。(程序略)2022/11/2439列数多时可用线反转法(依据键号与键值的对应关系)。如“D”号键,先使行线输出全“0”,读列线,结果为D0H;再使列线输出

全“0”,读行线,结果为07H。2次读的结果拼成一个字节,即D7H,该值称为键值。EEHDEHBEH7EHEDHDDHBDH7DHEBHDBHBBH7BHE7H77HD7H=11010111B7H键值:列1,P1.5=“0

”行3,P1.3=“0”D7H89S51P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.7P2.6P2.5P2.4P2.2P2.1P2.0P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.70123456789ABCDEFD+5V

5.1K×8键号C0C2C1C3L0L1L2L3P2.3将键值与键号的对应关系列成一个有序表,并设置一个计数器,将所按键值用线反转法求出后,将其作为关键字在键值表中从表首开始计数查找,查到匹配处时相应的计数值就是键号,根据键号就可以进入相应的处理程序了。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?