51单片机自学笔记

文章目录

  • 前言
  • 数据类型
  • 周期
  • 芯片
      • 段选锁存器
      • ADC0804
  • 中断
      • IE:中断允许寄存器
      • IP:中断优先级寄存器
          • 优先级别
      • TMOD:定时器工作方式寄存器
      • TCON:定时器控制寄存器
      • THX,TLX计算方法
      • 定时器/计数器高级应用
          • 方式0
          • 方式2
          • 方式3
      • 52单片机特有的定时器2
      • 计数功能的应用
  • 数码管
      • 单数码管
      • 多数码管
  • 按键
      • 独立按键
      • 矩阵按键
  • 串行口通信
      • 工作方式
      • SCON:串行口控制寄存器
      • 单片机发送
      • 单片机接收
      • 高级应用
          • 方式0
          • 方式2,3
  • I^2^C通信
      • 传输过程
      • 51单片机模仿I^2^C总线
  • SPI通信
  • 数模转换
      • 参数指标
  • ESP8266WIFI模块

前言

目前正在准备写一个51单片机库,希望能实现51的大多数功能,此博客对应代码已存在码云,https://gitee.com/smalkang/library_51.git 希望大家多多指正。

数据类型

sfr–特殊功能寄存器的数据声明,声明8为寄存器
sfr–声明16位
sbit–特殊功能位声明,也声明某特殊功能寄存器某一位
bit–位变量声明

周期

  • 时钟周期:时钟频率倒数
  • 状态周期:时钟周期二倍
  • 机器周期:单片机基本操作周期,由12个时钟周期组成
  • 指令周期:执行一条指令周期的时间(一般一个指令周期1~4个机器周期)

芯片

段选锁存器

OE–GND
LE :高点平:锁死
低电平: 跟随输入端

ADC0804

AGND与DGND区别
为了提高控制精度,可以数字地与模拟地分开,最后通过一点连接
芯片说明与数模转换原理

中断

IE:中断允许寄存器

位符号 1 意义
EA 全局中断
ET2 定时器2
ET1 定时器1
ET0 定时器0
EX1 外部1
EX0 外部0
ES 串行口

IP:中断优先级寄存器

优先级别

默认:

  1. 外部0–INT0
  2. 定时器0–T0
  3. 外部1–INT1
  4. 定时器1–T1
  5. 串行口–TI/RI
  6. 定时器2–T2
位符号 意义
PS 串行口
PT1 定时器1
PT0 定时器0
PX1 外部1
PX0 外部0

TMOD:定时器工作方式寄存器

TMOD不能位寻址,所以必须用十六进制表示

位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T`` M1 M0 GATE C/T` M1 M0
定时器1 定时器0
位符号 意义
GATE 门控制器
C/T` 定时器与计数器选择
M1,M0 工作模式选择
M1 M0 工作方式 解释
0 0 0 13位定时器/计数器
0 1 1 16位
1 0 2 8位初值自动重装的定时器/计数器
1 1 3 仅用于T0,分为两个8位计数器,T1停止计数

TCON:定时器控制寄存器

位符号 意义
定时器/计数器
TF(0/1) 溢出标志位
TR(0/1) 运行控制位
外部中断
IE(0/1) 中断请求标志
IT(0/1) 触发方式选择位

THX,TLX计算方法

THX=(216 - 预定时间/机器周期) / 28
TLX=(216 - 预定时间/机器周期) % 28

定时器/计数器高级应用

一般的定时器工作方式为1:16位包含THX,TLX两个八位寄存器

方式0

TLX高三位没用
THX=(213 - 预定时间/机器周期) / 25
TLX=(213 - 预定时间/机器周期) % 25
对25取模因为第八位只用了5位

方式2
  • 8位初值自动重装
  • 当TLX溢出时,溢出位TFX=1,将THX值自动赋给TLX,此时THX装的是定值,全程作用是自动给TLX赋初值,用于高精度的定时
    也就是说代码中没有每次清中断时THX=?;TLX=?;的操作,单片机自动完成,减少这两行代码执行时候产生的时间误差。
  • 此时晶振频率选用12整数倍的,才不会产生机器误差,11.0592MHZ符合要求,实际中12MHZ记时效果更好
方式3

T1不计数,因为TH0占用了TF1;T0分为两个八位计数器。但此时T1仍然可以用于串口中断

52单片机特有的定时器2

位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2’ CP/RL2
意义 定时器2溢出标志位 定时器2外部标志 接收时钟标志 发送时钟标志 外部使能标志 定时器2启动/停止控制位 T2的定时器/计数器选择位 捕获/重装标志

3种工作模式

RCLK+TCLK CP/RL2 TR2 模式
0 0 1 16位自动重装
0 1 1 16位捕捉
1 X 1 波特率发生器
X X 0 关闭

计数功能的应用

数码管

单数码管

每根管对应一位,直接用十六进制表示

多数码管

先段选显示数字,再位选。
段选时候可以加锁存器防止闪烁,位选时候用38译码器选择八位,各个位之间不能同时亮,可以延时加交替实现。

按键

根据按键连接方式不同需单独处理

独立按键

  • 上拉电阻检测低电平平
  • 接GND,先发高电平,检测到低电平
    注意:
  1. 两次检测,消抖
  2. 加while();,直到按键抬起时标记按下。

矩阵按键

16键的话,行列对应高低四位。

  1. 先发送0xf0当检测到不是该值时说明该行有被按下的。
  2. 再发送0x0f当检测到不是该值时说明该列有被按下的。
  3. 坐标确定。

串行口通信

OPENDEV对SPI,IIC,UART的讲解

工作方式

方式 波特率
0 晶振频率/12
1 2SMOD /32 * (T1溢出率)
2 2SMOD /64 * 晶振频率
3 2SMOD /32 * (T1溢出率)

其中方式1,3波特率可变。
SMOD属于电源管理寄存器PCON的首位,值为0时波特率正常 ,1时波特率为2倍。
由波特率计算初值类似于中断计算,不过选用T1且工作方式为2,八位计数。
溢出率为T1溢出一次用时间的倒数

通常用11.0592MHZ晶振为了计算出来初值为整数,减少传输丢失

SCON:串行口控制寄存器

可以位寻址

D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
多机通信控制位 允许接收 方式2,3发送第9位 方式2,3接收第九位 发送中断标志位 接收中断标志位
SM0 SM1 方式 说明
0 0 0 同步移位寄存方式
0 1 1 10位异步收发(8位数据),波特率可变
1 0 2 11位(9位数据),波特率固定
1 1 3 11位(9位数据),波特率可变

单片机发送

  • 发送16位数字实际先顺序发送低8位,再发送高8位
  • 可直接while(TI==0);代表发送一个8位字节结束再发送下一字节

单片机接收

  • 接收需要在中断中设置RI=0;因为接受完一个字节单片机自动置1,需要手动归0
  • 接收发送同时进行时,需设置标志位,保证接收发送不同时进行,不然死循环

高级应用

方式0

同步移位寄存方式,并不是同步串口通信方式,用于拓展并行输入输出口。
波特率固定为频率/12
此处可以结合74HC165,74HC595芯片进行IO口扩展(该扩展也可以直接while(1)里,只是为了更有时序性)
编码时,只需要设置SCON方式0,注意REN,RI,TI。(发送或就收一个字节后就会触发中断,此时TI或RI为1,中断标志成立)

方式2,3

最大不同就是数据位变为11位

I2C通信

传输过程

SCL:时钟线
SDA:数据线
正常情况下SCL高电平时读取SDA,低电平时SDA0,1数据变化

  1. 发送启动信号:SCL高,SDA出现下降沿
  2. 发送寻址信号:器件地址分为7位和10位,7位时:发送一个字节,高7位为从机地址,最后1位为方向。
0 1
主机对从机写 主机对从机读
  1. 接收设备发送应答信号:SCL高电平,接收设备将SDA拉低
  2. 传输数据,类似于发送地址,接收器接到1个字节也要发送应答信号
  3. 当主机变为接收方时,主机对最后一个字节不应答,告诉从机发送结束
  4. 当主机为发送方时,发送停止信号表示发送结束:SCL高,SDA上升沿。

51单片机模仿I2C总线

51没有硬件I2C总线控制单元,软件控制时需严格遵循时序图

IIC时序助记

SPI通信

参考链接

数模转换

参数指标

  1. 分辨率:数字信号位数决定
  2. 转换误差:一般小于最低位的一半
  3. 转换精度
  4. 转换时间

该单片机采用XPT2046芯片,用SPI传输
参考
对于该芯片,根据控制寄存器信息:
如果要检测转换电位器模拟信号,控制字命令寄存器值为0X94或者0XB4.
如果要检测转换热敏电阻模拟信号,控制字命令寄存器值为0XD4.
如果要检测转换光敏电阻模拟信号,控制字命令寄存器值为0XA4.
如果要检测转换AIN3通道上模拟信号,控制字命令寄存器值为0XE4.

ESP8266WIFI模块

非常不错的参考
另一篇博客单独介绍

你可能感兴趣的:(单片机)