




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章汇编语言程序设计教学目的:熟悉80C51系列单片机的汇编语言,能够熟练编写汇编语言源程序。教学重点:常用汇编语言程序设计方法。
教学难点:分支程序、散转程序与子程序的设计7.1概述
7.1.1汇编语言源程序的格式
1.汇编语句格式
[标号:]操作码[操作数][;注释]
这4部份只有操作码段是必须具有的,其余部分为可选项,但对于包含操作数的指令,则操作数段也是必须具有的。例如:
SU:MOVA,#0CDH;CDH
A7.1.2汇编语言伪指令
(1)ORG汇编起始指令
规定目标程序的起始地址,格式如下:
标号操作码操作数
ORG表达式(exp)(2)
END汇编结束指令(3)EQU赋值指令把操作数段中的地址或数据赋值给标号,格式如下:标号操作码操作数字符名称EQU数或汇编符号例1AA EQUR1;R1与AA等值则MOVA,AA指令与MOVA,R1指令结果相同。(4)DB定义字节指令
定义程序存储器中存放的8位常数表,格式如下:
(标号)操作码操作数
DB字节常数或ASCII字符例2ORG1000HDB76H,73,‘C’,‘B’
;在表示ASCII字 符时要用‘
’括号
DBOACH
则(1000H)=76H(1001H)=49H (1002H)=43H(1003H)=42H (1004H)=0ACH
(5)DW定义字指令
定义程序存储器中存放的16位常数表
格式DW<16位数据表>。例3ORG2200HDW1246H,7BH,10
则(2200H)=12H(2201H)=46H
(2202H)=00(2203H)=7BH
(2204H)=00(2205H)=0AH(6)BIT定义位地址指令
格式<字符名称>BIT<位地址>
例4ABCBITP1.0 Q4BITP2.2
则汇编后,位地址P1.0,P1.2分别赋给变量ABC和Q4。
7.DATA定义标号数值伪指令它的功能是给标号段中的数据地址标号赋以数值,也称为数据地址赋值指令。它的格式如下:字符名称DATA表达式例5M5DATA1A00H
汇编后M5的值为1A00H。8.DS定义存储空间指令
它的功能是从指定地址开始,定义一个存储区,保留由表达式指定的若干字节空间作为备用空间,这个存储区预留的存储单元数由DS表达式的值决定。它的格式如下:
DS表达式 表达式通常是一个常数。例6ORG100HDS 30HDB 56H,8AH汇编后,从100H地址开始保留48个单元,(131H)=56H,(132H)=8AH。
7.2顺序与循环程序设计
7.2.1顺序程序设计
例7.8将R5中的两个BCD码拆开并变成ASCII码,存入61H、62H单元。解:在此采用把BCD数除以10H的方法,除后相当于把此数右移了4位,刚好把两个BCD码分别移到A、B的低4位。由于ASCII码的0~9为30H~39H。然后再各自与30H相或即变为ASCII码。源程序如下:ORG0000HLJMPMAIN……ORG30H;主程序起始地址MAIN:MOVA,R5MOVB,#10H;用10H作除数DIVABORLB,#30H;低4位BCD码变为ASCII码MOV62H,BORLA,#30H;高4位BCD码变为ASCII码MOV61H,ASJMP$;循环等待END7.2.2循环程序设计
1.循环初始化(或称初始条件)循环初态是设置循环过程中工作单元的初始值。
2.循环体重复执行的程序段部分。
3.循环控制部分。用于控制循环的执行和结束。
例7.9已知:80C51单片机使用的晶振为12MHz,要求设计一个软件延时程序,延时时间为20ms。解:延时程序的延时时间主要与两个因素有关,一个是所用晶振,一个是延时程序中的循环次数。一旦晶振确定之后,则主要是如何设计与计算需给定的延时循环次数。在本题中已知晶振为12MHz,则可知一个机器周期为1
s,可预计采用单重循环是有可能实现1ms的延时的。现根据题意编写源程序如下:周期数
1MOVR0,#14H;毫秒数
R01DL2:MOVR1,#MT;1ms延时的预 定值MT
R11DL1:NOP1NOP2DJNZR1,DL1;lms延时循环
2DJNZR0,DL2;毫秒数减1,不等于0,继续循环,等于0结束MT可计算如下:
(1+1+2)×1×MT=1 000
sMT=250=FAH 例7.10从22H单元开始有一个无符号数据块,其长度在20H单元。求出数据块中最大值,并存入21H单元ORG200HCLRA;清A作为初始最大值MOVR2,20H;数据个数初值MOVR1,#22H;数据块首地址初值LP:CLRC;清进位SUBBA,@R1;最大值减队列中数JNCNEXT;小于最大值继续SJMPNEXT1SUBBA,@R1;最大值减队列中数JNCNEXT;小于最大值继续SJMPNEXT1MOVA,@R1;大于最大值,则用此值代换NEXT:ADDA,@R1;小于最大值,则恢复NEXT1:INCR1;修改地址指针DJNZR2,LP;依次重复比较,直至R2=0MOV21H,A;最大值存入21H单元7.3分支程序设计7.3.1分支程序设计综述分支程序应用要点是正确使用转移指令,通常有如下3种指令。1.无条件转移2.条件转移3.散转例7.11设5AH单元中有一变量X,请编写计算下述函数式的程序,结果存入5BH单元
7.3.2无条件/条件转移程序
MOV A,5AH MOV B,A MUL AB ;X2
BA MOV R1,A MOV A,5AH ;重新把X装入A CJNE A,#5,L1Ll:JC L2 ;X<5转L2
MOV R0,#41 ;先假设X>10 CJNE A,#11,L3 ;与11比L3:JNC L4 ;X>10转L4 MOV A,R1
ADD A,#08 ;10
X
5,Y=X2+8 MOV R0,A SJMP L4L2:MOV A,R1 CLR C SUBB A,#01 ;X<10,Y=X2–1 MOV R0,AL4:MOV 5BH,R0 SJMP $7.3.3散转程序设计
散转程序的设计可采用下面两种方法:(1)数据指针DPTR固定,根据累加器A的内容,程序转入相应的分支程序中去。(2)累加器A清零,根据数据指针DPTR的值,决定程序转向的目的地址,DPTR的值可用查表或其他方法获得。下面介绍两种不同方法的散转程序。1.采用转移指令表
例7.12设有n个分支程序,n小于256,将n存放在R4中,设计散转程序。
解:程序清单如下。
MOVDPTR,#TAB1;跳转表首地址送数据指针
MOVA,R4ADDA,R4 ;R4×2
A(修正变址值)
JNCNOAD;判有否进位
INCDPH;有进位则加到高字节地址
NOAD:JMP@A+DPTR;转向形成的散转地址入口
TAB1:AJMPOPR0;转移到分支程序OPR0AJMPOPR1…….AJMPOPRn2.采用转向地址表例7.13
根据R2的内容转入各对应的分支程序中去。解设转移入口地址为OPR0、OPR1、…、OPRn,散转程序及转移表如下:
MOV DPTR,#TAB1 MOV A,R2 ADD A,R2 ;(R2)×2
A JNC NADD INC DPH ;(R2)×2的进位加至DPHNADD: MOV R3,A ;暂存
MOVC A,@A+DPTR ;取地址高8位
XCH A,R3 ;转移地址高8位暂存到R3 INC A MOVCA,@A+DPTR;取地址低8位
MOV DPL,A ;置转移地址低8位
MOV DPH,R3 ;置转移地址高8位
CLR A JMP @A+DPTR;转向分支程序TAB1: DW OPR0;16位转移地址表的首地址
DW OPR1………. DW OPRn7.4子程序设计
7.4.1子程序结构与设计注意事项
子程序结构编写子程序时的注意事项在编写子程序时要注意以下几点:(1)要给每个子程序赋一个名字,实际上是一个入口地址的代号。(2)要能正确地传递参数。即首先要有入口条件,说明进入子程序时,它所要处理的数据如何得到。另外,要有出口条件,即处理的结果是如何存放的。(3)注意保护现场和恢复现场。7.4.2子程序的调用与返回
主程序调用子程序是通过子程序调用指令LCALLaddl6和ACALLadd11实现的。子程序的返回是通过返回指令RET实现的。主程序在调用子程序时要注意以下问题:(l)在需要保护现场的程序中,在主程序初始化时要正确地设置堆栈指针。(2)在主程序中,要安排相应指令,满足子程序的入口条件。(3)在主程序中,安排相应的指令,在子程序返回后,处理子程序提供的出口参数。7.4.3子程序设计举例
例7.14有两个ASCII码值表示的字符串,2个字符串的首地址分别为50H和70H,每个字符串的第一个字节都存放字符串长度。求出这2个字符串中字符A的个数,并将其和存入4FH单元。解:本例采用分别求出两个字符串字符A的个数,然后求和的方法,求字符A个数的过程可采用子程序。子程序的入口条件是字符串首地址,返回参数即为个数值,放在A中。下面分别列出主程序和子程序:主程序
MOVR1,#50H;置入口条件参数ACALLZF;调求字符A个数子程序MOV40H,R0;第一个数据块的A个数暂存40HMOVR1,#70H;置入口条件参数
ACALLZF ;调求字符A个数子程序
MOVA,,R0ADDA,40H ;两个字符A个数相加
MOV4FH,A;把和送入4FHSJMP$子程序;子程序入口参数:R1为字符串首地址;子程序出口参数:R0为字符串中A的个数
ZF:MOVR0,#0 ;清R0作为初始值
MOVA,@R1;取字符个数初值
MOVR2,A ;字符个数初值送R2LP:MOVA,@ R1 ;取字符
CJNEA,#41H,LP1;与字符A比较
INCR0 ;等于加1后继续
LP1:INCR1 ;修改地址指针
DJNZR2,LP ;依次重复比较,直至R2=0RET ;返回例7.15
在图7.3所示电路中,AT89S51的P1口各位分别与8个发光二极管相接,当P1口为低电平时发光二极管可被点亮。P3.1与P3.2各通过开关S1、S2与地相接。当开关闭合时P3.1与P3.2端口为低电平。设单片机采用的晶振为6MHz,编制一个控制发光二极管发光方式的程序。要求当S1闭合时,发光二极管发光方式为:二极管从第0位开始发光,延时1s后,第0位二极管灭,第1位开始发光;延时1秒后,第1位二极管灭,第2位开始发光;以此类推……直至第7位开始发光。
图7.3LED闪烁线路
源程序如下:S1 EQUP3.1S2 EQUP3.2 ORG 0000H LJMP MAIN
……MAIN:MOV P3,#0FFH ;
设P3口为输入MAIN2:JB S1,FF1 ;检查是否按过S1键 LCALL DELAY10ms ;延时10ms去键抖动 JB S1FF1 ;如果又变为1,说明刚才是干
扰信号 LCALL FF11 ;如果仍然为0,说明确实按过S1键,则调第一种发光方式子程序 LCALLDELAY10ms ;延时10ms去键抖动 JB S2MAIN2 ;如果又变为1,说明刚才是干扰
信号LCALL DELAY10ms ;延时10ms去键抖动FF1:JB S2,MAIN2 ;检查是否按过S2键 LCALL FF22 ;如果仍然为0,说明确实按过S2键,则调第二种发光方式子程序 SJMP MAIN2 ;反复循环FF11:MOV A,#0FEH ;第一种发光方式初值L1:MOVP1,A ;A值送P1口
LCALLDL1S ;1s延时 JNB ACC.7,MA1 ;A值的第7位是否为0 RL A ;A中数据循环左移一位 SJMP L1 ;未完继续MA1: RETFF22: MOV A,#0FEH ;第二种发光方式初值L2: MOV P1,A ;A值送P1口 LCALLDL1S ;1s延时 JZ MA2 ;A值是否为0 RL A ;A中数据循环左移一位 ANL A,P1 ;P1口当前值与移位后值相与 SJMP L2MA2: RET
DELAY10ms: MOV R0,#10DL2: MOV R1,#125 ;1ms延时的预定值DL1: NOP NOP DJNZ R1,DL1 ;延时循环 DJNZ R0,DL2 RETDL1S: MOV R3,#100 ;1s延时的预定值DL3: LCALL DELAY10ms ;延时循环 DJNZ R3,DL3 RET END7.5查表程序设计7.5.1查表程序综述
为了实现查表功能,在80C51汇编语言中专门设置了两条查表指令:
MOVC A, @A+DPTR MOVC A, @A+PC这2条指令特点不同,在应用时要注意区别。为了便于查表,要求表中的数或符号按照便于查找的次序排列,并将它存放在从指定的首地址(或称基地址)开始的存储单元。7.5.2查表程序设计举例
例7.16
在某仪器的键盘程序中,根据命令的键值(0,1,2,…,9)转换成相应的双字节16位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融合同信托合同(一)8篇
- 粮油购销合同范本与粮食买卖合同3篇
- 官方的二手房买卖定金合同10篇
- 隧道劳务施工合同3篇
- 电商设计职业规划
- 学校食堂卫生管理规范
- 健康促进照护课件
- 2025辽宁体育运动职业技术学院辅导员考试试题及答案
- 2025赣西科技职业学院辅导员考试试题及答案
- 2025眉山职业技术学院辅导员考试试题及答案
- 除颤仪使用的试题及答案
- 储料仓施工方案
- 风机叶片故障诊断-深度研究
- 新版统编版七年级下册道德与法治四单元课件 11.1 法不可违
- 烧烤店员工培训
- 2025年全球及中国智能艾灸服务机器人行业头部企业市场占有率及排名调研报告
- 大学生创新创业教育课件
- 连云港市农商控股集团限公司2025年专业技术人员招聘高频重点提升(共500题)附带答案详解
- 甘肃省陇南市武都区2024-2025学年八年级上学期期末学业水平测试历史试题(含答案)
- 安全科学导论知到智慧树章节测试课后答案2024年秋中国矿业大学(北京)
- 锅炉总体调试报告范文
评论
0/150
提交评论