热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

51单片机系列一:单片机是什么?单片机的板子上有什么?我们编程能干什么?

入手了一块远古版普中A2的51单片机准备蓝桥杯,简单翻了一下郭天祥老师的51单片机入门感觉很多东西都之前学过了,可能得益于是通信工程专业的原因。感觉真正

入手了一块远古版普中A2的51单片机准备蓝桥杯,简单翻了一下郭天祥老师的51单片机入门感觉很多东西都之前学过了,可能得益于是通信工程专业的原因。感觉真正要理解基本原理,至少C语言、数电和基本电路知识(不用学到模电那么深)是要会的,不然可能单照着书碎片化学习也会一头雾水的吧。

这个系列主要记学习51的笔记,自用为主~

目录

Part1.单片机是什么?

1.寄存器部分/IO口(4个,每个均为8位)

2.特殊功能与控制引脚

3.地线、电源线、时钟线

Part2.单片机的板子上有什么?

Part3.我们编程在做什么?

1.常用语法简介

2.结合编程算法实现通断、状态机、循环、选择等效果




Part1.单片机是什么?

单片机机如其名,就是一个硅片,但是一个有很多接口,能被编程的硅片。具体内部构造不用了解,对于我等入门菜鸡太复杂也用不到。

然而这个复杂的芯片必须安在一块开发板上,才能实现各种功能,因为对于单片机本身而言,从外部看它仅仅长这样:

 

图上是一种很常见的51单片机,有40个引脚(现在多数51单片机都是40个引脚)。它们不同的引脚作用各异,但是大部分引脚都有一个相同的特点:能够被我们编的程序改变相应引脚的输出电平。

一般来讲,每个引脚所拥有的电平有两种经常用到的状态:高电平和低电平,具体数值由引脚的不同属性而有所变化(但都是规定死的)。除此之外,还会有一些非正常的状态使引脚不能正常输出高低电平,如高阻状态,即引脚悬空,这时候引脚可能输出高电平也可能输出低电平,视其后面接的东西而定,假如后面是下一级电路,则这个“高阻状态”的引脚就接了和没接一样(当然这样的状态需要避免,实际应用之前肯定会通过接上拉或下拉电阻让其定死为高电平或低电平,这样设计也是为了保证引脚电平设计的灵活性)。我们在特定的开发环境中编写程序,烧录到芯片上,其实就只干了一件事情:改变这些引脚的电平状态,比如控制xxx引脚使其由低变高等,或给某个高阻状态的引脚接一个上拉电阻或下拉电阻。

下面来分析一下图上的这40个引脚都是什么内容。


1.寄存器部分/IO口(4个,每个均为8位)

(1)P0口(即32~39脚,标号为P0.0~P0.7):这就是刚刚所说的“高阻状态”接口。默认时,这8个口不一定输出什么电平,因为没有设置上拉和下拉电阻。

但假如要使用这8个接口,就必须给其加上拉电阻RP8~RP12。加上拉电阻的过程靠写程序。加了之后,8个口都默认为高电平。电平的大小可通过测量排针J22得知(注意:因为有“非”圆圈,J22输出的电压刚好与每个引脚相反,比如P0.0是高电平,在J22的1脚测得的就是低电平),可用于debug。看图可知,通过板子内部走线,这8个口控制的是LCD1602(小显示屏)模块。

(2)P1口(即1~8脚,编号为P1.0~P1.7) :默认高电平状态,自带上拉电阻。但是其准确的名称叫“准双向8位I/O口”,意为在真正使用这8个口时,需要对接口实行“写一操作”,类似于一个“准备,激活”的过程,才能正常使用。

 自带的上拉电阻就是RP7~RP11。可以通过排针J20测出引脚状态(当然,排针电平和引脚电平是反的)。这8个口通过内部走线控制LCD9648/12864(大显示屏)模块。

(3)P2口(21~28脚):同样是“准双向8位IO口”,要事先配置,自带上拉电阻,与P1口几乎相同。

这8个口都是控制LCD的,只是多数为特殊功能接口,在学习显示屏时会详细整理一下。也同时控制LED模块(全板最简单的电路,可用于debug)。可以通过排针J25测出引脚状态(当然,排针电平和引脚电平是反的)。

(3)P3口(11~17脚):准双向8位IO口,与P1类似,自带上拉电阻,注意并不是所有引脚都有上拉电阻。有“第二功能”,后面学习时会详细整理。

可通过J29测出其电平状态(相反)。

这四个口本质上都是8位“寄存器” 。寄存器是用来存储二进制代码的,比如P0口存储的值为“00000001”,就代表P0.0是高电平,其他七个引脚全是低电平。寄存器存储的数据可以被改写、移位、清空。可以参考数电相关知识。


2.特殊功能与控制引脚

RST(9脚,复位引脚):用来给单片机寄存器“重启程序”的引脚。由按键RSTK1控制,平时为低电平,需要复位时,按下按钮则换到高电平。只有在输入连续两个机器周期以上的高电平时才有效,也就是说必须按久一点,这也是一种防误触机制。复位后单片机从头开始执行程序。并不是“恢复出厂设置”!

 EA'/Vpp(31脚,控制读取指令的位置):自己编程的话一般接高电平。接高电平时,从单片机内部的存储中读取指令并执行程序(注意,不能理解为电脑编程是外部程序,因为通过数据线将程序烧写到芯片内部后,它就变成了内部程序,即使不连电脑也能跑);接低电平时,从外部ROM中读取指令并执行程序,不改变内部程序。本开发板直接给这个引脚定死了一个到Vcc的上拉电阻R7,也就是说只能从内部读程序了。

ALE/PROG'(30脚),PSEN'(29脚):与外部程序存储器有关的特殊功能引脚,本开发板涉及不到这些,因为读取指令的位置被限定在了内部。


3.地线、电源线、时钟线

GND(20脚):默认接地。

Vcc(40脚):常压为+5V,低压为+3.3V,通过改变输入的电源电压直接改变引脚电压。

XTAL1/XTAL2(18,19脚):时钟引脚,接振荡器,负责接收、输出振荡器振出来的时钟信号。其中1为信号输入端,2为信号输出端。假如采取外部时钟方式,则将1接地,将2当作外部时钟信号输入引脚。这里的晶振频率为12Mhz,其周期表示最小可以精确到的秒数。


Part2.单片机的板子上有什么?

结合原理图,可知普中A2的开发板上有八位LED、八位动态数码管、独立按键与矩阵按键、小显示屏、蜂鸣器、LED矩阵、外接时钟芯片DS1302、ADC与DAC等。


Part3.我们编程在做什么?

上面说过,我们编程主要是向寄存器中写入数据,改变其电平;接入时钟等信号;或改变上拉、下拉电阻的状态。编程中使用C语言即可,然而单片机只接受汇编语言。为此,可以在Keil等开发环境中使用C语言编写程序,再通过该环境自带的转换功能将其转换成汇编语言烧写到板子上。


1.常用语法简介

#include  //将reg52.h这个头文件导入到程序中。reg52.h是一个52系列单片机头文件(51单片机增强版,可通用头文件),它主要内容如下图:

sfr P1 = 0x90;  //这句话是一个常用的声明语句。这里所谓“声明” 并不是像函数那样,而是指“给地址重新命名”。在单片机中,每一个需要存储的数据都有其对应地址,然而这是一个十六进制表示的东西。单片机只认地址,不认名字。声明语句的作用就是把这个地址起名字。它们的关系有点像地球上只有“北纬100度东经135度”,然而人可以来一个声明语句,说“北纬100度东经135度的地方是A市中心广场”。这样以后人们再想引用那个位置时,说“A市中心广场”就行了。

类似的声明语句还有sbit:

sbit RD = P3^7;  //与sfr不一样的地方是sfr是用来声明寄存器的,而sbit是用来给寄存器中某个特定位数起名的。用符号"^"即可达到目的。这样P3.7,即P3寄存器的第八位(注意,不是第七位,因为从0开始)就被命名成了"RD"。


2.结合编程算法实现通断、状态机、循环、选择等效果

这一点之后学习了实例再写。就到这里吧,有错误求多多指正~


推荐阅读
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
author-avatar
谁的板砖在飞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有