数码管静态显示

使用定时器的方法

  1. 设置特殊功能寄存器TMOD,配置好工作模式
  2. 设置计数寄存器TH0和TL0的初值
  3. 设置TCON,通过TR0置1来让定时器开始计数
  4. 第四判断TCON寄存器的TF0位,检测定时器溢出情况

TCON——定时器控制寄存器的位分配(地址0x88, 可位寻址)

7 6 5 4 3 2 1 0
符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
复位值 0 0 0 0 0 0 0 0

TCON——定时器控制寄存器的位描述

符号 描述
7 TF1 定时器1溢出的标志, 一旦定时器1发生溢出时硬件置一, 清零有两种方式:软件清零,或者进入定时器中断时硬件清零
6 TR1 定时器1运行控制位, 软件置位/清零来启动/停止定时器
5 TF0 定时器0溢出标志, 一旦定时器0发生溢出时硬件置1, 清零有两种方式:软件清零, 或者进入定时器中断时硬件清零
4 TR0 定时器0运行控制位, 软件置位清零来启动/停止定时(1启动 0停止)器
3 IE1
2 IT1
1 IE0
0 IT0

TMOD——定时器模式寄存器的位分配(地址0x89, 不可位寻址)

7 6 5 4 3 2 1 0
符号 GATE(T1) C/T(T1) M1(T1) M0(T1) GATE(T0) C/T(T0) M1(T0) M0(T0)
复位值 0 0 0 0 0 0 0 0

TMOD——定时器模式寄存器的位描述

符号 描述
T1/T0 标T1的表示控制定时器1的位, 标T0表示控制定时器0的位
GATE 该位置1时为门控位, 仅当’INT0’脚为高并且TR0控制位被置1时使能定时器0, 定时器开始计时, 当该位被清零时, 只要TR0被置1, 定时器0就使能开始计时, 不受单片机引脚INT0外部信号的干扰, 常用测量外部信号脉冲宽度, 这是定时器一个额外功能
C/T 定时器或计数器选择位, 该位被清零时用作定时器功能(内部系统时钟), 被置1作用计数器功能

计算TH0的秒数方法:

  • (a x 12) / 11059200 = 计算的秒数
  • 然后再减 b = 65536 – a, b转16进制就是TH0和TL0的值

IE———中断使能寄存器的位分配(地址0xA8, 可位寻址)

7 6 5 4 3 2 1 0
符号 EA —— ET2 ES ET1 EX1 ET0 EX0
复位值 0 —— 0 0 0 0 0 0

IE——中断使能寄存器的位描述

符号 描述
7 EA 总中断使能位,相当于总开关
6 —— ————————————————
5 ET2 定时器2中断使能
4 ES 串口中断使能
3 ET1 定时器1中断使能
2 EX1 外部中断1使能
1 ET0 定时器0中断使能
0 EX0 外部中断0使能

中断查询序列

中断函数编号 中断名称 中断标志位 中断使能位 中断向量地址 默认优先级
0 外部中断 IE0 EX0 0x0003 1(最高)
1 T0 TF0 ET0 0x000B 2
2 外部中断 IE1 EX1 0x0013 3
3 T1 TF1 ET1 0x001B 4
4 UART TI/RI ES 0x0023 5
5 T2 TF2/EXF2 ET2 0x002B 6

x * 8 + 3 = 中断向量地址转10进制

IP——中断优先级寄存器的位分配(地址0xB8, 可位寻址)

7 6 5 4 3 2 1 0
符号 —— —— PT2 PS PT1 PX1 PT0 PX0
复位值 —— —— 0 0 0 0 0 0

IP——中断优先级寄存器的位描述

符号 描述
7 —— 保留
6 —— 保留
5 PT2 定时器2中断优先级控制位
4 PS 串口中断优先级控制位
3 PT1 定时器1中断优先级控制位
2 PX1 外部中断1中断优先级控制位
1 PT0 定时器0中断优先级控制位
0 PX0 外部中断0中断优先级控制位

CPU 时序有关知识

  1. 振荡周期
    • 有12MHz 和11.0592MHz

    • 以12MHz为例:振荡周期为: 1/2 us

  2. 状态周期
    • S = 1/6 us

  3. 机器周期
    • I = 1 us = 12 x T , 也就是一个机器周期等于12个振荡周期, 或者6个状态周期

  4. 指令周期
    • 指定周期为1~4 us

单片机串口介绍

串口相关寄存器

串口控制寄存器SCON

7 6 5 4 3 2 1 0
字节地址:98H SM0 SM1 SM2 REN TB8 RB8 TI RI SCON
SM0 SM1 方式 说明 波特率
0 0 0 移位寄存器 fosc/12
0 1 1 10位异步收发器(8位数据) 可变
1 0 2 11位异步收发器(8位数据) fosc/64或fosc/32
1 1 3 11位异步收发器(9位数据) 可变

SM2 是用来多机通信的控制位

当使用SM2 工作模式就要处于方式2 和方式3

  • 当SM2 等于1时:
    可以利用收到的RB8来控制是否激活RI,RI是一个接收中断

    • 当RB8 等于0时:
      表示不激活RI, 收到信息就丢弃

    • 当RB8 等于1时:
      收到的信息就会进入SBUF 缓冲器当中并激活RI, 从而接收这个数据

  • 当SM2 等于0时:
    无论收到的RB8 等于0 还是等于1 均都可以让数据进入SBUF 缓冲器里

  • 当使用多机通信时需要用到RB8 所以需要9位数据

REN 是允许接收位 用软件置1

  • 当REN 设置为0 时禁止接收, 当REN设置为 1时可以接收

TB8 是工作在方式2 和方式3的时候是用来发射数据的第九位

RB8 是工作在方式2 和方式3的时候是用来接收数据的第九位

TI 是一个发射中断标志位

  • 当方式0 的时候当串型接收第八位结束的时候或者是其他位停止的时候由内部硬件置1,TI 置1 就会向CPU 发送中断请求, 在中断服务程序必须用软件来置0

RI 是接收中断标志位

  • 在方式0 的时候, 当串型接收第八位结束的时候或者是其他位停止的时候由内部硬件置1 然后向CPU 发送一个中断申请, 也必须在中断服务程序中置0

电源控制寄存器 PCON

7 6 5 4 3 2 1 0
字节地址:97H SMOD PCON

方式0

RXD:数据发送和接收

TXD:移位脉冲

方式1(主要使用)

TXD:发送(输出)引脚——输出

  • 输出数据的八位(低位到八位)加上起始位和停止位, 一共八位

  • 停止位结束后TI 硬件置1, 发送中断完成, 向CPU发送中断的请求, 中断服务函数时我们可以手动将TI置1

RXD:接收(输入)引脚——输入

  • 结束接收后RI置1, 需要把RI 置0

先将REN 这个中断使能位置1

  • 当RI等于0 时, 且SM2 等于0 ,这是将接收到的9位数据的前八位接收到我们的SBUF当中(单片机串口内部自动完成置1,不需要我们操作)

方式2 3

TXD:发送引脚

RXD:接收引脚

和方式1不同, 他是11位的有9位数据

计算波特率

  1. 方式0 的波特率 = fosc/12
  2. 方式2 的波特率 = (2SMOD/64) * fosc
  3. 方式1 的波特率 = (2SMOD/32) * (T1 的溢出率)
  4. 方式3 的波特率 = (2SMOD/32) * (T1 的溢出率)

其中 T1 溢出率 = fosc / {12 x [256 – (TH1)]}

原文地址:http://www.cnblogs.com/xgc030920/p/16821048.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性