井冈山大学 单片机课件内容.docx
- 文档编号:16413314
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:46
- 大小:510.72KB
井冈山大学 单片机课件内容.docx
《井冈山大学 单片机课件内容.docx》由会员分享,可在线阅读,更多相关《井冈山大学 单片机课件内容.docx(46页珍藏版)》请在冰点文库上搜索。
井冈山大学单片机课件内容
一、两个例子
1.灯闪烁.swf2.asm8led
二、89S51芯片引脚图(P61)
40个:
1.电源引脚2.I/O引脚3.晶振引脚4.控制引脚
图3-2-189S51MCS-51封装和引脚分配((a)双列直插式封装)
三、存储器的组织结构(P51)
1.存储器配置
图3-2-1MCS-51存储器地址分配
2.内部RAM
(1)工作寄存器区
(2)位寻址区
(3)一般RAM区
3.特殊功能寄存器
(1)累加器ACC
(2)B寄存器
(3)程序状态字寄存器PSW图3-1-38051内部RAM结构图
表3-1-3PSW中各位的定义
位序
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
位标志
CY
AC
FO
RS1
RS0
OV
未用
P
表3-1-4RS1、RS0与寄存器组对应关系
RS1
RS0
寄存器组
地址
0
0
0组
00~07H
0
1
1组
08~0FH
1
0
2组
10~17H
1
1
3组
18~1FH
(4)堆栈指针寄存器SP
(5)数据指针寄存器DPTR
4.程序存储器
程序执行流程图
表6-1-28031/8051中断入口地址表
复位入口地址
0000H
外部中断0服务程序入口地址
0003H
定时器T0中断服务程序入口地址
000BH
外部中断1服务程序入口地址
0013H
定时器T1中断服务程序入口地址
001BH
串行口中断服务程序入口地址
0023H
四、并行I/O口(P200)
1.P0口
图7-2-1P0口一位的结构
P0口有两种方式:
通用I/O口和地址/数据总线。
(1)通用I/O口的工作过程MUX接通B端,V1韯止
A.P0输出数据时:
上拉电阻
B.P0输入数据时:
分为读引脚和读锁存器两种方式
a.读引脚操作:
先将锁存器写1,端口输入指令:
MOVA,P0
b.读锁存器操作:
读-修改-写类指令:
ANLP0,A
(2)地址/数据总线的工作过程MUX接通A端,低8位地址和数据
表2.7专用寄存器复位状态(P23)
专用寄存器
复位状态
专用寄存器
复位状态
ACC
00H
TCON
00H
B
00H
TH0
00H
PSW
00H
TL0
00H
SP
07H
TH1
00H
DPTR
0000H
TL1
00H
P0~P3
FFH
SCON
00H
IP
×××00000B
SBUF
不定
IE
0××00000B
PCON
0×××0000B
TMOD
00H
2.P1口
有上拉电阻
图7-2-2P1口一位的结构
3.P2口
高8位地址
图7-2-3P2口一位的结构
4.P3口
第二功能
图7-2-4P3口一位的结构
表2.1P3口线的第二功能(P10)
口线
第二功能信号
第二功能
P3.0
RXD
串行数据输入
P3.1
TXD
串行数据输出
P3.2
外部中断0请求输入
P3.3
外部中断1请求输入
P3.4
T0
定时器/计数器0外部输入
P3.5
T1
定时器/计数器1外部输入
P3.6
外部RAM写选通
P3.7
外部RAM读选通
五、寻址方式(P30)
MCS-51单片机指令系统提供了7种不同的寻址方式。
1.立即寻址方式
操作数是以指令字节的形式存放在程序存储器中。
书写时,在立即数面前加“#”标志。
MOVA,#20H
MOVDPTR,#data16。
2.直接寻址方式
直接寻址是指在指令中直接给出操作对象的存储单元地址。
直接寻址方式的寻址范围包括:
内部RAM低128单元、特殊功能寄存器和一些程序控制指令。
(位地址空间)
例如:
MOVA,3AH。
该指令将内部RAM中3AH单元的内容送给累加器A,若(3AH)=20H,执行示意图如图3.2。
执行结果A=20H。
另有(A)=20H
MOVA,P0
MOVA,80H
图3.2“MOVA,3AH”示意图
3.寄存器寻址方式
寄存器寻址就是操作对象放在寄存器中。
寄存器寻址方式的寻址范围包括:
四个工作寄存器组共32个通用寄存器、部分特殊功能寄存器。
(A,B,DPTR,CY)
例如:
MOVA,R0。
该指令把寄存器R0的内容送到累加器A中,若R0=20H,执行过程如图3.3。
指令执行后A=20H。
图3.3“MOVA,R0”指令示意图
4.寄存器间接寻址方式
寄存器间接寻址就是操作对象的存储器单元地址存放在寄存器中。
用“@”和寄存器符号表示。
(R0,R1,DPTR,SP)
寄存器间接寻址范围包括:
内部RAM低128字节、外部RAM64KB、堆栈操作指令。
例如:
设寄存器R1=60H,A=20H,执行指令ADDA,@R1。
若(60H)=10H,执行过程如图3.4。
执行结果A=30H。
图3.4“MOVA,@R1”指令示意图
5.相对寻址方式
相对寻址是指以指令中给出的操作数作为程序转移的偏移量。
书写时,以“rel”表示地址偏移量。
目标地址表示为:
目标地址=转移指令首地址+转移指令字节数+rel目标地址=当前PC值+rel
例如:
JC3AH。
(JC的指令代码是40H,见P210)
执行过程如图3.5。
图3.5“JC3AH”指令示意图
6.变址寻址方式(又称基址寄存器加变址寄存器间接寻址)
指令提供了以DPTR或PC为基址、以累加器A为变址,通过将两寄存器的内容相加形成的16位数据,作为操作对象存储单元的地址。
51系列单片机的变址寻址只能对程序存储器进行寻址,而且变址寻址指令只有三条:
MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR
例如:
MOVCA,@A+DPTR。
若A=3AH,DPTR=3F30H,那么操作对象存储单元的地址为3F6AH,若(3F6AH)=5CH,执行过程如图3.6。
则执行结果为A=5CH。
图3.6“MOVCA,@A+DPTR”指令示意图
7.位寻址方式
指令给出的操作数是内部数据存储器中的可寻址位。
书写时,有四种表示方法:
直接使用位地址、位名称表示法、单元地址加位表示法、专用寄存器名称加位表示法。
51单片机的位寻址范围包括:
内部RAM中的位寻址区、特殊功能寄存器的可寻址位。
例如:
ANLC,21H.5。
该指令将进位标志CY和内部RAM的21H单元的第5位进行逻辑与运算,结果保存到C中。
六、指令系统(P33)
1.描述指令的一些符号的意义:
·Rn(n=0~7):
表示当前工作寄存器组R0~R7中的某一个寄存器。
·@Ri(i=0~1):
可以作间接寻址的寄存器,只能是R0和R1两个寄存器,“@”是间接寻址标识符。
·direct:
内部RAM的8位地址,可以是内部RAM的单元地址(00H~7FH)或特殊功能寄存器地址。
·#data:
8位立即数,其中“#”是立即数标识符。
·#data16:
16位立即数。
·addr11:
11位目的地址。
用于ACALL和AJMP指令中,转移范围为2KB。
·addr16:
16位目的地址。
用于LCALL和LJMP指令中,转移范围为64KB。
·rel:
相对转移指令中的8位偏移地址,范围是-128~+127。
·DPTR:
数据指针,用作16位的地址寄存器。
·bit:
内部RAM或特殊功能寄存器中的直接寻址位。
·rrr:
在操作码中,表示R0~R7寄存器的编码。
·A:
累加器,写作“A”时,是寄存器寻址;写作“ACC”时,是直接寻址。
·B:
特殊功能寄存器,用于MUL和DIV指令中。
·/:
位操作数的前缀,表示对该位操作数取反。
·(存储单元地址):
表示某存储单元的内容。
·(间址寄存器):
由寄存器间接寻址的单元中的内容。
2.数据传送指令(29条)
(1)以累加器A为目的操作数的指令(4条)
MOVA,#dataRndirect@Ri
(2)以寄存器Rn为目的操作数的指令(3条)
MOVRn,,#datadirectA
(3)以直接地址为目的操作数的指令(5条)
MOVdirect,#dataRndirect2@RiA
(4)以间接地址为目的操作数的指令(3条)
MOV@Ri,#datadirectA
(5)十六位数据传送指令(1条)MOVDPTR,#data16
(6)查表指令(2条)
MOVCA,@A+DPTR@A+PC
(7)累加器A与片外RAM传送指令(4条)
MOVXA,@DPTR@Ri
MOVX@DPTR,A
MOVX@Ri,A
(8)栈操作指令(2条)
PUSHdirectPOPdirect
(9)交换指令(5条)
XCHA,Rndirect@Ri
XCHDA,@Ri
SWAPA
3.算术运算指令(24条)
(1)不带进位加法指令(4条)
ADDA,Rndirect@Ri#data
(2)带进位加法指令(4条)
ADDCA,Rndirect@Ri#data
(3)带借位减法指令(4条)
SUBBA,Rndirect@Ri#data
(4)乘法指令(1条)MULAB
(5)除法指令(1条)DIVAB
(6)加1指令(5条)
INCARndirect@RiDPTR
(7)减1指令(4条)
DECARndirect@Ri
(8)十进制调整指令(1条)DAA
4.逻辑运算指令(24条)
(1)逻辑与运算指令(6条)
ANLA,Rn@Ridirect#data
ANLdirect,A#data
(2)逻辑或运算指令(6条)
ORLA,Rn@Ridirect#data
ORLdirect,A#data
(3)逻辑异或运算指令(6条)
XRLA,Rn@Ridirect#data
XRLdirect,A#data
(4)累加器清0和取反指令(2条)CLRACPLA
(5)循环移位指令(4条)
RRARRCARLARLCA
5.程序控制指令(22条)
(1)无条件转移指令(4条)
相对转移指令SJMPrel
绝对转移指令AJMPaddr11
长转移指令LJMPaddr16
间接转移指令JMP@A+DPTR
(2)条件转移指令(13条)
累加器判零转移指令JZrel
JNZrel
比较转移指令CJNEA,direct,rel
CJNEA,#data,rel
CJNERn,#data,rel
CJNE@Ri,#data,rel
减1不为0转移指令DJNZRn,rel
DJNZdirect,rel
位控制转移指令JCrel
JNCrel
JBbit,rel
JNBbit,rel
JBCbit,rel
(3)子程序调用和返回指令(4条)
绝对调用指令ACALLaddr11
长调用指令LCALLaddr16
返回指令RET
RETI
(4)空操作指令(1条)NOP
6.位操作指令(12条)
(1)位传送指令(2条)
MOVC,bit
MOVbit,C
(2)置位复位指令(4条)
CLRCbit
SETBCbit
(3)位逻辑运算指令(6条)
ANLC,bit
ANLC,/bit
ORLC,bit
ORLC,/bit
CPLC
CPLbit
7.伪指令(P54)
(1)赋值伪指令EQU
指令格式:
<符号名>EQU<赋值项>
例如:
TTYEQU1000H;定义标号TTY值为1000H
LOOPEQUTTY;定义标号LOOP值为标号TTY的值
(2)定义字节伪指令DB
指令格式:
[<标号>]DB<表达式表>
功能:
把表达式表中的字节数据存入从标号开始的连续存储单元中。
例如:
TAB:
DB32H,33H,34H,35H,36H,37H表示把字节数据存入由标号TAB开始的连续存储单元中。
(3)定义字伪指令DW
指令格式:
[<标号>]DW<表达式表>
功能:
把表达式表中的16位数据存入由标号开始的连续存储单元,低地址单元存放高字节,高地址单元存放低字节。
例如:
ABC:
DW1234H,100H表示从ABC地址开始按顺序存入12H,34H,01H,00H。
(4)存储区定义伪指令DS
指令格式:
[<标号>]DS<表达式>
功能:
通知汇编程序,从指定的地址开始,保留指定数目的字节单元作为存储区,供程序运行使用。
例如:
ADDR1:
DS20H指令表示从标号ADDR1代表的地址开始,保留20H个存储单元。
(5)位定义伪指令BIT
指令格式:
<符号名>BIT<位地址>
功能:
给符号名赋以位地址。
例如:
AABIT1FH;用符号名AA代表位地址1FH。
(6)设置起始地址伪指令ORG
指令格式:
[<标号>]ORG<表达式>
功能:
指定目标程序或数据块在存储器中的起始地址,其中,表达式通常为16位地址码。
例如:
ORG1000H
START:
MOVA,0H
ORG伪指令通知汇编程序,由START开始的程序段,其起始地址为1000H。
如果没有设置起始地址,则目标程序从0000H单元开始存放。
(7)汇编结束伪指令END
指令格式:
END
功能:
用于终止源程序的汇编工作。
七、程序设计举例(P58)
例3.10双字节加法程序
设:
被加数存放在内部RAM的30H(高字节)、31H(低字节)单元中,加数存放在内部RAM的32H、33H单元中,运算结果存放在30H、31H中,进位位存放在位寻址区的00H位中。
分析:
由于MCS-51指令系统中只有单字节加法指令,因此多字节加法必须从低位字节开始分字节相加。
其中最低字节使用ADD指令,其余字节使用带进位加法指令ADDC。
双字节加法程序如下:
ORG0100H;程序存放在0100H开始的单元
START:
MOVR0,#31H;将被加数低字节地址送R0
MOVR1,#33H;将加数低字节地址送R1
MOVA,@R0;将被加数低字节内容送A
ADDA,@R1;低字节数相加
MOV@R0,A;低字节数之和存入31H单元
DECR0;R0指向被加数高字节
DECR1;R1指向加数高字节
MOVA,@R0;被加数高字节送A
ADDCA,@R1;高字节数相加
MOV@R0,A;高字节数之和存入30H单元
MOV00H,C;进位送00H位保存
SJMP$;动态停机
END;源程序结束
例3.11将内部RAM1AH单元中一压缩BCD数转换成二进制数。
分析:
该题的关键是如何取出压缩BCD数的十位数和个位数。
实现转换的程序段如下:
MOVA,1AH;将BCD数送累加器A
SWAPA;交换BCD数的个位数和十位数
ANLA,#0FH;取出BCD数的十位数
MOVB,#0AH;立即数10送寄存器B
MULAB;BCD数的十位数乘以10
ANL1AH,#0FH;取出BCD数的个位数
ADDA,1AH;十位数×10+个位数
MOV40H,A;转换结果送40H单元
例3.12编程实现下图的逻辑功能。
其中20H、2FH、2AH是位地址。
分析:
逻辑电路的功能是P1.0=
程序如下:
MOVC,20H;20H位送CY
ANLC,2FH;CY逻辑与2FH位
CPLC;CY取反
ORLC,2AH;CY逻辑或2AH位
MOVP1.0,C;结果送P1.0
例3.13双字节乘法程序
设两个乘数分别放在R0R1和R2R3中,乘积放入R4R5R6R7中。
分析:
双字节乘法实质上是相应字节相乘后对应字节相加,其计算过程如下:
双字节乘法程序段如下:
START:
MOVA,R1
MOVB,R3
MULAB;R1×R3
MOVR7,A
MOVR6,B;R1×R3存入R6R7中
MOVA,R0
MOVB,R3
MULAB;R0×R3
ADDA,R6
MOVR6,A;R0×R3低字节送R6
MOVA,B;R0×R3高字节送A
ADDCA,#0H;加CY
MOVR5,A;R0×R3存入R5R6中
MOVA,R1
MOVB,R2
MULAB;R1×R2
ADDA,R6
MOVR6,A;R1×R2低字节累加进入R6
MOVA,B;R1×R2高字节送A
ADDCA,R5
MOVR5,A;R1×R2累加存入R5R6
CLRA
ADDCA,#0H
MOVR4,A;(R1×R2)高+(R0×R3)高产生的进位存入R4
MOVA,R0
MOVB,R2
MULAB;R0×R2
ADDA,R5
MOVR5,A;R0×R2低字节送R5
MOVA,B;R0×R2高字节送A
ADDCA,R4
MOVR4,A;R0×R2存入R4R5
SJMP$
END
例3.14比较内部RAM30H和31H单元中无符号数的大小,使得30H单元存放大数,31H单元存放小数。
分析:
流程图如下:
程序:
ORG1000H
START:
CLRC
MOVA,30H
SUBBA,31H
JNCDONE;若无借位,即(30H)≥(31H)时转DONE
MOVA,30H
XCHA,31H;有借位,即(30H)<(31H),交换(30H)与(31H)
MOV30H,A
DONE:
SJMPDONE
END
例3.15内部RAMBLOCK单元中存储一个不带符号数,判断这个数的大小,若小于MIN,则令B=1;若大于等于MAX,则令B=2;否则,令B=3。
分析:
流程图如下:
程序:
ORG1000H
START:
MOVA,BLOCK;将BLOCK中内容送A
CJNEA,#MIN,NEXT1;与MIN比较,无论是否相等转NEXT1
NEXT1:
JNCDO1;A≥MIN转DO1
MOVB,#01H;A SJMPSTOP;转向结尾 DO1: CJNEA,#MAX,NEXT2;与MAX比较 NEXT2: JNCDO2;A≥MAX转DO2 MOVB,#03H;MIN≤A SJMPSTOP DO2: MOVB,#02H;A≥MAX,则令B=2 STOP: SJMPSTOP;动态停机 END 例3.16假定有三个分支程序段,各分支程序段的功能依次是从内部RAM取数,从外部RAM低256B范围取数和从外部RAM64KB范围内取数。 R0中存放内部RAM地址或外部RAM的低8位地址,R1中存放外部RAM的高8位,R3中存放分支序号值(0,1,2)。 根据R3的内容转入不同的处理程序。 分析: 利用散转指令查表转移的方法: 在程序中建立一个转移表JMPTBL,将分支程序入口地址与转移表首地址的差值按顺序存放其中。 将转移表首地址JMPTBL送DPTR,分支序号送A。 查表就可以得到相应分支程序入口地址与转移表首地址之差,然后使用JMP@A+DPTR将分支程序的入口地址送PC,实现程序转移。 程序: MOVA,R3;取分支号 MOVDPTR,#JMPTBL;赋转移表首地址 MOVCA,@A+DPTR;查取转移偏移量 JMP@A+DPTR;散转 JMPTBL: DBMEM0-JMPTBL;定义转移偏移量表 DBMEM1-JMPTBL DBMEM2-JMPTBL …… MEM0: MOVA,@R0;从内部RAM读数 RET MEM1: MOVXA,@R0;从外部RAM低256B读数 RET MEM2: MOVDPL,R0;从外部RAM64KB读数 MOVDPH,R1 MOVXA,@DPTR RET 例3.17编程统计累加器A中“1”的个数。 分析: 流程图: 程序: MOVR1,#0;计数器R1清0 PUSHACC;保护ACC LOOP1: JZDONE;若A=0,程序结束 CLRC;进位位清0 RLCA;累加器A带进位循环左移一位 JNCLOOP1;CY=0,则继续循环 INCR1;CY=1,则计数器R1加1 SJMPLOOP1 DONE: POPACC;恢复ACC SJMP$ END 例3.18计算内部RAM40H单元开始存放的40个8位无符号数之和,将结果存放在内部RAM7EH(高位)和7FH(低位)单元。 分析: 流程图: 程序: MOV7EH,#0 MOV7FH,#0;累加和单元清0 MOVR6,#28H;计数器R6置初值 MOVR0,#40H;设置间址指针 LOOP: MOVA,7FH ADDA,@R0;累加一个字节单元 MOV7FH,A CLRA ADDCA,7EH;加累加时产生的进位 MOV7EH,A INCR0;修改间址指针 DJNZR6,LOOP;计数器R6减1不为0,则继续循环 SJMP$ 例3.19从内部RAM30H单元开始存放了20个数,找出其中的最大数。 分析: 求极值问题是一个比较的过程。 流程图如下: 程序: START: MOVR0,#30H;间址指针R0置初值 MOVR6,#13H;计数器R6置初值 MOVA,@R0;读第一个数 LOOP: INCR0 MOV20H,@R0;读下一个数 CJNEA,20H,LOOP1;两数比较 LOOP1: JNCLOOP2;A中内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 井冈山大学 单片机课件内容 井冈山 大学 单片机 课件 内容