《单片机学习第四章PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《单片机学习第四章PPT讲稿.ppt(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机学习第四章第1页,共17页,编辑于2022年,星期五汇编语言程序设计中的数汇编语言程序设计中的数计算机只能识别二进制数计算机只能识别二进制数机器指令机器指令,它原本是不认识,它原本是不认识常用的十六进制数和十进制数的。常用的十六进制数和十进制数的。机器指令机器指令/目标代码目标代码:由由0/10/1代码组成的操作码与操作数。代码组成的操作码与操作数。十六进制数十六进制数:便于读写记忆的二进制数的简写形式。:便于读写记忆的二进制数的简写形式。(0 09 9,A AF F 后缀:后缀:H/hH/h)BCDBCD码码:用二进制数表达的十进制数。:用二进制数表达的十进制数。(0 09 9表示为表
2、示为:0000:00001001B 1001B 后缀后缀:B/b,H/h:B/b,H/h)二进制数二进制数 :由:由0/10/1组成、组成、“逢逢2 2进进1 1”的数制。的数制。如:如:01011110B 01011110B (0 01 1 后缀:后缀:B/bB/b)2第2页,共17页,编辑于2022年,星期五汇编语言编程基本规则汇编语言编程基本规则汇编语言汇编语言:用助记符描述的指令的集合用助记符描述的指令的集合。指令中以指令中以 A AF F 开头的十六进制数前必须添一个开头的十六进制数前必须添一个 “0 0”。二进制数必须带后缀二进制数必须带后缀“B B”或或“b b”;十六进制数必须
3、带;十六进制数必须带后缀后缀“H H”或或“h h”;十进制数的后缀是;十进制数的后缀是“D D”或或“d d”或无或无.标号标号:操作码操作码 目的操作数目的操作数,源操作数源操作数;注释注释 汇编程序汇编程序:汇编语言编写的程序借助汇编语言编写的程序借助编译工具编译工具编译成为目标代码编译成为目标代码,计算机才能识别。这个编译工具称为计算机才能识别。这个编译工具称为汇编程序。汇编程序。3第3页,共17页,编辑于2022年,星期五汇编程序的伪指令汇编程序的伪指令汇编程序汇编程序 软件软件 工具工具工具软件工具软件:将程序员用汇编语言编写的程序翻译成机器码将程序员用汇编语言编写的程序翻译成机器
4、码 (真真)指令指令:告诉计算机告诉计算机如何操作以及做何种操作如何操作以及做何种操作用汇编语言编写的程序在此被称为用汇编语言编写的程序在此被称为应用程序应用程序伪指令伪指令:告诉汇编程序在翻译应用程序时:告诉汇编程序在翻译应用程序时有何具体有何具体约定约定。伪指令不进行具体的操作,那是真指令的事。伪指令不进行具体的操作,那是真指令的事。比如:从何处开始,何处结束,某些编程者自己规定的比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思表述代表什么意思 4第4页,共17页,编辑于2022年,星期五汇编程序的常用伪指令汇编程序的常用伪指令ORG addr16ORG addr16ASM
5、51ASM51程序中一定要写!程序中一定要写!规定编译后的机器代码存放的起始位置。规定编译后的机器代码存放的起始位置。ENDEND ASM51ASM51程序中一定要写!程序中一定要写!表示翻译到此结束,其后的任何内容不予理睬。表示翻译到此结束,其后的任何内容不予理睬。符号名称符号名称 EQU EQU 表达式表达式将表达式的值赋予符号名称。程序中凡出现该符号名将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。称就等同于该表达式。$“当前当前PCPC值值”也叫位置计数器也叫位置计数器 代表正在执行的指令所在位置。代表正在执行的指令所在位置。5第5页,共17页,编辑于2022年,星期
6、五符号名称符号名称 BITBIT 位地址位地址将位地址的值赋予符号名称。程序中凡出现该符将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。号名称就代表该位地址。DWDW 双字节数据双字节数据 或双字节数据组或双字节数据组 将双字节数据将双字节数据 或双字节数据组或双字节数据组 顺序存放在此后的存顺序存放在此后的存储单元中。占据相应存储空间。储单元中。占据相应存储空间。DBDB 8 8位数据位数据 或或8 8位数据组位数据组 将将8 8位数据位数据 或或8 8位数据组位数据组 顺序存放在此后的存储单元顺序存放在此后的存储单元中。占相应数量的存储空间。中。占相应数量的存储空间。6第6
7、页,共17页,编辑于2022年,星期五程序的顺序程序的顺序/分支分支/循环三种基本结构循环三种基本结构 ORG 2000HORG 2000HBCD2BBCD2B:MOV AMOV A,R2 R2 ;取入口数据取入口数据 ANL AANL A,#0F0H#0F0H;取出十位取出十位 SWAP A SWAP A ;高高4 4位位 低低4 4位位 MOV BMOV B,#0AH#0AH MUL AB MUL AB ;十位乘十位乘1010 MOV R3 MOV R3,A A ;积暂存进积暂存进R3R3 MOV A MOV A,R2R2;再取入口数据再取入口数据 ANL AANL A,#0FH#0FH
8、;取出个位取出个位 ADD AADD A,R3R3 MOV R2 MOV R2,A A ;结果结果 R2R2 RET;RET;若不是子程序可用若不是子程序可用ENDEND 例例:将将R2R2中中BCDBCD码数码数转为二进制数转为二进制数存进存进R2R2(此子程序在下(此子程序在下一例中还要用到)一例中还要用到)7第7页,共17页,编辑于2022年,星期五编程要点:编程要点:两字节两字节 BCDBCD码数范围为:码数范围为:0000H0000H9999H9999H 相应相应2 2进制进制/16/16进制数为:进制数为:0000H0000H270FH270FH 调用调用 BCD2BBCD2B子程
9、序子程序实现实现“千位,百位千位,百位”转为二进制转为二进制,并乘并乘100;100;再调再调 BCD2BBCD2B子程序子程序实现实现“十位,个位十位,个位”转为二进制转为二进制;最后,对位相加。最后,对位相加。例:将例:将R5R4R5R4中的双字节中的双字节BCDBCD码数转为码数转为 二进制数存于二进制数存于R5R4R5R4中中。8第8页,共17页,编辑于2022年,星期五例例:将将R5R4R5R4中的中的两字节两字节BCDBCD码数码数转为二进制数存转为二进制数存于于R5R4R5R4中中X 100X 100千千 百百十十 个个二进制二进制+CyCy+(R5)(R4)(R5)(R4)(R
10、6)(A)(R5)(A)二进制二进制二进制二进制二进制二进制二进制二进制二进制二进制调调 BCD2B调调 BCD2B9第9页,共17页,编辑于2022年,星期五 ORG 2000HORG 2000H VAR EQU 30H VAR EQU 30H ;定义缓存单元定义缓存单元 FUNC EQU 31HFUNC EQU 31HBR1:MOV ABR1:MOV A,VAR VAR ;取出变量取出变量“X X”JZ COMP JZ COMP ;若若=0,=0,就赋就赋 0 0 JNB ACC.7,POS1 JNB ACC.7,POS1;判断判断 =正?正?MOV A,#0FFH MOV A,#0FFH
11、;(-1=+1;(-1=+1取反加取反加1)1)SJMP COMP SJMP COMP ;输出输出 -1-1POS1POS1:MOV AMOV A,#01H#01H ;输出输出 +1+1COMPCOMP:MOV FUNCMOV FUNC,A A ;赋给函数赋给函数“Y Y”HEREHERE:AJMP HEREAJMP HERE END END例3:1(X0)1(X0)0(X=0)0(X=0)1(X0)1(X0)Y=Y=10第10页,共17页,编辑于2022年,星期五任务一:控制一盏灯点亮任务一:控制一盏灯点亮 任务二:红灯周期性亮任务二:红灯周期性亮/灭灭 任务三:红外防盗报警任务三:红外防盗
12、报警 0RG 0000H0RG 0000H AJMP MAIN AJMP MAIN ORG 0003H ORG 0003H RL A RL A ACALL DELAY ACALL DELAY RETI RETIMAINMAIN:MOV AMOV A,#80H#80H SETB EX0 SETB EX0 SETB EA SETB EAWAIT:JB ACC.0,JOB1WAIT:JB ACC.0,JOB1 JB ACC.1,JOB2 JB ACC.1,JOB2 JB ACC.2,JOB3 JB ACC.2,JOB3 AJMP WAIT AJMP WAITJOB1:JOB1:CLR P1.0 CL
13、R P1.0 ;亮红灯亮红灯HERE:AJMP HEREHERE:AJMP HEREJOB2:CPL P1.0 JOB2:CPL P1.0 ;亮亮/灭灭 ACALL DELAY ACALL DELAY;延时延时1 1秒秒 AJMP JOB2 AJMP JOB2 ;重复重复JOB3:CLR P1.1 JOB3:CLR P1.1 ;亮绿灯亮绿灯REDO:SETB P1.3 REDO:SETB P1.3 CHECK:JNB P1.3,CHECK LOOP:CHECK:JNB P1.3,CHECK LOOP:;报警!报警!AJMP REDO ;AJMP REDO ;再检测再检测11第11页,共17页,
14、编辑于2022年,星期五 ORG 1000HORG 1000HDELAYDELAY:MOV R6MOV R6,#200 ;#200 ;1Tm1TmLOOP1:MOV R7LOOP1:MOV R7,#248 ;#248 ;1Tm1Tm NOP ;NOP ;1Tm1TmLOOP2:DJNZ R7LOOP2:DJNZ R7,LOOP2 ;LOOP2 ;2Tm2Tm DJNZ R6 DJNZ R6,LOOP1 ;LOOP1 ;2Tm2Tm RET ;RET ;1Tm1Tm例例:软件循环延时软件循环延时100mS(100mS(晶振晶振12MHz)12MHz)1Tm=1uS 100mS=100000 uS
15、 1Tm=1uS 100mS=100000 uS MOV Rn#data MOV Rn#data 和和 NOP NOP 是单机器周期指令是单机器周期指令 DJNZ RnDJNZ Rn,rel rel 是双机器周期指令是双机器周期指令 200=0C8H;248=0F8H200=0C8H;248=0F8H1+1+1+1+248x248x2 2=498=498(498+2)(498+2)x200 x20012第12页,共17页,编辑于2022年,星期五 ORG 1000HORG 1000HDL1SDL1S:MOV R7MOV R7,#10#10DL1:MOV R6DL1:MOV R6,#200#20
16、0DL2:MOV R5,#250 DL2:MOV R5,#250 DL3:DJNZ R5,DL3DL3:DJNZ R5,DL3 DJNZ R6 DJNZ R6,DL2DL2 DJNZ R7 DJNZ R7,DL1DL1 RET RET例例:软件循环延时软件循环延时1S(1S(晶振晶振12MHz)12MHz)1Tm=1uS 1S=1000000 uS 1Tm=1uS 1S=1000000 uS MOV Rn#data MOV Rn#data 是单机器周期指令是单机器周期指令 DJNZ RnDJNZ Rn,rel rel 是双机器周期指令是双机器周期指令1+1+250 x2250 x21+1+(1
17、+250 x2)(1+250 x2)+2)x200+2)x2001+1+(1+250 x2+2)(1+250 x2+2)x200+2x10 x200+2x1013第13页,共17页,编辑于2022年,星期五 ORG 2000HORG 2000HH2ASC:MOV A,R2 ;H2ASC:MOV A,R2 ;取待转换的数据取待转换的数据(入口入口)ADD A,#0F6H ;ADD A,#0F6H ;判此数是否判此数是否10 10?若若10,10,则则C=1C=1;10,10,则则C=0C=0 MOV A,R2 ;MOV A,R2 ;重取待转换的数据重取待转换的数据 JNC AD30H ;JNC
18、AD30H ;小于小于1010就跳去加就跳去加30H30H ADD A,#07H ;ADD A,#07H ;1010就先加就先加7 7 再去加再去加30H30H AD30H:ADD A,#30H AD30H:ADD A,#30H MOV R2,A ;MOV R2,A ;存结果存结果(出口出口)RET RET例例:16:16进制数进制数(00H(00H0FH)0FH)转转ASCIIASCII码子程序码子程序算法:凡算法:凡1010的十六进制数加的十六进制数加37H37H;凡;凡1010的的 十六进制数加十六进制数加 30H30H。(ASCIIASCII码表码表0 09 30H9 30H39H,3
19、9H,A AF 41HF 41H46H46H 14第14页,共17页,编辑于2022年,星期五TABLTABL:DW 050FH,0E89H,0A695H,1EAAH,0D9BH,7F93H:DW 050FH,0E89H,0A695H,1EAAH,0D9BH,7F93H DW 0373H,26D7H,2710H,9E3FH,1A66H,22E3H DW 0373H,26D7H,2710H,9E3FH,1A66H,22E3H DW 1174H,16EFH,33E4H,6CA0H DW 1174H,16EFH,33E4H,6CA0H例:根据例:根据1616个双字节数的序号查表找出对应数据个双字节数
20、的序号查表找出对应数据表地址表地址#TABL#TABL#TABL+1#TABL+1#TABL+2#TABL+2#TABL+3#TABL+3#TABL+30#TABL+30#TABL+31#TABL+31数据数据Y YY0Y0高高Y0Y0低低Y1Y1高高Y1Y1低低Y15Y15高高Y15Y15低低序号序号X X00H00H01H01H0FH0FH编程思路编程思路:以表格首地址:以表格首地址(TABL)(TABL)为基址,以序号为基址,以序号(的的2 2倍倍)为偏移量,查找对应的数据为偏移量,查找对应的数据15第15页,共17页,编辑于2022年,星期五 ORG 2000H ORG 2000HST
21、A1STA1:MOV A,R2 :MOV A,R2 ;取待查数据的序号取待查数据的序号 X(X(入口入口)RL A ;RL A ;每数占每数占2 2个单元,序号要乘个单元,序号要乘2 2 MOV R4 MOV R4,A ;A ;R4 R4 序号序号 x2(x2(即偏移量即偏移量)MOV DPTR,#TABL ;MOV DPTR,#TABL ;DPTR DPTR 表格首地址表格首地址 MOVC A,A+DPTR MOVC A,A+DPTR ;(A);(A)查到数据高查到数据高8 8位位 XCH A XCH A,R4 ;R4 ;数据高数据高8 8位存进位存进R4(R4(出口出口);同时取出偏移量到同时取出偏移量到A A INC DPTR ;INC DPTR ;DPTRDPTR指向下一个单元指向下一个单元 MOVC A,A+DPTR ;MOVC A,A+DPTR ;再查到数据低再查到数据低8 8位位 MOV R3,A ;MOV R3,A ;将数据低将数据低8 8位存进位存进R3(R3(出口出口)RET RETTABLTABL:DW:DW ;表格数据见前页表格数据见前页 END END16第16页,共17页,编辑于2022年,星期五OVER!17第17页,共17页,编辑于2022年,星期五