二、51单片机简介
单片机介绍
单片机简介
- 将CPU、RAM(内存)、ROM(硬盘)、输入/输出设备做到一块集成电路芯片中,这就被称为单片机,也称微控制器(MCU)
- 51单片机是对所有兼容Intel 8031指令系统单片机的统称
芯片介绍
STC89C52RC
40I-PDIP40
名称介绍
-
STC:厂商名称
-
8:是一个8051内核的芯片
-
9:封装了一个存储器,用于断电数据不丢失的(7是封装了一个紫外线功能)
-
C:cmos的产品(LV、LE说明是一个低电压芯片3.3v,S表示有一个可串行下载功能)
-
5:固定不变,表示51单片机
-
2:存储大小,8kb(1是4kb,3是16kb,以此类推)
-
RC:内存大小,512字节(RD是1024字节)
-
40:外部的晶振最大可以接入40M
-
I:工业级,可接受的温度为 -40度到85度(C:商业级,0度到75度;M:军用级, -55度到150度)
-
PDIP40:封装类型,双面直插,40个针脚
STC单片机脚位判断
找到芯片上的凹槽,凹槽左边第一个脚就是第1脚,然后逆时针向下数,直到凹槽右边的第40脚
管脚说明
通常分为四类
- 电源引脚。如VCC、GND
- 时钟引脚。如XTAL1、XTAL2
- 编程控制引脚。如RST、PSEN、ALE/PROG、EA/Vpp(了解即可)
- I/O口引脚。如P0、P1、P2、P3、P4,四组8位I/O口
VCC(40脚)、GND(20脚):电源引脚,不同型号的单片机接入对应的电压,常压为5v,低压位3.3v,使用是注意芯片要求的电压
XTAL1(19脚)、XTAL2(18脚):外接时钟引脚。XTAL1为片内震荡电路的输入端,XTAL2为片内震荡电路的输出端
RST(9脚):复位引脚。单片机从头开始工作
PSEN(29脚):程序存储器允许输出控制器,了解即可
P0 口(39 脚~32 脚):双向 8 位三态 I/O 口,每个口可独立控制。51 单片 机 P0 口内部没有上拉电阻,若输出高时为高阻态,不能正常输出高电平,因此 该组 I/O 口,每个口可独立控制。51 单片机 P0 口内部没有上拉电阻,若输出高 时为高阻态,不能正常输出高电平,因此该组 I/O 口在使用时务必要外接上拉电 阻,一般我们选择接入 10K 欧上拉电阻。
P1 口(1 脚~8 脚):准双向 8 位 I/O 口,每个口可独立控制,内部自带上拉 电阻,这种接口输出没有高阻态,输入也不能锁存,故不是真正的双向 I/O 口。 之所以称它为“准双向”是因为该口在作为输入使用前,要先向该口进行写 1 操作,然后单片机内部才可正确读出外部信号,也就是要使其先有个“准”备的 过程,所以才称为准双向口。对 52 单片机 P1.0 引脚的第二功能未 T2 定时器/ 计数器的外部输入,P1.1 引脚的第二功能为 T2EX 捕捉、重装触发,即 T2 的外 部控制端。
P2 口(21 脚~28 脚):准双向 8 位 I/O 口,每个口可独立控制,内部自带上 拉电阻,与 P1 口相似。
P3 口(10 脚~17 脚):准双向 8 位 I/O 口,每个口可独立控制,内部自带上 拉电阻。作为第一功能使用时就当做普通 I/O 口,与 P1 口相似。 作为第二功能 使用时,各引脚的定义如下
数字电路与C
电平特性
单片机是一种数字集成芯片,只有两种电平,高电平和低电平
高电平 +5v,等价于逻辑1;低电平0v,等价于逻辑0
TTL电路和CMOS电路逻辑电平关系
-
VOH:逻辑电平 1 的输出电压,5v
-
VOL:逻辑电平 0 的输出电压,0v
-
VIH:逻辑电平 1 的输入电压
-
VIL:逻辑电平 0 的输入电压
TTL电平临界值:
VOHmin=2.4V(输出高电平的最小值2.4V),VOLmax=0.4V(输出低电平的最大值0.4V)。
VIHmin=2.0V(输入高电平最小值要到2.0V),VILmax=0.8(输入低电平最大值不超过0.8V)
CMOS电平临界值(假设电源电压为+5V):
VOHmain=4.99V,VOLmax=0.01V
VIHmin=3.5V,VILmax=1.5V
二进制与十六进制
二进制:逢二进一,借一当二;如果一个数是二进制数,可以在后面加上 B
常用的十进制转二进制:
十进制 | 二进制 |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 | 1111 |
十六进制
逢十六进一,借一当十六。十六进制的015表示成十六进制为:09、A、B、C、D、E、F
在代码中写十六进制要加上前缀:0x或0X
十进制 | 二进制 | |
---|---|---|
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
二进制的逻辑运算
与运算
都为真才为真,只要有一个为假就是假
0&0=0
1&0=0
1&1=1
或运算
都为假才为假,只要有一个为真就是真
0|0=0
0|1=1
1|1=1
非运算
对结果取反
!0=1
!1=0
同或运算
必须相同才为真,否则为假
0和0为1
0和1为0
1和1为1
1和0为0
异或运算符
必须不同才为真,否则为假
1^1=0
1^0=1
0^0=0
0^1=1
C51基础
C51扩充数据类型
这些是在c语言中没有的类型,是单片机自带的
类型 | 长度 | 值域 | 说明 |
---|---|---|---|
bit | 1位 | 0或1 | 位变量声明 |
sbit | 1位 | 0或1 | 特殊功能位声明(例如定义管脚) |
sfr | 1字节 | 0~255 | 特殊功能寄存器声明 |
Sfr16 | 2字节 | 0~65535 | Srf的16位数据声明 |
* | 1~3字节 | 对象的地址 |
存储器类型
数据存放的位置
存储器类型 | 描述 |
---|---|
data | 直接寻址的片内RAM低128B,访问速度快 |
bdata | 片内RAM的可为寻址区(20H~2FH),允许字节和位混合访问 |
idata | 间接寻址访问的片内RAM,运行访问全部片内RAM |
pdata | 用Ri间接访问的片外RAM的低256B |
xdata | 用DFTR间接访问的片外RAM,允许访问全部64k片外RAM |
code | 程序存储器ROM64k空间 |
位运算
注意:只能对整型数据进行操作,不能对浮点型进行操作
&按位与
| 按位或
- ^ 按位异或
- 按位取反
<< 左移
>> 右移
左移:
假设有二进制 a=1001 1010,左移两位,a<<2
第一次左移:001 1010,空出来的一位自动补0:0011 0100
第二次左移:011 0100,空出来的一位自动补0: 0110 1000
所以 a<<2=0110 1000
右移与左移基本相同,只不过方向换一下
复合赋值
a+=1;a-=1;a>>=1;等等
逗号运算符
表达式1,表达式2,表达式3,...,表达式n
最终结果是表达式n计算出来的值
例如:
x=(a=3, 6*3)
x的结果为18,也就是最后这个表达式6*3计算的值
三目运算符
逻辑表达式?表达式1:表达式2
当逻辑表达式的值为真,则返回表达式1的值,否则返回表达式2的值
指针
* :指针运算符
& :取址运算符
定义一个int类型的指针变量:int * p;
定义指针时最好对指针进行初始化,令他指向空:int *p = NULL;
再定义一个int类型的数据并初始化:int a = 100;
利用取址运算符把变量a的地址赋值给指针变量p:p = &a;
可以用*解引用查看指针变量指向的地址中的值:printf("%d", *p);
我们修改指针p指向的值时,变量a指向的值也会跟着修改,因为两个变量指向的是同一个地址
51单片机最小系统
构成
晶振电路
复位电路
电源电路
下载电路(不用这个电路单片机也可以正常运行,但是无法给系统下载我们写的程序)
晶振电路
就想人的心脏,无时无刻为单片机提供运行的时钟周期
复位电路
使单片机重新开始运行
电源电路
为单片机提供5v的电压进行供电
下载电路
USB转TTL的芯片,利用电脑连接开发板,进行下载
51单片机工程模板创建
在电脑上创建一个文件夹,取任意名称,例如:51单片机工程模板
打开Keil软件,点击Project,在点New Vision Project
找到之前创建的文件夹,在输入文件名,点击确定
选择芯片类型,选择Atmel下面的类型,89c51和89c52都可以
选好或会询问是否添加启动文件到项目中,选择否
创建好后如图
右键Source Group 1,选择Add New Item to Group ‘Source Group1’...
选择文件类型为c,输入文件名为main,最后点击Add
源文件创建好后如图
点一下魔术棒,选择Output,把Create HEX File勾选上,这样我们编译源码后会生成hex文件,有了这个文件我们才可以下载到单片机中实现效果
51单片机GPIO介绍
GPIO概念
GPIO(general purpose inptput optput)是通用输入输出端口的简称,可以通过软件来控制其输入和输出
Px.x的就是GPIO引脚,例如P1.0、P1.1
管脚说明如下