单片机(MCU)是典型的嵌入式微控制器,通过在IC芯片上集成运算器、控制器以及IO接口,也就相当于一个小而完善的微型计算机系统。单片机的学习可以和计算机组成原理、汇编语言、微机原理与接口技术和计算机体系结构等计算机专业课程有机结合,加深对于硬件的理解。本次上手实验,我使用的是普中51开发板,以下是我在学习和实战过程中的整理总结。
单片机预备知识
电平特性:数字电路只有两种电平(高和低)
- 单片机TTL电平:高+5V、低0V
- RS232电平(计算机的串口):高-12V、低+12V
- 计算机与单片机之间通讯时需要加电平转换芯片max232
二进制:由数字电路中的两种电平特性决定
十六进制:二进制的简短表示方式(四个二进制转换成一个十六进制),例:0001B -> 1H
二进制的逻辑运算
- ”与“运算:
·
- “或”运算:
+
- ”非“运算:
〒
- “异或”运算:
⊕
- ”与“运算:
位运算符:
>>
位右移、<<
位左移、&
按位与、|
按位或、^
按位异或、~
按位取反C51数据类型扩充定义
- sfr:特殊功能寄存器声明
sfr SCON = 0X98;
- sfr16:sfr的16位数据声明
sfr16 T2 = 0xCC;
- sbit:特殊功能位声明
sbit 0V = PSW^2;
- bit:位变量声明
bit flags
- 一般来说
char
定义单个字符,unsigned char
定义数组
- sfr:特殊功能寄存器声明
C51头文件:
reg51.h
、reg52.h
(定义特殊功能寄存器和位寄存器),math.h
(定义常用数学计算),ctype.h
、stdio.h
、stdlib.h
、absacc.h
单片机介绍
- 单板机:将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备装配在一块印刷电路板上,将监控程序固化在ROM中,从而构成的单板微型计算机
- 单片机:在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成的单芯片微型计算机
- Intel MCS-51系列单片机:集成8位CPU、4K 字节 ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,有控制功能较强的布尔处理器
- 总线(BUS):计算机各部件之间传送信息的公共通道
- 内部总线:CPU内部之间的连线
- 外部总线:CPU与其他部件之间的连线。外部总线分为:数据总线DB(Data Bus)、地址总线AB(Address Bus)、控制总线CB(Control Bus)
- CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器
- RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据
- ROM:用以存放程序、一些原始数据和表格
- I/O 口:四个 8 位并行 I/O 口,既可用作输入,也可用作输出
- T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在计数模式
- 五个中断源的中断控制系统
- 一个全双工 UART(通用异步接收发送器)的串行 I/O 口,用于实现单片机之间或单片机与微机之间的串行通信
- 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为 6M—12M
- 80C51系列:以8051为基核开发出的CMOS工艺单片机,是MCS-51系列中的一个典型品种
中断服务程序
1
2函数名() interrupt n using m
{ 函数内部实现; }I/O口定义:
sbit beep = P2^3;
单片机最小系统能够运行起来的必要条件:
- 电源电路
- 晶振电路(提供时钟脉冲)
- 复位电路(提供系统复位操作)
对单片机任意IO口的随意操作:1.输出控制电平高低、2.输入检测电平高低
定时器
- 中断:外部中断、定时器中断、串口中断
- 串口通信:单片机之间、单片机与计算机间
KEIL C51软件和51硬件仿真器
1
2
3
4
5
6
7
void main()
{
while(1)
{
}
}
点亮发光管
GPIO(genral purpose intput output):通用输入输出端口,可以通过软件来控制其输入和输出
51单片机芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、 控制以及数据采集的功能
STC89C52的引脚
- 电源引脚:VC、 GND
- 晶振引脚:XTAL1、XTAL2
- 复位引脚:RST、VPD,不做其他功能使用
- 串口功能引脚:TXD、RXD,可以作为下载引脚使用
- GPIO 引脚:带有
Px.
字样的均属于 GPIO 引脚 - 同一时刻,每个引脚只能使用该引脚的一个功能
上下拉电阻的作用:
- 上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻起到一个限流的作用,下拉就是下拉到低电平
- OC门要输出高电平,外部必须加上拉电阻
- 加大普通IO口的驱动能力
- 起到限流的作用
- 抵抗电磁干扰
GPIO外围电路
- 当I/O口被用作输入用途时,读取输入前要保证锁存器状态为 1
- 当将I/O口由低拉高时,指令执行后需要1~2个机器周期才能使实际的输出变成高电平
- 51 单片机所有 IO 口都是双向的,即可以作为输入也可以作为输出使用
- 由于 P0 口是漏极开路的,所以要操作 P0 口必须外接上拉电阻,其他P1、P2、P3 口都内部自带上拉电阻,可以不加,如果要增强 IO 口驱动能力,可以外接上拉电阻
LED:发光二极管,具有单向导电性,通常在LED管脚上串联一个限流电阻
发光二极管发光时两端电压约为1.7V,这个电压又叫做发光二极管的“导通压降”
对于 LED 这种一次性操作的器件来说,可以把控制语句放在
while
之前来执行Code
表示程序所占用 FLASH 的大小,dat
表示数据储存器内部 RAM 占用大小,xdat
表示数据储存器外部 RAM 占用大小程序的大小不是
.hex
文件的大小,而是编译后的 Code 和 dat 之和LED闪烁(延时函数)
移位函数:左移
_crol_()
、右移`_cror()`函数(实现LED流水灯)
其他实验
- 由于篇幅关系,其他实验程序代码放在 Github 仓库中,可供参考,如需自取。