10天学会嵌入式技术之51单片机-day-1

第一章 单片机概述

1.1.51单片机简介

51 单片机原是指 20 世纪 80 年代早期由 Intel 公司推出的一种 8 位微控制器系列,其以
简单、稳定、功能丰富而广受欢迎,现在更多的指实现了 8051 指令集的一系列单片机。我
们目前使用的 51 单片机一般是宏晶 STC89 系列,这其中流传最广的版本,也是我们今天课
程的主角,就是 STC89C52RC。
我们的核心板采用的单片机型号是 STC89C52,LQFP44 封装,芯片的相关文档自行查询,也可找我领取。

1.2 封装

目前 STC89C52RC 有两种常见封装:LQFP44 和 PDIP40。

(1)LQFP44

(2)PDIP40

两种封装的芯片并无性能差异,只是外观不同,同时 LQFP44 比 PDIP40 多了四个 GPIO
引脚,具体选择哪一种需要看 PCB 板的设计要求。

1.3 命名规则

1.4 单片机最小应用系统

第 2 章 开发板简介

做单片机开发,除了要开发环境,还需要能运行代码的开发板。我们这门课使用的是 51
开发板,板子分为核心板和扩展版两个部分。核心板只包含 51 单片机运行的最小组成,外
设都放在了扩展版上,两个板通过标准插口连接。

2.1 开发板实物图

本人使用的开发板为尚硅谷公司的。

2.2 核心板原理图
 

2.3 扩展板原理图

第 3 章 开发环境与工具

3.1 Keil5 软件安装

51 单片机的开发使用的是定制的 C 语言(与标准 C 语言语法有一点点不同),所以配
套编译器不能再使用 gcc,而是要使用 armcc。armcc 是商业编译器,要使用需要商业授权。
Windows 下,armcc 被集成在 Keil 中。
Keil 是一个 Windows 环境下进行单片机开发的 IDE(集成式开发环境),可以在其中
编写代码,管理项目以及最重要的:仿真和调试代码。

(1)官网下载地址

Keil 主页:https://www.keil.com

(2)本地下载地址

通过网盘分享的文件:02_51_keil
链接: https://pan.baidu.com/s/1AEcChUNSiPSWkZN0WDOB0w?pwd=9uy9 提取码: 9uy9 
--来自百度网盘超级会员v1的分享

3.2 STC-isp软件安装

(1)官网安装

STC-isp 是 STC 公司专门为 STC 芯片准备的 USB 口刷写工具。

官方下载地址:http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.92A.zip

(2)本地下载

通过网盘分享的文件:03_isp程序下载工具
链接: https://pan.baidu.com/s/1QtrB5CCwpXUhJTEyXRG09g?pwd=vww6 提取码: vww6 
--来自百度网盘超级会员v1的分享

3.3 逻辑分析仪

单片机中“时序”是一个很重要的概念,简单来说,就是安排单片机做事情的顺序。当
单片机通过 GPIO 操作外设时,控制信号必须符合外设的要求。
以我们后面要用的超声模块为例,我们想使用这个模块,必须在 TRIG 引脚发射一个至
少 20us 的高位脉冲,然后等待一段时间,在 ECHO 引脚会收到超声模块的回复。在这个过
程中,可能出现以下问题:

(1)我们单片机发射的脉冲可能持续时间不到 20us。

(2)等待回复的时间不确定,如果等待时间不足,可能出现干扰信号。

关于这个超声模块,我们用 51 做小车的时候会详细讲解,但是通过上面的描述,大家
应该能看明白,单片机代码和外设通信的时序非常重要。而如果需要准确测量这个时序,我
们需要一个辅助设备:逻辑分析仪。

逻辑分析仪实物图如下所示:

3.4 VScode 软件安装

如果学习 c 语言过程中,没有安装 VScode 的同学,需要安装一下 VScode,方便后续代
码的编写。

第 4 章 点亮 LED

4.1 创建项目

4.2编写程序

编写代码

#include<STC89c5xRC.H>//包含STC89c52头文件

void main()
{
  //让P00引脚输出低电平
  P00=0;
//死循环卡住单片机,让他不要继续往下执行
 while(1);
}

4.3 编译程序

4.4烧录程序

4.5 案件解读

第五章 闪烁LED

5.1 需求描述

令 LED1 每秒钟闪烁一次,具体效果下图所示。

5.2 软件设计

5.2.1 实现思路

想让 LED1 闪烁,只需让 P00 的值不断地在 0 和 1 之间循环变化即可。

5.2.2 代码实现

(1)代码

#include<STC89C5xRC.H> //包含STC89C52的头文件
#include<INTRINS.H>

void Delay_1MS(unsigned int xms);//延时函数的声明

void main()
{
//让led变为低电平
P00=0;

//死循环卡住单片机,让他不要继续往下执行
    while(1)
    {
    //对led不断取反,取反就是亮灭转换
    P00=~P00;

    //延时500ms
    Delay_1MS(500);

    }
}

void Delay_1MS(unsigned int count) //@11.0592MHz
{
unsigned char data i, j;
    while (count > 0) {
    _nop_();
    i = 2;
    j = 199;
    do {
        while (--j):
    
    } while (--i);
   count--;
    }
}

(2)代码解读

        1)延时函数说明
这段代码中,LED 闪烁的部分其实相当简单,就是对 P00 不断取反。亮灭的节奏主要
取决于延时函数的实现。那我们如何实现一个 1ms 的延时函数呢?这里,我们可以使用
STC-ISP 自带的软件延时计算器。

        2)延时的原理
在 51 单片机中,执行每条指令都需要特定的时间,因此只需知道每条指令执行多长时
间,再令其循环执行特定的次数就能实现延时。
关于每条指令的执行时间,需要搞清楚时钟周期、机器周期和指令周期三个概念,具
体内容如下

3)_nop_函数说明
由于生成的延时函数中调用了_nop_( ) 系统函数,该函数作用是执行一个空操作,延
时 函 数 调 用 _nop_( ) 的 作 用 目 的 仅 仅 是 为 了 使 延 时 更 加 精 准 。 由 于 该 函 数 定 义 在
<INTRINS.H>文件中,因此需要引入该文件。

第六章 流水灯

6.1 需求描述

令 P00 到 P07 的 LED 依次亮起,间隔 100ms,不断循环。

6.2软件设计

6.2.1 代码实现

#include <STC89C5xRC.H>
#include <INTRINS.H>
#define LED P0

//增加自定义类型,简化代码编写
typedef unsigned char u8;
typedef unsigned int u16;

//声明延时函数
void Delay1ms(u16 count);

void main()
{
      //声明临时变量
    u8 temp=1;

    //temp是8个bit,对于8个led,1代表亮,正好和P0相反
    //之后我们只要对temp做左位移,就可以实现流水灯
    while(1)
    {
        //P0是temp取反;0000 0001取反1111 1110
        LED=~temp;
        //左移位次数为:0000 0001,0000 0010,0000 0100 ... 1000 0000
        LED<<=1;
        //temp是char类型8位,如果等于1000 0000,再左移一位就变成0000 0000,所以如果temp等                           
       //于0时,需要将temp在设置为1;
        if(temp==0)
        {
            temp=1;
        }
        //延时函数100ms
        Delay1ms(100);
        
    }

}

void Delay1ms(u16 count) //@11.0592MHz
{
    unsigned char data i, j;

    while (count > 0) {
        count--;
        _nop_();
        i = 2;
        j = 199;
        do {
            while (--j);

        } while (--i);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值