Chap2汇编语言程序设计_第1页
Chap2汇编语言程序设计_第2页
Chap2汇编语言程序设计_第3页
Chap2汇编语言程序设计_第4页
Chap2汇编语言程序设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机及C51编程技术授课老师:刘建阳

Email:ljy@Dept.:

机械工程系西南交通大学机械工程系QQ:1853103741主要内容2014-9-62LJY80C51汇编语言语句结构的基本格式伪指令汇编的概念程序设计的步骤和基本方法顺序程序,分支程序,循环程序,查表程序,散转程序汇编语言的基本知识

标号:操作码

操作数;

注释

指令基本格式RED:

SETB

P1.2

;红灯亮ORG:ORG2000HENDEQU:AAAEQU20HMOVA,20H(MOVA,AAA)DATA(可前可后)DB、DWBIT:A1BIT00H(MOVC,A1)

伪指令汇编程序伪指令在汇编时起控制作用,自身并不产生机器码,而仅是为汇编服务的一些指令,称为伪指令。伪指令不属于80C51指令系统。常用的伪指令有以下几种:⒈起始伪指令

ORG(Origin)

功能:规定ORG下面目标程序的起始地址。格式:ORG16位地址功能:将一个数据或特定的汇编符号赋予规定 的字符名称。⒉结束伪指令END功能:汇编语言源程序的结束标志。在END后面的指令,汇编程序不再处理。格式:END⒊等值伪指令

EQU(Equate)格式:字符名称EQU

数据或汇编符号⒋数据地址赋值伪指令

DATA格式:字符名称DATA

表达式功能:将数据地址或代码地址赋予规定的 字符名称。⒌定义字节伪指令DB(DefineByte)格式:DB8位二进制数表功能:从指定的地址单元开始,定义若干 个8位内存单元的数据。数据与数据之间用“,”分割。格式:字符名称BIT

位地址⒍定义字伪指令DW(DefineWord)格式:DW16位二进制数表功能:从指定的地址单元开始,定义 若干个16位数据。⒎定义位地址伪指令BIT功能:将位地址赋予所规定的字符名称。汇编语言基本概念将汇编语言源程序转换为计算机所能识别的机器语言代码程序的过程称为汇编。

汇编可分为:⒈手工汇编(伪代码)⒉计算机汇编(能编译运行代码)⑷

调试程序设计的基本方法编写程序要求:不仅要完成规定的功能任务,而且还要求:执行速度快、占用内存少、条理清晰、阅读方便、便于移植、巧妙而实用。一般应按以下几个步骤进行:⑴分析问题,确定算法或解题思路⑵画流程图⑶编写源程序汇编程序设计流程明确要求和要达到的目的确定解决问题的计算方法和步骤画出流程图分配内存地址按流程图编写程序上机汇编、调试、修改及最后确定源程序简单程序(顺序结构)大量使用数据传送类指令注意正确选择指令以提高效率【例】已知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

;加进位及符号位

MOVR3,A

;存高8位

RET

;#80H:10000000B负数记得加符号位!分支程序根据程序要求无条件或有条件改变程序执行执行的顺序,选择程序的流向.特点:程序中含有转移类指令关键:正确选用转移指令80C51指令系统中的条件转移指令、比较转移指令、位转移指令,可以实现分支程序。正确运用转移指令无条件分支程序LJMP、AJMP、SJMP有条件分支程序根据已经执行的程序对标志位、ACC或内部RAM的某些位的影响结果决定程序的流向JZ/JNZ、CJNE、DJNZ、位控制转移类指令注意:使用条件转移指令形成分支前一定安排可供条件转移指令进行判别的条件。JCLOOP正确选定所用的转移条件及转移目标地址①S0单独按下,

红灯亮,其余灯灭;②S1单独按下,

绿灯亮,其余灯灭;③其余情况,黄灯亮。【例】已知电路如图所示,要求实现:解:程序如下SGNL:ANLP1,#11100011B;红绿黄灯灭

ORLP1,#00000011B;置P1.0、P1.1输入态,

P1.5~P1.7状态不变SL0:JNBP1.0,SL1 ;P1.0=0,S0未按下,转判SL1

JNBP1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮YELW:SETBP1.4 ;黄灯亮

CLRP1.2 ;红灯灭

CLRP1.3 ;绿灯灭

SJMPSL0 ;转循环SL1:JNBP1.1,YELW;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮GREN:SETBP1.3 ;绿灯亮

CLRP1.2 ;红灯灭

CLRP1.4 ;黄灯灭

SJMPSL0 ;转循环RED:SETBP1.2 ;红灯亮

CLRP1.3 ;绿灯灭

CLRP1.4 ;黄灯灭

SJMPSL0 ;转循环

循环程序循环初始化循环次数计数器,工作寄存器设初值等循环体尽量简练;注意地址指针的修改循环控制检查结束条件,及时退出循环允许外重循环嵌套内重循环循环体不能交叉不能从循环程序外部跳入循环程序内部注意循环嵌套循环程序流程图【例】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S(双字节)存放在R3R4中,(设S<65536)。解:程序如下:SXN:MOVR2,#N ;置数据长度(循环次数)MOVR3,#00H;和单元(高8位)清0MOVR4,#00H;和单元(低8位)清0MOVR0,#50H;求和数据区首址LOOP:MOVA,R4 ;读前次低8位和

ADDA,@R0 ;低8位累加

MOVR4,A ;存低8位和

CLRA;

ADDCA,R3;高8位加进位

MOVR3,A;存高8位和

INCR0;指向下一数据循环修改

DJNZR2,LOOP;判N个数据累加完否?循环控制

RET;退出循环退出循环

置循环初值循环体【例】编写延时10ms子程序,fosc=12MHz。

解:fosc=12MHz,一个机器周期为1s。DY10ms:MOVR6,#20;置外循环次数DLP1:MOVR7,#250;置内循环次数DLP2:DJNZR7,DLP2;2机周×250=500机周

DJNZR6,DLP1;500机周×20=10000机周

RET;说明:MOVRn指令为1个机器周期;DJNZ指令为2个机器周期;RET指令为2个机器周期;{[(2机周×250)+1+2]×20+1+2}×1s/机周=10063s≈10ms2014-9-6LJY21【课堂练习题】

按下列要求编写延时子程序:(1)延时2ms,fosc=6MHz;(2)延时10s,fosc=12MHz;设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如下图所示。当输出位为“1”时,发光二极管点亮,输出位为“0”时为暗。试编程实现:每个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循环不止。【例】编制一个循环闪烁灯的程序。FLASH:MOVA,#01H ;置灯亮初值FSH0:MOVR2,#0AH ;置闪烁次数FLOP:MOVP1,A ;点亮

LCALLDY1s ;延时1sMOVP1,#00H ;熄灭

LCALLDY1s ;延时1sDJNZR2,FLOP ;闪烁10次

RL A ;左移一位

SJMPFSH0 ;循环

RET 解:程序如下:延时子程序可根据延时长短,自行编写。

【课堂练习题】

根据上图电路,设计灯亮移位程序,要求8只发光二极管每次点亮一个,点亮时间为250ms,顺序是从下到上一个一个地循环点亮。设fosc=6MHz。查表程序

主要用于:复杂代码转换显示数据补偿:传感器补偿复杂函数计算:Y=SIN(X)查表指令用于查表的指令有两条:⑴MOVCA,@A+DPTR⑵MOVCA,@A+PC当用DPTR作基址寄存器时,查表的步骤分三步:①基址值(表格首地址)→DPTR;②变址值(表中要查的项与表格首地址之间的间隔字节数)→A;③执行MOVCA,@A+DPTR。

注:当用PC作基址寄存器时,其表格首地址与PC值间距不能超过256字节,且编程要事先计算好偏移量,比较麻烦。因此,一般情况下用DPTR作基址寄存器。解:编程如下:TEST: MOVDPTR,#TAB;置平方表首址

MOVA,30H ;读数据序号

MOVCA,@A+DPTR;读对应平方数据

MOV31H,A ;存平方数据

RET;TAB:DB0,1,4,9,16,25,36,49,64,81,100;0~10平方表【例】用查表程序求0~10之间整数的平方。已知该整数存在内RAM30H中,查得平方数存内RAM31H。已知平方表首地址为TAB。解:编程如下:CHAG:MOVDPTR,#TABD;置共阴字段码表首址

MOVA,30H;读显示数字

MOVCA,@A+DPTR;查表,转换为显示字段码

MOV30H,A;存显示字段码

RET;TABD:DB3FH,06H,5BH,4FH,66H;0~4共阴字段码表

DB6DH,7DH,07H,7FH,6FH;5~9共阴字段码表【例】在单片机应用系统中,常用LED数码管显示数码,但显示数字(≤9)与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方法。现要求将30H中的显示数字转换为显示字段码并存入30H。已知共阴字段码表首址为TABD。散转程序设计

JMP@A+DPTR

转移指令表地址偏移量采用”RET”指令进行散转

散转程序是一种并行多分支程序。

在单片机系统中设置+、、、四个运算命令键,它们的键号分别为0、1、2、3。当其中一个键按下时,进行相应的运算。操作数由P1口和P3口输入,运算结果仍由P1口和P3口输出。具体如下:P1口输入被加数、被减数、被乘数和被除数,输出运算结果的低8位或商;P3口输入加数、减数、乘数和除数,输出进位(借位)、运算结果的高8位或余数。键盘号已存放在30H中。【例】单片机四则运算解:程序如下:PRGM:MOVP1,#0FFH;P1口置输入态

MOVP3,#0FFH;P3口置输入态

MOVDPTR,#TBJ;置“+-×÷”表首地址

MOVA,30H;读键号

RLA;键号2→A ADDA,30H;键号3→A JMP@A+DPTR;散转TBJ:LJMPPRGM0

;转PRGM0(加法)LJMPPRGM1

;转PRGM1(减法)LJMPPRGM3

;转PRGM3(除法)LJMPPRGM2

;转PRGM2(乘法)PRGM0:MOVA,P1;读加数

ADDA,P3;P1+P3MOVP1,A;和→P1CLRA;ADDCA,#00H;进位→AMOVP3,A;进位→P3RET;

PRGM1:MOVA,P1;读被减数

CLRC;SUBBA,P3;P1-P3MOVP1,A;差→P1CLRA;RLCA;借位→AMOVP3,A;借位→P3RET;PRGM2:MOVA,P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论