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这个头文件导入到程序中。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.结合编程算法实现通断、状态机、循环、选择等效果

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值