单片机原理与实践学习记录


第二课(更新时间:2021.9.3)

51单片机I/O口简单应用

C51中常用的头文件

​ 通常有reg51.h,reg52.h,math.h, ctype.h, stdio.h, stdlib.h, absacc.h, intrins.h。但常用的却只有reg51.h或reg52.h,math.h。reg51.h和reg52.h是定义51单片机或52单片机特殊功能寄存器和位寄存器的,这两个头文件中大部分内容是一-样的, 52单片机比51单片机多一个定时器T2,因此,reg52.h 中也就比reg51.h中多几行定义T2寄存器的内容。math.h是定义常用数学运算的,比如求绝对值、求方根、求正弦和余弦等,该头文件中包含有各种数学运算函数,当需要使用时可以直接调用它的内部函数。


C51数据类型扩充定义

    单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般会根据寄存器功能的不同给寄存器赋予各自的名称,当需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的过程实际就是将这个寄存器在内存中的地址编号赋给这个名称,这样编译器在以后的程序中才可认知这些名称所对应的寄存器。

sfr-特殊功能寄存器的数据声明,声明一个8位的寄存器。
sfr16-16位特殊功能寄存器的数据声明。
sbit-特殊功能位声明,也就是声明某一个特殊功能寄存器中的某一位。
bit-位变量声明,当定义一个位变量时可使用此符号。
例如: sfr SCON = 0x98;
SCON是单片机的串行口控制寄存器,这个寄存器在单片机内存中的地址为0x98。这样声明后,在以后要操作这个控制寄存器时,就可以直接对SCON进行操作,这时编译器也会明白,实际要操作的是单片机内部0x98地址处的这个寄存器,而SCON仅仅是这个地址的一个代号或是名称而已,当然,也可以定义成其他的名称。
例如: sfr16 T2 = 0xCC;声明一个16位的特殊功能寄存器,它的起始地址为0xCC。
例如: sbit TI =SCON^1;
SCON是一一个8位寄存器,SCON^1 表示这个8位寄存器的次低位,最低位是SCON0;SCON7表示这个寄存器的最高位。该语句的功能就是将SCON寄存器的次低位声明为TI,以后若要对SCON寄存器的次低位操作,则可直接操作TI。


单片机最小系统

​ 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的以单片机为核心元件的可以正常工作的具有特定功能的单片机系统,是单片机产品开发的核心电路。而且单片机最小系统是在以51单片机为基础上扩展,使其能更方便地运用于测试系统中。下面将介绍其的组成:

单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。最小系统原理图如图1所示。


图1 最小系统电路图

1.电源供电模块

对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源供电模块,电源模块的稳定可靠是系统平稳运行的前提和基础。51单片机虽然使用时间最早、应用范围最广,但是在实际使用过程中,一个和典型的问题就是相比其他系列的单片机,51单片机更容易受到干扰而出现程序跑飞的现象,克服这种现象出现的一个重要手段就是为单片机系统配置一个稳定可靠的电源供电模块。电源模块电路如图2所示。

图2 电源模块电路图

此最小系统中的电源供电模块的电源可以通过计算机的USB口供给,也可使用外部稳定的5V电源供电模块供给。电源电路中接入了电源指示LED,图中R11为LED的限流电阻。S1 为电源开关。

2.复位电路

单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。复位电路图如图3所示。

图3 复位电路图

单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。当复位电平持续两个机器周期以上时复位有效。复位电平的持续时间必须大于单片机的两个机器周期。具体数值可以由RC电路计算出时间常数。

复位电路由按键复位和上电复位两部分组成。

(1)上电复位:STC89系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。

(2)按键复位:按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

3.振荡电路

单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。振荡电路如图4所示。


  图4 振荡电路图

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。

晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。

STC89C51使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。

4.扩展部分

4.1LED电路

图5 LED电路图

图5中主要元件有1K的排阻、LED、。1K的排阻为每个LED的限流电阻。此最小系统提供了8个独立LED,由P1口控制,采用共阳级接法所以只有当P1口输出低电平时LED才会点亮。

4.2蜂鸣器电路

图6 蜂鸣器电路图

图6中蜂鸣器使用的是PNP三极管进行驱动控制的,此蜂鸣器为电磁式有源蜂鸣器。三极管的集电极通过蜂鸣器接5V电源,基极是控制端,发射极接地,当单片机的P2.3输出低电平时,三极管导通,蜂鸣器发声。蜂鸣器为感性原件,也可以在两端并接一个二极管来起到泄放作用。

4.3系统的数码管电路


  图7 数码管电路图

如图7所示,多位数码管的“位选”是可以独立控制的,而“段选”是连接在一起的,可以用作数码管的动态显示和静态显示。图7中所示的数码管全部为共阴极的数码管。74HC573为所存器,利用单片机可以控制所存器的所存端,进而控制锁存器的数据输出,利用分时控制的方法可以方便地控制任意数码管显示任意数字。

4.4系统的键盘电路

图8 独立和矩阵键盘电路图

图8中S2-S3为4个独立按键,与单片机的P3.4-P3.7分别相连。

独立键盘与单片机相连时,每个按键都需要单片机的一个I/O口,若按键较多时,占用的I/O口资源就会过多,为此就引入了矩阵键盘。图8中是将16个按键排成4行4列,这样一共有8根线,节省了8个I/O口。S6-S21即为16个矩阵键盘,8条线分别与单片机飞P3口相连。

4.5A/D电路

图9 A/D电路图

集成A/D转换器品种繁多,一般选用逐次比较型A/D转换器,图9中的ADC0804就是这类单片集成A/D转换器。它采用CMOS工艺20引脚的集成芯片,分辨率为8位,转换时间为100us,输入电压范围为0-5V。芯片内具有三态输出数据锁存器,可以直接连接数据总线上。

4.6D/A电路

图10 D/A电路图

DAC0832是使用非常普遍的8位D/A转换器,转换时间为1us,工作电压为+5V~+15V,基准电压为正负10V。它主要由两个8位寄存器和一个8位D/A转换器组成。其片内有输入数据缓冲器,可以直接与单片机接口。DAC0832一电流形式输出,需要转换为电压输出时,可外接运算放大器。

4.7 系统串行通信电路

图11 串行通信电路图

RS232串口电路使用MAX232作为电平转换芯片,可以通过串口电缆连接到计算机背后的COM口,用于单片机与上位机通信以及和其他串口设备的数据交互。

以上就是单片机最小系统的组成介绍了。由于单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,因此还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,来更好的完善使用。


闪烁灯的制作

入门:

​ 在日常生活中,有各种各样的闪烁灯,有的应用于娱乐场所,有的应用于店面等的装饰,有的起警示作用。如舞台灯、汽车转向灯、十字路口的黄闪灯等。在单片机控制系统中,通过I/O口进行开关量的控制占用较大的比重,如LED发光二极管的亮灭、电动机的启停等控制都属于单片机的开关量输出控制。LED发光二极管是几乎所有的单片机系统都要用到的显示器件,常见的发光二极管主要有红色、绿色、黄色等单色发光二极管,另外还有双色的二极管。

​ 这里,我们使用Ubuntu下的MCU 8051 IDE进行学习。
首先,在创建一个新的空白项目之后,将芯片类型设置为AT89S52。

接着,在创建完空白c文件之后,将以下代码粘贴到文件里面去。

`#include "8052.h"`
`#define LSA   P1_5`
`#define LSB   P1_6`
`#define LSC   P1_7`
`int main(void)`
`{``LSA = 0;``LSB = 0;``LSC = 0;``P0=0XAA;`
`}`

然后点击compile进行编译。

在源代码进行编译的过程中,我们对代码的原理进行分析。

​ 这里我们先附上LED流水灯模块的原理图。LED,也就是发光二极管,是一种半导体固体发光器件。因此, LED的工作是有方向性的,只有当正极接到LED阳极(+),负极接到LED的**阴极(-)**的时候才能工作,如果反接LED是不能正常工作的。发光二极管与普通二极管一样也具有单向导电性。当给发光二极管加上大于其导通电压的正向电压后,就会有电流产生,同时发出相应颜色的光,不同颜色的二极管的工作也是不一样的,一般发光二极管的工作电压是2V,其工作电流大多为5—20mA,因此如果用5V的电源进行供电则需要加入限流电阻。
​ 单片机的I/O口有两种状态“1”和“0”,当为“1”时其管脚输出为高电平,即为5V,当为“0”时为低电平,即为0V。由上图可知,当P1.0为高时发光二级管两端电压相同,即不会产生电流,发光二极管就不会发光,当P1.0为低时,5V和P1.0就会有5V的电压,就会有电流流过LED0,使发光二极管发光。这样我们通过控制单片机的I/O口的高低电平就能实现对LED 的亮灭控制。
原理了解以后,我们对代码进行分析。

`#include "8052.h"``#define LSA   P1_5`
`#define LSB   P1_6`
`#define LSC   P1_7` `int main(void)`
`{``while(1)//使程序进入死循环,保证持续运行``{LSA =0;``LSB = 0;``LSC = 0;``P0=0XAA;//0XAA为十六进制形式,转化为二进制形式就是10101010``}`
`}`

​ 通过硬件连接可知:当I/O口为“1”时LED是灭的;当I/O口为“0”时LED是亮的;物理层面观察到的现象也就是灭亮灭亮灭亮灭亮。而我们在程序中,还为P1.5、P1.6、P1.7也赋了值。使LED1的灯也可以亮。这样能帮助我们更好地理解基于51单片机I/O口的简单应用。
​ 这时,程序在编译成功之后就会出现这样的界面,如果出错,系统就会提示出错的具体位置。

然后我们对程序进行仿真模拟(点击START,或者那个小火箭,注意,一定要先模拟哦)。

出现以下界面模拟完成。
紧接着在运行完之后,我们需要打开LED模拟界面。并调试成如下界面。

在这里,我们先测试对P0的任务安排是否成功。

效果不错,接下来再测试,P1的功能。

完成。

进阶:

让一只LED灯不停地闪烁。这里我们先补充一点小知识。
由于我们使用的是仿真软件,而仿真存在一个时间轴的概念,我们的一秒等同于仿真软件里面的一毫秒,这就使得仿真的现象非常慢,即使是在硬件中肉眼难以捕捉的现象也可以在软件中观察到。
 #include "8052.h"#define LSA   P1_5
#define LSB   P1_6
#define LSC   P1_7 int main(void)
{while(1){LSA =0;LSB = 0;LSC = 0;P0 = 0xff;P0 = 0x00;}
}

由于我们并没有在代码之中添加时间延迟函数,那么,在硬件上,就很难观察到LED灯的明灭。然而,在软件仿真上呢,嘿嘿嘿。。。

#include "8052.h"
#define LSA   P1_5
#define LSB   P1_6
#define LSC   P1_7 int main(void)
{        unsigned int a;LSA =0;LSB = 0;LSC = 0;while(1){a=60;while(a--);P0 = 0xff;a=60;while(a--);P0 = 0x00;}
}

不正经的时间延迟如上。。。


本文以zhangrelay老师的单片机课程为骨干,借鉴郭天祥老师的新概念51书本内容为辅助,个人进行编辑整理用于知识回顾以及概念学习使用。学识浅薄,献丑献丑,麻烦各位多多批评与指正,提出宝贵的意见。(随时间更新哦!)

单片机原理与实践学习记录之51单片机I/O口简单应用相关推荐

  1. 单片机原理与实践学习记录之51单片机硬件基础

    单片机原理与实践学习记录 第三课(更新时间:2021.9.6) 51单片机硬件基础 MCS-51是Intel公司生产的一个单片机系列的总称.在功能上,该系列单片机有基本型和增强型两大类,通常以芯片型号 ...

  2. 单片机定时器实验两位倒计时秒表_单片机学习「1」 初始51单片机

    问题1:什么是单片机? 采用集成电路技术,将CPU(具有处理数据能力的中央处理器).RAM(随机存储器,类比电脑里的内存条).ROM(程序存储器,类比电脑硬盘).多种I/O口(类比电脑的各种接口,不过 ...

  3. 单片机波特率不加倍c语言,51单片机硬件系统设计时,为什么用11.0592MHz的晶振而不用12MHz晶振的原因及串口波特率误...

    在设计51系列的单片机系统时,一般选用11.0592MHz的晶振而不选用12MHz的晶振,为什么?12M的晶振,振荡频率明显高于11.0592M的,按理说12MHz的晶振可以提高单片机的性能,那么我们 ...

  4. 《电子DIY》之《单片机实践项目》之基于51单片机+光敏电阻的简易光照强度测量系统设计电路图绘制及讲解

    <电子DIY>之<单片机实践项目>之基于51单片机+光敏电阻的简易光照强度测量系统设计电路图绘制及讲解 添加链接描述

  5. 《电子DIY》之《单片机实践项目》之(51单片机)proteus中带编码信号的电机的详细讲解及电路图绘制(motor encoder)

    此课程主要讲解如何使用51单片机进行实战应用,分为多次课,每次课都会分别围绕一个课程设计或毕业设计(实践项目)展开.手把手叫你学51单片机."Proteus仿真","电子 ...

  6. 基于51单片机的太阳能追光系统 基于51单片机的锂电池太阳能充电器

    基于51单片机的太阳能追光系统 基于51单片机的锂电池太阳能充电器 基于51单片机的锂电池追光充电系统 具体功能:根据太阳光照方向改变光板朝向,利用太阳能给锂离子电池充电,实时显示上下左右四个方向不同 ...

  7. 详解步进电机原理及其正反转驱动程序(51单片机)

    一.步进电机基本原理 1.开环 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件. 2.工作状态 非超载时,电机转速.转过的角度取决于脉冲信号的频率和脉冲数. 3.线性关系 给电机施加一个脉冲 ...

  8. I2C总线原理和应用实例(51单片机和AT24C02的I2C通讯)

    1. I2C简介 I2C(Inter-Integrated Circuit:内部集成电路)总线是由Philips公司开发的一种简单.双向二线制同步串行总线.(来源于百度百科) 总结其主要特点如下: 只 ...

  9. 51单片机C语言波特率十六进制,理解51单片机串口通信的波特率与USB转串口通信...

    RS232 在我们电脑上,一般都会有一个9针的串行接口,这个串行接口叫做RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口. 九针 ...

最新文章

  1. arm汇编学习(二)
  2. Python基础教程:对象的方法
  3. 2018辽宁计算机学校高考,2018辽宁高考分数线
  4. 预留创建时检查增强点:nbsp;MB_RE…
  5. php的延时sleep函数
  6. 阿里云资深技术专家杨皓然:Serverless 是正在发生的未来
  7. 计算机网络结构与数据交换技术
  8. ipp for windows下载与安装 vs2017
  9. activityMq初步使用
  10. mysql怎么直接显示对象信息_详解 Navicat 查看方式之对象列表
  11. matlab解二元二次方程组
  12. Edge浏览器设置网速限制
  13. 2021年幼儿园教师招聘:小班梳子画《小草》
  14. 【金猿人物展】龙盈智达首席数据科学家王彦博:量子科技为AI大数据创新发展注入新动能...
  15. 【WLAN】【测试】WLAN相关测试软件一览
  16. c语言第九章课后作业答案,c语言第九章习题带答案
  17. 5.18 优先队列(堆) 滑动窗口(二) 交换链表的节点
  18. 微信登录画面_每次打开微信登录界面,都会看到一个小人,他是谁呢?
  19. 线性回归与逻辑回归/朴素贝叶斯
  20. 张艾迪(创始人): 辍学的互联网天才

热门文章

  1. C# Excel 行高,列宽,合并单元格,单元格边框线,冻结
  2. 2022-2028年全球及中国多功能示波器行业投资前景分析
  3. 利用Cloudflare搭建ChatGPT API 代理服务器 傻瓜教程
  4. Ceph分布式文件系统集群搭建详解
  5. The Standard C Library电子书pdf下载
  6. 柳传志:我尊称马云是“马校长”,为湖畔大学正名
  7. Redis-15、发布订阅
  8. C程序的存储空间布局
  9. HDU3338 (建图原理详解)
  10. 从零认识dB和dBm以及dBi、dBd、dBc和dBV