单片机及接口技术单片机汇编_第1页
单片机及接口技术单片机汇编_第2页
单片机及接口技术单片机汇编_第3页
单片机及接口技术单片机汇编_第4页
单片机及接口技术单片机汇编_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机及接口技术单片机汇编第1页,共21页,2022年,5月20日,2点41分,星期二汇编语言程序设计主要内容1. 汇编语言格式及构成2. 汇编源程序设计步骤及汇编3. 顺序程序设计4. 分支程序设计5. 循环和查表程序设计6. 子程序设计第2页,共21页,2022年,5月20日,2点41分,星期二2.3.1 汇编语言格式标号段:操作码段 操作数段;注释段如:LP1: MOV R2, #10; 设置循环次数标号段:指明所在指令操作码字节所在的内存地址。标号由大写英文字母开头的字母和数字串组成,长度为18个字符。标号段可省略。2.3.2 汇编语言构成1. 指令性语句(助记符语句)2. 指示性语句

2、(伪指令) a. ORG(起始汇编)伪指令 例:ORG 2000H; 指定程序存储地址从2000H开始 b. END(结束汇编)伪指令 例:END c. EQU(赋值)伪指令 字符名称 EQU 数据或汇编符 ;将右边的数据或汇编符赋给左边的字符名称汇编语言格式及构成第3页,共21页,2022年,5月20日,2点41分,星期二例如:AA EQU R1 ;AA当作寄存器R1使用 A10 EQU 10H ;A10=10H DELAY EQU 07E6H ; DELAY=07E6H MOV R0 , A10 MOV A , AA LCALL DELAYd. DATA(数据地址赋值)伪指令 字符名称 D

3、ATA 表达式 ;将右边表达式(8位)赋左边, ;只能是数据或地址等DATA型 字符名称 XDATA 表达式; 16位 例: AA DATA 35H DELAY XDATA 0A7E6H e. DB(字节定义)伪指令 标号: DB 项或项表 例: TAB: DB 45H,73,A ;将45H、73、A依次存放 ;入TAB地址开始的存储单元 汇编语言格式及构成第4页,共21页,2022年,5月20日,2点41分,星期二f. DW(字定义)伪指令 标号: DW 项或项表例:ORG 1000H HETAB:DW 1234H, 8AH, 10 ;(1000H)=12H,(1001H)=34H ;(10

4、02H)=8AH,(1003H)=00H,(1004H)=0AH,(1005H)=00Hg. DS(存储空间定义)伪指令 标号: DS 项或项表例: SPC: DS 08H; 从SPC地址开始,预留8个存储单元 DB 25H ; (SPC+8)=25H h. BIT(位地址赋值)伪指令 字符名称 BIT 位地址例:A1 BIT 00H A2 BIT P1.0 MOV C,A1 ;将位地址00H的值送Cy 汇编语言格式及构成返回第5页,共21页,2022年,5月20日,2点41分,星期二2.3.3 汇编源程序设计步骤及汇编源程序设计步骤:1)拟定设计任务书,设计任务书包括:程序功能、技术指标、精

5、度等级、实施方案、工程进度、所需设备、研制费用、人员分工2)建立数学模型3)确立算法4)绘制程序流程图5)编制汇编语言源程序6)上机调试汇编语言源程序的汇编人工汇编机器汇编汇编语言格式及构成返回第6页,共21页,2022年,5月20日,2点41分,星期二2.3.4 顺序程序设计例题1:求一个16位二进制负数的补码。设此16位二进制数存于NUM、NUM+1单元 解:补码=反码+1ORG 1000HNUM DATA 20HMOV R0,#NUMMOV A,R0 CPL AADD A,#01HMOV R0,AINC R0 MOV A,R0 CPL AADDC A,#00HMOV R0,ASJMP $

6、END顺序程序设计返回课7第7页,共21页,2022年,5月20日,2点41分,星期二2.3.5 分支程序设计 分支程序设计例题2:已知VAR单元内有一自变量X,按如下条件编出求函数值Y并将它存入FUNC单元的程序若X0,则Y=1;若X=0,则Y=0;若X0,则转POSMOV A,#0FFH ;若VAR0,-1给ASJMP DONEPOS :MOV A,#01HDONE:MOV FUNC,A SJMP $ END返回第8页,共21页,2022年,5月20日,2点41分,星期二2.3.6 循环和查表程序设计循环和查表程序设计例题3:已知内部RAM ADDR为始址的无符号数数据块的块长存储于LEN

7、单元内,请编程找出数据块中的最大数并存入MAX单元解: ORG 1000H LEN DATA 31H MAX DATA 32H MOV R0,#ADDR ;R0指向数据块,初始化为数据块首地址 MOV MAX, #00H ;MAX单元初始化,清零LOOP:MOV A,R0 ;开始循环体,将一个数取到A CJNE A,MAX,BRCH;比较该数与MAX的大小BRCH:JC NEXT ;若该数小,则进行下一次循环 XCH A,MAX ;若该数大,则与MAX交换NEXT:INC R0 ;为下一次循环做准备 DJNZ LEN,LOOP ;判断循环次数 SJMP $ END返回第9页,共21页,2022

8、年,5月20日,2点41分,星期二例题4:R0的低四位对应一个16进制数码,编写程序,将该数码对应字符的ASCII编码送入R1。(例如:若R0的低4位为1110B,对应16进制数码E,则将字符E的ASCII码送入R1) 9 8 7 6 5 4 3 2 1 0 SJMP $ MOV R0, A MOVC A, A+PC 解: ORG 1000H MOV A, R0 ANL A, #0FH ADD A, #03H MOVC A, A+PC ; 查表指令 MOV R1, A ;指令长度为一个字节 SJMP $ ;指令长度为两个字节ASCTAB:DB 0, 1, 2, 3, 4 ; 制表 DB 5,

9、6, 7, 8, 9 DB A, B, C, D, E , F END循环和查表程序设计第10页,共21页,2022年,5月20日,2点41分,星期二2.3.7 子程序设计 子程序可自动保护断点(即主程序中下一条指令的地址),但不会自动保护现场(即运行子程序前的寄存器状态),若要保护现场,则在子程序的开始部分用压入堆栈命令保护现场,在结束部分用弹出堆栈命令恢复现场 可利用寄存器、存储单元或堆栈进行子程序的入口参数和出口参数传递例题5:设MDA和MDB内有两数a和b,请编出求c=a2+b2并把c送入MDC的程序,设a和b皆为小于10的整数 SQRTABSQR100 81 64 49 36 25

10、表 16 9 4 1 0 RETMOVC A,A+PC子程序设计第11页,共21页,2022年,5月20日,2点41分,星期二 ORG 1000H MDA DATA 20H MDB DATA 21 MDC DATA 22H MOV A, MDA ;入口参数传递 ACALL SQR ;调用子程序 MOV R1, A MOV A, MDB ACALL SQR ADD A, R1 MOV MDC, A SJMP $SQR:ADD A, #01 ;子程序 MOVC A, A+PC RET ;RET为一个字节SQRTAB:DB 0, 1, 4, 9, 16 ;平方表 DB 25, 36, 49, 64,

11、 81 END子程序设计第12页,共21页,2022年,5月20日,2点41分,星期二练习1:外部RAM从0000H到0080H有一数据块,请编出将它们传送到3000H到3080H区域的程序。解: ORG 1000H MOV R0, #00H MOV DPTR, #3000H MOV R2, 81HLP1:MOVX A, R0 MOVX DPTR, A INC R0 INC DPTR DJNZ R2, LP1 END汇编语言程序设计课8第13页,共21页,2022年,5月20日,2点41分,星期二练习2:某系有200名学生参加外语统考,若成绩存放在8031外部RAM始址为ENGLISH的连续存

12、储单元,现决定给成绩在95分100分之间的学生颁发A级合格证书,给成绩在90分94分之间的学生颁发B级合格证书。试编一程序,可以统计A级和B级证书的学生人数,并把统计结果分别存入内部RAM的GRADA和GRADB单元。汇编语言程序设计LP: MOVX A,DPTR CJNE A,#95,BRCH123BRCH123: JNC BRCH1 CJNE A,#90,BRCH23BRCH23: JC DONE INC GRADB SJMP DONEBRCH1: INC GRADADONE: INC DPTR DJNZ R2,LP SJMP $ END解:ORG 1000HENGLISH XDATA 2

13、000HGRADA DATA 30HGRADB DATA 31H MOV DPTR,#ENGLISHMOV R2,#200MOV GRADA,#00HMOV GRADB,#00H第14页,共21页,2022年,5月20日,2点41分,星期二练习3:已知:在内部RAM中,共有两组无符号四字节被加数和加数分别存放在FIRST和SECOND为始址的区域(低字节在前,高字节在后),请编程求和(设和也为四字节),并把和存于SUM开始的区域。汇编语言程序设计LP: MOV R0,50H MOV A,R0 MOV R0,51H ADDC A,R0 MOV R1,A INC 50H INC 51H DJNZ

14、R2,LP SJMP $ END解:ORG 1000HFIRST DATA 30HSECOND DATA 31H MOV 50H,#FIRSTMOV 51H,#SECONDMOV R1,#SUMMOV R2,#4CLR C第15页,共21页,2022年,5月20日,2点41分,星期二练习4:已知片内RAM的MDA单元和MDB单元分别存有两个整数a、b,请用查表子程序实现C=a2+2ab+b2,并把和存于片内RAM的MDC单元。设a、b均小于5。汇编语言程序设计SQR: ADD A,#1 MOVC A,A+PC RETTAB: DB 0,1,4,9,16,25 DB 36,49,64,100 S

15、JMP $ END解:ORG 1000HMDA DATA 30HMDB DATA 31HMDC DATA 32H MOV A,MDAADD A,MDBACALL SQRMOV MDC,A第16页,共21页,2022年,5月20日,2点41分,星期二练习5:设晶振频率为6MHz,试编写一能延时20ms的子程序。(提示:采用NOP指令延时)汇编语言程序设计DELAY: MOV R3,#20EXT : MOV R2,#50INN : NOP DJNZ R2,INN DJNZ R3,EXT RET 解:分析:1个机器周期为12/(6*106)=2us, 则20ms需消耗 20*10-3/(2*10-6

16、)=1000 个机器周期 NOP为单周期指令,所以需循环1000次,一个8位的存储单元只能最大只能存储255,所以,需要采用双重循环。 本程序分别采用R2和R3存储内、外循环次数,内循环50次,外循环20次。思考:误差太大,如何精确定时?课9第17页,共21页,2022年,5月20日,2点41分,星期二练习6:片内RAM从30H单元开始存放一个正数表,以”-1”作为表的结束标志,编程将该表的长度存入片内RAM70H单元。设表的长度小于255汇编语言程序设计LP : MOV A,R0 CJNE A,0FFH,CHK SJMP DONECHK: INC 70H SJMP LPDONE:SJMP $

17、 END解:ORG 1000HMOV R0,#30HMOV 70H,#00H第18页,共21页,2022年,5月20日,2点41分,星期二EXT: MOV R0,#10H ;内循环初始化 MOV MAX,R0 MOV A,R2 ;设置内循环次数 MOV R3,AINN: MOV A,R0 CJNE A,MAX,BRCH1BRCH1:JC NEXT XCH A,MAX ;交换 MOV R0,ANEXT :INC R0 ;指针指向下一个数 DJNZ R3,INN MOV A,MAX ;存储最大数 MOVX DPTR,A CLR C ;DPTR自减1 SUBB DPTR,#1 DJNZ R2,EXT

18、 END练习7:设8031单片机外部RAM从1000H单元开始存放100个无符号8位二进制数。要求编一子程序能把它们从大到小依次存入片内RAM从50H开始的存储区。问题:需考虑排序的算法汇编语言程序设计解:ORG 1000HMAX DATA 30HMOV DPTR,#1000HMOV R0,#50HMOV R2,#100 ;外循环次数MOV MAX,#00H第19页,共21页,2022年,5月20日,2点41分,星期二练习8(思考):已知内部RAM单元MA和MB中分别有两个有符号数,请编一减法子程序,并把差存入RESULT和RESULT+1中问题:有符号数的减法,如(-98)-98因为98D=62H=0110 0010B -98D=1001 1110则 1001 1110B- 0110 0010B=0011 1100B=3CH=3*16+

温馨提示

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

评论

0/150

提交评论