单片机原理与实用技术教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章单片机入门知识
1.1认识单片机
1.1.1什么是单片机
单片机就是单片微型计算机,是将微机的主要组成部分(包括中央处理器CPU、一定容量的存储器RAM和ROM,以及输入输出I\O接口电路等)集成在一块芯片上的计算机。
1.1.2单片机系统
课本上介绍的是汽车追踪形式控制系统
时钟系统看图片
1.1.3单片机的应用领域
1.生产自动化
2.实时测控
3.智能化产品
4.智能化仪表
5.信息通信技术
6.科学研究
7.国防现代化
1.1.4单片机应用特点
1.面向控制
2.在线应用
3.嵌入式应用
1.1.5单片机的分类
根据应用范围不同,分为通用型和专用型
根据应用场合不同,分为工业级和商用级
根据处理数据能力,分为4位,8位,16位,32位,64位机
根据内核不同还可分为51系列的,PIC的,AVR等
还可以根据厂家不同进行分类,不同厂家又有不同的系列等等
目前国内主流产品还是8位51系列
1.2单片机相关基础知识
1.2.1数制和编码
1.进位计数制
(1)十进制
日常生活常用的是十进制,加法逢十进一,减法借一当十
由0-9十个数码组成,为了和二进制、十六进制区分一般在右边用D表
示,例85D
(2)二进制
首先要讲为什么要引入二进制(B),由于计算机和单片机中的CPU、存
储器和其他的硬件电路都是由集成电路做成,而集成电路都是由三极管
组成,并且是利用三极管工作在开关状态下集电极不是高电平就是低电
平来表示1和0的。
简单点说就是在计算机和单片机中就只有0和1,
单片机就只认识0和1 ,所有我们引入二进制,二进制就只由0和1两
个数码组成,二进制后加B表示,例如:1100.0011B
(3)十六进制
因为用二进制表示一个数要写很长很难记忆,所以引入了十六进制,十
六进制由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数
码组成,后边加H表示,例:39H,0ABH,
注意的是为了和其他字符分开,如果十六进制的第一位不是数字0-9而
是字符的话应在其前加0以示区别。
2.各数制之间的转换
(1) 常用的十进制数怎么用二进制和十六进制表示呢?这就是各数制之间的转换问题
15以内的数字可以直接看表1-1,大家最好能记熟15以内的转换。
十进制二进制十六进制
0 0000 0H
1 0001 1H
2 0010 2H
3 0011 3H
4 0100 4H
5 0101 5H
6 0110 6H
7 0111 7H
8 1000 8H
9 1001 9H
10 1010 0AH
11 1011 0BH
12 1100 0CH
13 1101 0DH
14 1110 0EH
15 1111 0FH
16 10000 10H
(2 ) 首先我们来看二进制转换成十进制
1011.011B=1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2)+1×2^(-3) =1×8+0×4+1×2+1×1+0×1/2+1×1/4+1×1/8
=11.375
既是将二进制数按2的幂指数展开,最后的计算结果即为十进制
(3) 同样,十六进制就可以按照16的幂指数展开即可。
例如:6EH=6×16^1+E ×16^0=96+14=110D
(4) 十进制转换为二进制
除2取余法
2|41
2|20 …1 最低位
2|10 0
2|5 0
2|2 (1)
2|1 0
0 …1 最高位
倒过来写就是101001也就是说41D=101001B
(5)十进制转换为十六进制
一种可以同上用除16取余法,也可以先转换为二进制,再由二进制转化为十六进制
(6)二进制和十六进制之间的转换
二进制到十六进制:整数部分从小数点左边第一位开始向左数,每四位转换为一位十六进制数,小数部分是从小数点右边第一位开始向右数每四位转换成一位十六进制数,不足部分用0补充。
例如:10 1101=0010 1101=2DH
01110001101.1100001=0011 1000 1101 . 1100 0010 =38D.C2H 十六进制数转换为二进制就直接一个数字转换为对应的四位二进制数即可。
3. 二进制负数的表示
计算机里的数据分为无符号数和有符号数,对于无符号数只记大小不管正负,对于有符号数就要考虑符号,但是计算机只能分辨0和1,不能区别“-”“+”就用二进制的最高位来表示正负,最高位为0时表示正数,最高位为1时表示负数。
此时最高位只表示正负,不表示大小。
比如:1011 1100B如果是无符号数则为0BCH,若是有符号数则表示-011 1100B,即为-3CH
有符号数的表示方法有以下4种:
(1)真值:实际的数
(2)原码:将符号用0,1表示的数
(3)反码:对于负数,反码是原码除了符号位之外的各位取反;正数的反码等于原码
(4)补码:负数的补码等于反码加1,正数的补码等于原码。
正数的原码=反码=补码
注意在计算机系统中负数总是以补码形式出现的。
4. 编码
由于计算机只认识0和1 ,而人类日常生活中要用到十进制0-9,还有英语字母a-z,A-Z等等计算机不能识别的字符,为了做到人机交互,就出现了编码,就是将人们常用的数字,字符用二进制的有序排列来表示,把这种用0,1表示其他信息的组合叫做编码。
常用的编码:
(1)二-十进制码(BCD码):8421码,余3码,格雷码等
(2)ASCII码
第二章单片机的基本组成及工作原理
2.1 单片机的基本组成及工作原理
2.1.1 程序—软件
2.1.2 硬件(存储器、CPU、I/O接口)
1.存储器:用来存放程序和数据
存储器由一个个存储单元组成,每个存储单元都是由寄存器组成,每个存储单元为8位即一个字节,每个存储单元都有自己唯一对应的地址。
存储器分随机存储器RAM和只读存储器ROM
RAM既可读又可写,掉电后内容丢失,相当于PC机的内存
ROM只能读,不能写内容固定,不会丢失
根据编程方式不同,ROM分为以下5种:
(1)掩膜ROM(Mask Rom):程序在芯片生产过程中完成,用户不能改变,适用于不需要修改程序的定型产品
(2)可编程ROM(PROM):芯片出厂时里面没有程序,程序由用户写入,但是只能写一次,一旦写人不能再修改,所以也称为一次可编程
ROM
(3)紫外线擦除可改写ROM(EPROM):允许反复用紫外线擦除后,重新写入
(4)电擦除可改写ROM(EEPROM):用电信号写入和擦除,可以通过读写操作对存储单元读出和写入,和RAM一样,只是比RAM慢,掉
电能保存信息
(5)快速电擦除可改写ROM(flashROM)
读写速度比EEPROM快
2.中央处理器CPU(运算器和控制器)
运算器包含算术逻辑运算单元,可以进行算术和逻辑运算。
在运算中会频繁使用CPU内部几个寄存器:累加器ACC,寄存器B等,并把运算结果特征状态放到程序状态字PSW中。
控制器从程序存储器中读取指令、分析指令,产生相应的控制信号,控制单片机系统做出各种动作,实现控制功能。
3.I/O接口
I/O接口单片机的输入输出接口,主要负责单片机与外设之间的交流。
51
单片机有4个8位的并行口,分别为P0,P1,P2,P3;还有两个串行口
P3.0,P3.1
4.单片机的基本组成图见课本图2-1
2.2 51单片机的存储器
2.2.1 51单片机存储器配置
单片机芯片内部集成了ROM和RAM(8031,8032等无片内ROM),当内部集成的不够用时还可以扩展外部ROM和RAM。
因此单片机的存储器在物理空间上分为四部分:内部ROM, 外部ROM,内部RAM,外部RAM
那我们在前面介绍了每个存储单元都有自己的地址,那么单片机的存储器又是怎么分配地址的呢?也就是说怎么编址的呢?并不是物理控制分四部分就按4组编址,也不是不分组统一编址,而是内部ROM 和外部ROM统一编址,而内部
RAM 和外部RAM分开编址,总共是三部分。
2.2.2 程序存储器ROM
以8051为例,内部ROM为4KB,内部RAM为256B,外部可扩展ROM和RAM 最大均为64KB。
内部RAM地址从00H-FFH;外部RAM地址从0000H-FFFFH
内部ROM地址为0000H-0FFFH,外部ROM地址为0000H-FFFFH
很显然,内部ROM和外部ROM地址有重叠,那么比如说访问0010H时究竟是访问片内的呢还是片外的呢,这就要根据单片机31引脚的电平来决定。
EA=0则为片外,EA=1则为片内,如果是地址高于4KB部分不论EA为何值都一定指的是片外ROM。
一般使用时如果程序不大于4KB则不需要扩展ROM,而直接将EA接电源;如果程序大于4KB则一般选用无片内ROM的单片机,以免资源浪费,此时EA直接接地。
2.2.3数据存储器RAM---------重点
单片机内部RAM地址为00H-FFH,外部为0000H-FFFFH,虽说有重叠部分,但是访问时是用不同的指令区分的,这个后续讲指令的时候会详细介绍。
除非需要处理的数据量很大比如在实时数据采集等场合,否则应该首先考虑充分利用片内数据存储空间。
单片机的内部RAM虽然容量不大,但是比较复杂功能强大,可以说学好了片内RAM就基本上掌握了单片机。
51系列各芯片的RAM容量和形式各不相同,下面以8051为例分析单片机的内部RAM。
8051内部RAM的256B按功能分为低128字节和高128字节。
其中低128字节功能没有特别规定供用户使用,高128字节为专用寄存器。
1.片内RAM低128字节
按用途分为三部分:通用寄存器区,位寻址区,堆栈和数据缓冲区
(1)通用寄存器区:00H-1FH32个单元分为4个组BANK0-BANK3,每组8个寄存器R0-R7,称为通用寄存器,也叫工作寄存器,正被使用的称
为当前工作寄存器组。
怎么选用哪一组为当前工作寄存器组呢?通过
程序状态字PSW中的第3,4位RS0,RS1决定
(2)位寻址区
片内RAM 20-2FH单元即可作为一般RAM 单元使用,也可以对其中每一位按位操作。
共16个单元合计128位位地址为00H-7FH。
(3)堆栈和数据缓冲区
剩下的30H-7FH的80个单元供用户随意使用,一般把堆栈开辟在此区。
2.专用寄存器区
8051中有22个专门用途的寄存器,称为专用寄存器或者特殊功能寄存器,
可寻址的有21个,零散的分布在80H-0FFH的高128单元中,见课本表2-3. (1)累加器A
使用最频繁的寄存器,8位,几乎所有运算A都参与。
(2) B寄存器
8位寄存器,主要用于乘除运算。
乘除运算主要用A,B两个寄存器,乘法运算时A为被乘数,B为成数,积的低8位放A中,高8位放B中;除法运算时,A为被除数,B为除数,商放A中,余数放B中。
B也可以做一般数据寄存器使用。
(3)程序计数器PC
16位,不可寻址,用来存放即将执行的指令的地址,因为是16位,所以最大寻址空间是2^16,即64KB。
PC指针会自动加1从而实现程序的顺序执行,用户不可以修改PC指针的内容,但是可以通过跳转指令实现程序的跳转。
(4)程序状态字PSW
件自动置1,否则清零;功能二:布尔处理机中做累加器
(2)AC辅助进位位
(3)F0用户标志位
(4)
(5)OV溢出标志位
(6)P奇偶校验位
(5)数据指针DPTR
16位,可分为两个8位寄存器DPH,DPL
2.3 单片机外围电路
2.3.1 时钟电路
2.3.2 复位电路
第三章单片机指令系统
3.3.2 片外数据存储器与累加器A之间的传送指令
指令有四条:
MOVX A, @DPTR; A←((DPTR)) 读指令
MOVX A, @Ri ; A←((Ri)) 读指令
MOVX @DPTR, A; (DPTR)←(A) 写指令
MOVX @Ri, A; (Ri) ←(A) 写指令
功能:实现片外数据存储器(或扩展I/O)与累加器A之间的数据传送。
说明:
(1)片外RAM与片内RAM之间的数据传输,片外RAM之间的数据传输,必须通过累加器A中转。
(2)寻址方式只能是寄存器间接寻址,参与间接寻址的寄存器只有Ri和DPTR,总共是3个。
一般经常用DPTR,用Ri时需要P2口配合使用(因为Ri是8位的寄存器只能寻址256个字节,所以高8位地址要由P2口决定)。
(3)单片机的扩展I/O的数据传输也通过该指令实现。
3.3.3 程序存储器向累加器A的传送指令
指令只有两条:
MOVC A, @A+PC ;A←((A)+(PC))
MOVC A, @A+DPTR ;A←((A)+(DPTR))
功能:从程序存储器中读取数据送入累加器A。
说明:
(1) ROM只能读不能写,所有数据传送是单向的,只能从ROM中读数据传送给累加器A
(2)因为片内ROM 和片外ROM是统一编址,所以内部ROM和外部ROM都用该指令访问。
(3)该指令主要用于查表,所以也叫做查表指令。
应用时用DPTR或PC确定表
MOV DPTR, #1000H
MOV A , #02H
MOVC A, @A+DPTR
3.4 算术运算指令
3.4.1 加法指令
1.不带进位的加法指令ADD
具体指令有4条:
ADD A, Rn ; A ← (A)+(Rn)
ADD A, direct ; A ← (A)+(direct)
ADD A, #data ; A ← (A)+data
ADD A, @Ri ; A ← (A)+((Ri))
功能:ADD指令把源操作数与累加器A的内容相加,结果存在累加器中。
该操作不改变源操作数,影响PSW中的C,AC,OV和P位。
说明:
(1) ADD指令的目的操作数只能是累加器A,且只有以上4种形式。
(2)指令中,参加运算的两个8位二进制数,即可看做是8位无符号数(0-255),也可以看做是7位有符号数的补码数(-128- +127)。
(3) ADD运算对PSW的影响:
C:如果最高位有进位则C置1,反之则清0;
AC:如果低4位向高4位有进位,则AC置1,反之则清0;
OV:如果位6有进位而位7没有或者位7有进位而位6没有,则OV置1,反之OV清0。
2. 带进位加法指令ADDC
具体指令有4条:
ADDC A, Rn ; A ← (A)+(Rn)+(C)
ADDC A, direct ; A ← (A)+(direct) +(C)
ADDC A, #data ; A ← (A)+data +(C)
ADDC A, @Ri ; A ← (A)+((Ri)) +(C)
功能:
该操作与ADD类似,只是PSW中的进位位C要参与运算。
带进位加法指令通常用于多字节数加法运算。
多字节数加法原则:
(1)多字节数求和,从低字节开始,最低字节相加用ADD指令,其他字节相加用ADDC指令;
(2)N字节数相加,结果可能是N+1字节数;
(3)为单独取得进位位的值用MOV A,#00H
ADDC A,#00H
3. 增量指令INC
指令有5条:
INC A ; A ← (A)+1
INC Rn ; Rn ← (Rn)+1
INC direct ; direct←direct+1
INC @Ri ; (Ri) ←((Ri))+1
INC DPTR ; DOTR ← (DPTR)+1
功能:
对A,Rn,内部RAM单元及数据指针进行加1操作,除INC A会影响P外,不影响任何标志位。
说明:若操作数为0FFH,执行指令后,将会变为00H,但是不影响进位位C。
4. 十进制调整指令
指令只有1条:
DA A
功能:
对累加器中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得的结果进行调整。
3.4.2 减法指令
1.带进位减法指令SUBB
指令共有4条:
SUBB A, Rn ; A ← (A)-(Rn)-(C)
SUBB A, direct ; A ← (A)-(direct) -(C)
SUBB A, #data ; A ← (A)-data -(C)
SUBB A, @Ri ; A ← (A)-((Ri)) -(C)
说明:
(1)MCS-51指令系统中,无不带进位(实为借位)的减法指令。
若进行不带借位的减法运算,需先将C清零。
(2)多字节相减,从低字节开始,最低字节相减时,应先将进位位C清零。
2.减1指令DEC
指令共有4条:
DEC A ; A ← (A)-1
DEC Rn ; Rn ← (Rn)-1
DEC direct ; direct←direct-1
DEC @Ri ; (Ri) ←((Ri))-1
说明:
(1)与INC 指令类似,但是没有DEC DPTR指令
(2)若原来为00H,执行指令后将变为0FFH,但是不改变进位位C。
3.4.3乘法指令
指令仅1条:
MUL AB
3.4.4 除法指令
1条指令:
DIV AB
3.5 逻辑运算及移位指令
3.5.1 逻辑运算指令
1. 逻辑与指令ANL
6条指令:
ANL A, Rn ;A ← (A)∧(Rn)
ANL A, direct ; A ← (A)∧(direct)
ANL A, @Ri ; A ← (A)∧((Ri))
ANL A, #data ; A ← (A)∧data
ANL direct, A ;direct← (direct)∧(A) ANL direct, #data ;direct← (direct)∧data
说明:
(1)该指令是按位进行的,对进位位没有影响
(2)该指令用于屏蔽某些位。
与0与清零,与1 与不变
2. 逻辑或指令ORL
6条指令:
ORL A, Rn ;A ← (A)∨(Rn)
ORL A, direct ; A ← (A) ∨(direct)
ORL A, @Ri ; A ← (A) ∨((Ri))
ORL A, #data ; A ← (A) ∨data
ORL direct, A ;direct← (direct) ∨(A) ORL direct, #data ;direct← (direct) ∨data
用来给某些位置1
与0或不变,与1或置1
3.逻辑异或指令XRL
6条指令:
XRL A, Rn ;A ← (A)⊕(Rn)
XRL A, direct ; A ← (A) ⊕(direct)
XRL A, @Ri ; A ← (A) ⊕((Ri))
XRL A, #data ; A ← (A) ⊕data
XRL direct, A ;direct← (direct) ⊕(A) XRL direct, #data ;direct← (direct) ⊕data
用于对某些位取反
与0异或不变,与1异或取反
自身异或等效于清零
4.累加器清零指令CLR
CLR A
5.累加器取反指令CPL
CPL A
3.5.2位移指令
1.循环左移
RL A
2.循环右移
RR A
3.带进位循环左移
RLC A
4.带进位循环右移
RRC A
3.6位操作指令
3.6.1 位传送指令
MOV C, bit ; C ← (bit) MOV bit,C ; bit ← (C)。