草庐IT

普中51-单核-A2单片机

amingMM 2024-05-27 原文

普中51 - 普中51

https://www.bilibili.com/video/av286413345/

功能与使用 介绍

单核A2产品
基于STC89C52 STC89Cxx 芯片
宏晶公司推出的增强型 51 单片机STC89Cxx/STC90Cxx 等系列更受大众喜爱
低功耗,高性能的51内核的CMOS 8位单片机

产品的 A6/7 双cpu
STC8A STM8M

内部资源及功能大大增强外
支持 ISP(在系统可编程)/IAP(在应用可编程),
无需专用编程器或专用仿真器。
宏晶公司推出的 51 芯片种类非常多

STC–表示芯片为 STC 公司生产的产品,其他公司的也有 AT、i、SST 等
8–表示该芯片为 8051 内核芯片
9–表示内部含有 Flash EEPROM 存储器,
还有
如 80C51 中 0 表内部含有MaskROM(掩模 ROM)存储器;
如 87C51 中 7 表示内部含有 EPROM(紫外线可擦除ROM)存储器。

C–表示该器件为 CMOS 产品。
还有如 89LV52 和 89LE58 中的 LV 和 LE 都表示该芯片为低电压产品
(通常为 3.3V 电压供电);
而 89S52 中 S 表示该芯片含有可串行下载功能的 Flash 存储器,
即具有 ISP 可在线编程功能。

5–固定不变。
2–表示该芯片内部程序存储(FLASH)空间大小,
1 为 4KB,2 为 8KB,3 为12KB,即该数乘以 4KB 就是芯片内部的程序存储空间大小。
程序空间大小决定了一个芯片所能装入执行代码的多少。
一般来说,程序存储空间越大,芯片价格也越高,
所以我们再选择芯片的时候要根据自己需求选择合适芯片

功能模块

  • 数码管 四位一体
    共阴极

  • 数码管 驱动电路(不能直接用 单片机 管脚来驱动)

大的 : 74hc245 CMOS高速收发器 输出 作为 数码管 段选 信号
小的 : 74HC138 高速CMOS器件 74HC138译码器
八个数码管的片选
节约 iO口资源

CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)

  • LCD1602液晶显示器 接口

    显示 数字 字符

  • LCD9648 液晶屏

  • LCD12864
    带字库/不带字库
    字库芯片

  • 电位器

    1602 对比度
    (对应 电压管脚)

  • LED 8*8 点阵


64 个 灯(内部电路 很明白 清楚)(初学易学)

或者 市场上 8*8集成点阵 (带控制引脚)
比较 不太好 初学

  • io拓展 芯片 74HC595
    8位串行输入、并行输出的位移缓存器
    串转并
    3个管脚 拓展 8个(剩下的 8 个 通过 单片机io口)
    节约io口

  • 跳线帽 短接片

595 有一个 使能 管脚控制 切换

默认 接 GND 右 (左边 VCC)
处于 一直工作 状态 有效
使得 管脚 有 默认 的 输出电平
使得 点阵 发光

对应 丝印

  • LED 模块

    简单 io口 操作
    用 LED灯 练习基本 IO口 使用
    用来 调试 程序

  • 4*4 矩阵键盘

独立 按键 一个 io口 一个 按键 (另一端接地)
根据 监测 io口 电平状态 就能 按键功能检测

单片机总共 32 io口

矩阵 4*4 (既要检查 行 又要 检测 列)
(也可以拆分成 独立按键)
8个io口可以解决
有效的 拓展 按键数量 (输入)

1602显示器(输出)2*16 = 32 字符
02说明 2行
16能显示16个字符(数字,字符)

12864/9648中文 汉字 图形
96 液晶屏像素点 一行
有48 个 行

每一行128点
每一列64点

通常 汉字有 16*16 个像素点

1602 用 5*7

汉字为 两个 字符 大小
128/16 == 8 个 汉字
64/16 = 4

字符
16个 一行

  • ds18b20 温度传感器

  • 红外 接收头

    注意凸起 丝印 ------ 不然容易 电源短路烧掉 传感器/芯片

  • 2.4G 接口

nRF24L01 模块

两个模块 通信

500m左右 通信距离

  • 电源 输出 管脚

    配置 为 系统的 电源
    给外部传感器 供电 插针

3.3 gnd 5v

外部电源

从 usb 供电口 供电

  • 稳压芯片 将5v 转成 3.3(wifi , 蓝牙 ,2.4G)

  • usb 转 串口 模块

    单片机支持 串口 下载
    ch340c 芯片
    信号转换
    usb — 串口

通过 上位机 实现 程序 下载

还可以 供电

短接片 (跳线帽)

串口 连到 转接片 ----到 单片机
接受 与 发送

wifi 蓝牙 gps GSM 等
串口模块 调试
可以通过 串口调试助手 AT指令 进行调试

模拟 单片机 的 串口功能
模块 进行 响应

双方 进行 学习 (电脑 调试助手 / 单片机)

usb转 TTL电平信号 (串口)

  • AD/DA 模块
    ad芯片xpt2046
    精度 12位
    四路模拟输入通道

通过电位器 改变电压 (模拟电压)输入到 对应通道
采集电压值 - 第一路

光敏 (模拟信号) 光线强弱 变化 ad值 也会变化
转换成 数字信号 给 单片机 处理 - 第二路

热敏电阻 感应环境温度 - 第三路


外部 传感器 模拟信号 输入到 芯片 进行 采集 - 第四路

  • 加上 gnd

da 没有用 da芯片
在实际的 开发 中 用的不多

  1. 成本高
  2. 精度 一般 8位
  3. 一般 单片机 输出 pwm 波 / RC 电路 实现 da 模拟 来实现 da芯片 功能
  • LM358是双运算放大器

信号 放大

da 的 输出 模拟信号 进行 外部 调节 (电机)

通过 灯 进行 变化 体现 功能

  • 无源蜂鸣器

有源 只需要 电源 发生

无源 需要 一定频率 脉冲

  • DS1302 实时时钟芯片
    时钟电路

  • 32.768K晶振
    给 ds1302 提供 时钟源

  • 电机模块 uln2003

    高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,

每一对达林顿(两个三极管接在一起)都串联一个2.7K 的基极电阻,
在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,
可以直接处理原先需要标准逻辑缓冲器来处理的数据

五线四相步进电机/直流电机(只能驱动 一个方向/ 不能 反转)

  • 单片机 stc89c52

    一个低功耗,高性能的51内核的CMOS 8位单片机
    stc89c516
    at89c52

8051内核

40个 管脚

32 个 io口
4*8

avr
msp430
stm32

连接对应模块

  • 主芯片 晶振电路
    12M晶振

    最小系统

  • 复位电路

    高电平 复位
    复位管脚

芯片 重新运行


芯片 方向

短路
vcc gnd 对调

  • ch340 驱动
    https://gitee.com/rtthread/rt-thread 开源物联网操作系统

设备管理器 串口号 ch340

  • 程序下载软件

P2 51单片机介绍(一)

基础

  • 大学里 学 电子的 课程

  • ROM 只读存储器 (掉电不丢失)(存储程序)

  • RAM 随机存储器 (掉电丢失) (存储变量参数)

  • cpu 位数

  • rom ram 大小

  • DIP 封装 双列直插封装 dual in-line package

  • SOP 封装 贴片 封装

AT (Atmel 半导体)



  • MAX232芯片
    美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。




  • AT 89c51

  • CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)的缩写。
    它是指制造大规模集成电路芯片用的一种技术或用这种技术制造出来的芯片,
    是电脑主板上的一块可读写的RAM芯片。
    因为可读写的特性,所以在电脑主板上用来保存BIOS设置。


80C51 89C51总线型


P3.6 没有引出来 非总线型

32个IO口 40 管脚

第二功能

通讯 串行接口 RX TX
下载程序


并行 io口
T/C 定时/计数


串口I/O UART 通用 异步 接收发送器
可以跟电脑通信

12MHZ晶振

P3 51单片机介绍(二)

学习板子



开漏输出OC门 P0 内部没有上拉电阻 要输入 高低电平 需要外部加

  • 集电极开路(漏极开路)与非门门电路,Open Collector(Open Drain)

p1 p2 p3 准双向 IO 内部 有 上拉电阻

反相器
晶体管

通过 上拉电阻 保持 IO口 与 内部输出 同步




数电模电

P4 C语言基础


  • 头文件 包含 单片机 一些 特殊寄存器





do while  至少执行 一下  do里的语句

添加 stc 芯片库





keil5新建c51工程 并配置









CH340 驱动安装

程序的烧录

在下载程序前先确认下开发板上的
USB 转 TTL 串口模块上的 J39 和 J44 端子短接片是否短接好
(即 P31T 与 URXD 连接,P30R 与 UTXD 连接)

数字电路与C语言基础

电平特性

单片机是一种数字集成芯片,数字电路中只有两种电平:高电平和低电平
暂时定义单片机输出与输入为 TTL 电平,其中高电平为+5V,低电平为 0V。
计算机的串口为 RS232 电平,其中高电平为-12V,低电平为+12V。
这里强调的是,RS232C 电平为负逻辑电平,大家不要认为上面是我写错了。
因此当计算机与单片机之间要通信时, 需要依靠电平转换芯片,比如 MAX232 电平转换芯片。
TTL 电路和 CMOS 电路的逻辑电平关系如下:
①VOH:逻辑电平 1 的输出电压。
②VOL:逻辑电平 0 的输出电压。
③VIH:逻辑电平 1 的输入电压。
④VIL:逻辑电平 0 的输入电压。
TTL 电平临界值:
①VOHmin=2.4V,VOLmax=0.4V。
②VIHmin=2.0V,VILmax=0.8V。
CMOS 电平临界值(假设电源电压为+5V):
①VOHmin=4.99V,VOLmax=0.01V。
②VIHmin=3.5V,VILmax=1.5V。
TTL 和 CMOS 的逻辑电平转换:
CMOS 电平能驱动 TTL 电平,但 TTL 电平不能驱动 CMOS 电平,需加上拉电阻

二进制中运算

& 与运算

实现“必须都有,否则就没有”这种逻辑关系的一种运算。
C 语言中运算符为“&”,其运算规则如下:0&0=0,0&1=0(1&0=0),1&1=1。
C 语言中“&&”表示“按位与”运算,
意思是变量之间按二进制位数对应关系一一进行“与”运算。
如(0101 0101)&&(1010 1010)=0000 0000,而上面讲到的“&”运算只是对单一位进行运算

| 或运算

只要其中之一有就有”这种逻辑关系的一种运算。
C 语言中运算符为“|”,其运算规则如下:0|0=0,0|1=1(1|0=1),1|1=1。
C 语言中“||”表示“按位或”运算,
变量之间按二进制位数对应关系一一进行“或”运算。如(0101 0101)||(1010 1010)=1111 1111,
而上面讲到的“|”运算只是对单一位进行运算

非运算

非”运算是实现“求反”这种逻辑关系的一种运算。
C 语言中运算符为“!”,其运算规则如下:!0=1,!1=0

C 语言中 ~  表示“按位取反”运算。
如~0101 0101=1010 1010,而上面讲到的“!”运算只是对单一位进行运算

C51中的基础知识



short int,
long int,
signed short int 等数据类型,
在单片机的 C 语言中我们默认的规则如下:
short int 即为 int, long int 即为 long,
前面若无 unsigned 符号则一律认为是 signed 型。

C51 扩充数据类型

C51 中,为了增加程序的可读性,允许用户为系统固有的数据类型说明符用 typedef 起别名,格式如下

typedef c51 固有数据类型说明符 别名

点亮第一个LED

GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。
51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
不过 GPIO 最简单的应用还属点亮 LED 灯了,只需通过软件控制 GPIO 输出高低电平即可。
当然 GPIO 还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高低判断按键是否按下。

Led简介
LED 即发光二极管。它具有单向导电性,
通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,
一般我们控制在 3 mA-20mA 之间,
通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。
当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。
直插式发光二极管长脚为阳极,短脚为阴极。仔细观察贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。

开发板上的电路设计


LED 采用共阳接法,
即所有 LED 阳极管脚接电源 VCC,
阴极管脚通过一个 470 欧的限流电阻接到J19以及J18端子上,
要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。

#include "reg52.h"
sbit LED1 = P2^0; 
void main(){
	LED1 = 0;
}


代码中使用的是p20针脚,说以我们只能接p20针脚,
然后我们的LED灯可以接J19j18任意的针脚,接哪哪亮,因为led都是共阳极

LED 闪烁

 #include "reg52.h"
// 对系统默认数据类型进行重命名 
typedef unsigned int u16;
sbit LED1 = P2^0; 
void delay(u16 ten){
	while(ten--);
}
void main(){
	while(1){
		LED1 = 0;
		delay(5000);
		LED1 = 1;
		delay(5000);
	}
}

u16不是 C 语言数据类型关键字,
这是我们重定义的数据类型使用关键字 typedef 对系统默认数据类型 unsigned int 和 unsigned char 重新命名,
主要是方便我们代码的书写和变量类型的查看。
u16 即代表该变量是16 位的无符号整型数据,u8 代表该变量是 8 位的无符号字符型数据。

reg52.h 头文件介绍

在代码中引用头文件,
意义就是将这个头文件中的全部内容放到引用 头文件的位置处,
免去我们每次编写同类程序都要将头文件中的语句重复编写。
在代码中加入头文件有两种书写方法,
分别为#include <reg52.h>和#include “reg52.h”,包含头文件时都不需要在后面加分号。
两种写法的区别如下:

1.当使用<>包含头文件时,编译器先进入到软件安装文件夹处开始搜索这个 头文件,也就是 KEILC51/C51/INC 这个文件夹下,
如果这个文件夹没有引用的头 文件,编译器将会报错。

2.当使用""包含头文件时,
编译器先进入到当前工程所在文件夹处开始搜索 该头文件,如果当前工程所在文件夹下没有该头文件,
编译器将继续回到软件安装文件夹处搜索这个头文件,若找不到该头文件,编译器将报错。

https://blog.51cto.com/990487026/1710519

单片机最小系统构成

(1)晶振电路

单片机正常工作需要一个时钟
因此就需要在其晶振引脚上外接晶振
(我们使用STC89CXX 单片机晶振引脚是 18 和 19 脚),
至于需要多大晶振这 就取决于你所使用的单片机,
由于我们使用的是 51 单片机,其时钟频率可在 0-40MHZ 上运行,
一般情况下我们建议选择 12M(适合计算延时时间)或者是 11.0592M(适合串口通信)。
若直接将此晶振接入单片机晶振引脚,会发现系统 工作不稳定,
晶振起振的一瞬间会产生一些电感,为了消除这个电感所 带来的干扰,
可以在此晶振两端分别加上一个电容,电容的选取需要无极性的, 另一端需要共地。
根据选取的晶振大小决定电容值,通常电容可在 10-33PF 值范 围内选取。
我们使用的是 33PF 电容。
这样一来就构成了晶振电路。只有保证晶 振电路稳定,单片机才能继续工作。

(2)复位电路

系统也有可能会出 现崩溃或者瘫痪状态。
单片机引脚当中就有一个 RST 复位引 脚,
而 STC89CXX 单片机又是高电平复位,
所以只需要让这个引脚保持一段时间 高电平就可以。
要实现此功能通常有两种方式,一种是通过按键进行手动复位,
还有一种是上电复位,即电源开启后自动复位。
手动复位是通过一个按键及电容 电阻所组成,利用按键的开关功能实现复位,按键按下后 VCC 直接进入到单片机 RST 引脚,松开后 VCC 断开,RST 被电阻拉为低电平。
这一合一开就实现了手动 复位。

而自动复位主要是利用 RC 充放电功能,电源已开启,由于电容隔直,
VCC 直接进入 RST,然后电容开始慢慢充电,直到充电完成,此时 RST 被电阻拉低。
这样就起到上电复位的效果。
这里我们采用手动复位。
不到系统崩溃,我们几乎 不会操作复位。
当按下按键 RSTK1,VCC 直接连接到 RST 复位脚,VCC 是高电平所以系统复位。

(3)电源电路

STC89CXX 单片机的工作电压是 3.3-5.5V 范围, 通常我们使用 5V 直流。
将电源接入到各芯片电源引脚即可。
预留了 P3(5V/3V)端子,这些端子可以很方便的给外部模块连 接电源。

(4)下载电路

程序要烧写到单片机内是通过上位机(PC 机)及对应的软件将编译器生成的 75 xxx.HEX 文件通过单片机串口写入进去。

我们知道现在的笔记本电脑没有 RS232 接口,
所以要使用 USB 转 TTL 串口电 平芯片来建立 PC 机和单片机数据传输通路。
通常使用 CH340G 或者 CH340C 芯片 来完成电平转换。
CH340G 需外接 12M 晶振,而 CH340C 内部自带晶振,所以可以 不接外部 12M 晶振。开发板上使用的是 CH340C 芯片。

一键自动下载电路,无需冷启动。
主要依靠上位机 软件(PZ-ISP)控制 CH340 芯片的 RTS 和 DTR 脚输出,
进而使 MOS 管 Q3 自动断 电后上电,完成冷启动工作。

USB1 接口即为程序下载接口,
D-和 D+连接到 CH340 芯片 的 D-和 D+,
然后 CH340 芯片的串口 TXD 和 RXD 管脚就连接到单片机的串口(P3.0、 P3.1)上,
这里不是直接连接到单片机串口,而是通过 P5 端子进行转接。

这样 做不仅可以让开发板 USB 接口下载程序,还可以让单片机串口不受 CH340 干扰, 这样开发板也可以当成 USB 转 TTL 模块使用,

该设计也是考虑 WIFI、蓝牙等模 块与串口通信不受干扰问题。
USB1 接口不仅可以作为程序下载口,还可以作为串口通信口,因为它本身就 是实现串口下载。

同时还可以作为电源供电口,可以看到 USB1 的管脚 1 就是 5V 电源脚,
所以开发板的可以直接使用 USB 线来供电,如果提供的 USB 线有问题,
可以使用安卓手机数据线,接口都是兼容的。
当电源开关打开后,电源指示灯 DP1 即会点亮,表明系统电源正常。

Keil uVision 5-C51和MDK-ARM共存












解决中文注释 ??? 的问题




外部中断 and 定时器中断

1.什么是中断

中断就是指CPU正在执行一项任务A,
然后突然停止任务A去执行任务B,
执行完任务B再回来继续执行任务A的过程。

中断跟硬件有关。可以说是硬件来让单片机中断。

2.中断有什么用

1.中断能让CPU同时执行多项任务,
例如CPU在执行流水灯程序,
就无法执行 按下按键时,蜂鸣器发声了。

2.当然上面的例子可以用软件轮询检擦案件是否按下来实现,
但这样就消耗了CPU一部分资源来轮询检测
按键是否有按下了,所以中断的另一个优点就是
节省CPU资源

3.双重功能的P3引脚

由最小系统板的原理图可知,
P3.0~P3.7的引脚对应着
RXD,TXD,INTO,INT1,T0,T1等,
说明P3引脚既是 I/O口,
由有别的功能,这个功能就是中断功能。

4.8051中断体系

8051的单片机有
5个中断源,2个优先级

由上图可知,
INT0是通过引脚P3.2,
INI1时通过引脚P3.3,
定时器T0和T1是 引脚P3.4和P3.5

中断源:
INT0(外部中断0),
INT1(外部中断1),
T0(定时器0),T1(定时器1),
RXD和TXD(同属串口中断)

中断相关的特殊寄存器:

(1)中断允许控制寄存器(IE)--------控制各中断的开放和屏蔽

(2)定时器/计数器控制寄存器(TCON)-------定时器和外部中断的控制

(3)串行口控制寄存器(SCON)-------串行中断的控制

(4)中断优先级控制寄存器(IP)-------设置各中断的优先级

各寄存器的控制范围如下图:

从上图可看出从中断源产生请求
到请求进入CPU的过程:

以INT0为例,INT0产生中断源,
经过TCON寄存器中的IT0为选择是下边沿触发
还是
低电平触发的中断请求 (当然IT0是程序人工设置的),

当中断请求到达IE0的时候,
IE0会被硬件置1(当CPU响应此中断请求时,IE0被硬件置0),
然后就到 IE寄存器的地方了,
EX0是外部中断INT0的开关,
而 EA 是所有中断的总开关,这都由 IE寄存器控制,
最后经过 IP寄存器
设置优先级,这个一般比较少用,
默认的优先级为,INT0 > T0 > INT1 > T1 >串口中断。
最后把中断请求传给CPU。

5.中断特寄存器

TCON寄存器


IE寄存器

EA:中断的总开关,EA=1才能允许中断传给CPU

ES:串行口中断开关

ET1:定时器1中断开关

EX1:外部中断1开关

ET0:定时器0中断开关

EX0:外部中断0开关

IP优先级寄存器
(对应为设置成1说明优先级设置成高,8051只有高低两种优先级)

6.中断的优先级

8051只有高低两种优先级,
默认下优先级从高到低:INT0 > T0 > INT1 > T1 > 串行中断。

1.高优先级的中断可以打断低优先级的中断。

2.正在响应的中断,不能被同级或者低级的中断打断。

3.同时发生几个中断,先响应优先级高的中断

7.中断服务程序的编写

中断服务程序就是中断发生后,CPU去执行的函数。

1.中断服务函数没有返回值

2.中断服务函数不能传入参数

例如:

void  函数名 (void)  interrupt  x  using  y

{



}
 

x 范围为0~4,分别代表5个中断源,例如外部中断INT0就是0,T0就是1,INT1就是2,T1就是3,串行中断就是4

y 的范围为0~3,分别表示4组工作寄存器,不写就用0. 不写也可以

8.外部中断实现代码

 #include<reg52.h>
sbit LED=P1^0;
void main()
{
	IT0=0;  //中断触发方式为低电平触发,IT0=1则为下边沿触发
	EX0=1;  //打开外部中断0
	EA=1;    //打开中断总开关
	while(1)
	{
		LED=1;   //在没有中断发生时,LED关闭
	}
}
 
void INTERR(void) interrupt 0
{
	LED=0;//有中断发生时,LED亮起
}

把开发板的
P3.2用杜邦线接到GND上,
就会触发中断,发现LED亮起来了。
(为什么是P3.2?因为由最上面的原理图可知道INT0的引脚是P3.2)

9.定时器/计数器中断工作原理

1.由最上面的最小系统原理图可以看出,
定时器T0和T1分别对应的引脚是P3.4和P3.5

2.定时器/计数器 的
计数脉冲来源可以有两个,
一个是芯片内部晶振振荡器输出脉冲12分频后的脉冲,
一个是从外部接入的外部脉冲

3.TLx和THx寄存器,x=0,1。

以TL0和TH0为例,
TL0和TH0 都是8位寄存器(8051的寄存器都是8位),
所以TL0和TH0形成高八位和低八位寄存器,用于计数,一共16位。

2^16=65536,
所以 TL0和TH0加一起最大能计数的值是0~65536,一共65536.

4.定时器/计数器的两个寄存器:
TCON和TMOD,
其中TCON用于开启定时器/计数器中断,
TMOD用于设置定时器/计数器的工作方式(TCON上面 已经说过了)

TMOD寄存器:


(由图:低八位为定时器T0,高八位为定时器T1)

GATE:门控制。

当GATE=1:
INTx引脚为高电平且TRx 要同时为1,定时器Tx才启动。

当GATE=0:
只要TRx =1,定时器Tx就启动,不用理会INTx引脚的电平高低。

C/T:决定是使用 定时功能,还是 计数功能

当C/T=0:
定时功能。加1计数器
对芯片晶振12分频的脉冲计数,一个脉冲过来,就加一,直到 TFx 加满了溢出。
(TFx在TCON寄存器中)

当C/T=1:
计数功能。加1计数器
对来自输入引脚T0(P3.4)或T1(P3.5)的外部脉冲进行计数,
一个脉冲加一,直到TFx加满溢出。

10.定时器/计数器定时数值的计算

例:
我要定时10ms。晶振频率是12M,
工作模式在方式1

f = 12M/12 =1M (因为要12分频),
也就是说 1秒 1000000个机器周期,
10ms有10000个机器周期。

65536 - 10000 = 55536 ,意思是
计数器从65536 一直减到 55536 所用的时间就是10ms。

55536的十六进制是0xD8F0

所以设置
TH0 = 0XD8,TL0=0XF0

下面给出代码

或者直接下载一个C51定时器计算器:


定时器/计数器代码

 #include<reg52.h>
sbit LED0=P1^0;
unsigned char i;
 
void main()
{
	TMOD=0X01;  //设置使用定时器0,16位的定时/计数寄存器
	TL0=0xD8;    //低八位赋初值
	TH0=0XF0;    //高八位赋初值
	ET0=1;          //开启定时器0中断
	TR0=1;         //运行定时器0
	EA=1;          //开启中断总开关
	while(1);
}
 
void Delay(void) interrupt 1 using 0
{
	i++;
	TR0=0;           //进入中断函数时,关闭定时器
	TL0=0XD8;    //重新赋初值
	TH0=0XF0;
	if(i==20)        //因为10ms一次处罚看不出明显结果,所以让20次触发才让灯变一次
	{
		LED0=~LED0;
	}
	TR0=1;     //重新开启定时器
}

有关普中51-单核-A2单片机的更多相关文章

  1. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  2. micropython复现经典单片机项目(二)可视化音频 频谱解析(基本搞定) - 2

    本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S

  3. 51单片机——74HC595的应用(SPI实践) - 2

    目录SPI总线SPI总线概述 SPI总线分类SPI优点及缺点SPI接口硬件原理SPI四种工作模式 74HC595应用74HC595芯片概述74HC595封装及管脚功能74HC595工作原理 ​编辑 74HC595串行转并行点亮LED灯 程序实现  Proteus运行结构示意图SPI总线SPI总线概述 SPI(SerialPeripheralinterface):串行外围设备接口 用途:用来在微控制器与外围设备芯片之间实现数据交换 特点:高速、全双工、同步 SPI总线分类四线制全双工SPI(同时收发)MISO    主机输入/从机输出MOSI    主机输出/从机输入SCLK   串行时钟CS或

  4. 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32 - 2

    文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室

  5. AT24C04、AT24C08、AT24C16系列EEPROM芯片单片机读写驱动程序 - 2

    一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024

  6. 基于51单片机、DS1302时钟模块的电子闹钟设计 - 2

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、设计原理1.DS1302介绍2.闹钟音乐播放原理二、程序设计1.DS1302.h2.ds1302.c3.music.h4.main.c三、电路图四、运行结果1.proteus仿真2.开发板实验五、总结六、附件提示:以下是本篇文章正文内容,下面案例可供参考一、设计原理1.DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。该芯片采用普通32.768kHz晶振,DS1302工作时功耗很

  7. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

  8. 一、51单片机 使用Proteus掌握LCD1602显示屏的使用(仿真及代码) - 2

    1、单片机控制液晶显示模块1602LCD的显示。液晶显示器(LiquidCrystalDisplay,LCD)具有省电、体积小、抗干扰能力强等优点,LCD显示器分为字段型、字符型和点阵图形型。(1)字段型。以长条状组成字符显示,主要用于数字显示,也可用于显示西文字母或某些字符,广泛用于电子表、计算器、数字仪表中。(2)字符型。专门用于显示字母、数字、符号等。一个字符由5、7或5、10的点阵组成,在单片机系统中已广泛使用(3)点阵图形型。广泛用于图形显示,如笔记本电脑、彩色电视和游戏机等。它是在平板上排列的多行列的矩阵式的晶格点,点大小与多少决定了显示的清晰度。引脚包括8条数据线、3条控制线和3

  9. 微机课设 | 基于STC15单片机的简易数字密码锁设计 - 2

    在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替了传统的机械式密码锁,电子密码锁具有安全性高、成本低、功耗低、易操作等优点。本文主要介绍运用51单片机设计数字密码锁的方法。本设计采用自上而下的数字系统设计方法,将数字密码锁系统分解为若干子系统,并且进一步细划为若干模块,然后用C语言来设计这些模块,通过KEIL软件编译,并且进行实机调试。调试结果表明:该数字密码锁能够效验4位十进制

  10. 51单片机(郭天祥版)——键盘检测原理及应用实现 - 2

    实验中我们使用的是52单片机目录前言一、单片机是什么?二、实验步骤1.独立键盘检测1.2代码如下(示例):1.3图片1.4视频2.矩阵键盘检测2.2代码如下(示例):2.3图片2.4视频总结:以上就是今天要讲的内容,本文仅仅简单介绍了单片机键盘检测的应用实现,而单片机键盘检测相关理论可以参考教材进行学习前言文章内主要概念引自郭天祥老师《新概念51单片机C语言版》一书主要展示郭天祥老师书中第四章键盘检测原理及应用实现。分为仿真、实体两部分。一、单片机是什么?单片机就是在一块硅片上集成了微处理器、存储器及各种输入/输出接口的芯片,这样一块芯片就具有了计算机的属性,因而被成为单片微型计算机,简称单片

随机推荐