微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 单片机必须了解的外设功能——GPIO/串行通信

单片机必须了解的外设功能——GPIO/串行通信

时间:08-07 来源:网络 点击:

映开关的值的程序例。首先通过pinMode函数来指定与开关相连的引脚作为输入引脚,将与LED连接的引脚作为输出引脚(①)。只需在开始时定义一次就够了,之后将在setup函数中进行处理。

  接下来,"只要按下开关LED就点亮,不按开关LED就熄灭"的部分在loop函数中进行处理。开关是否被按下要根据digitalRead(PIN_SW)返回的值来判断。所以GR-SAKURA的开关在什么都不做(松开)的状态下为HIGH电平(通过上拉电阻连接电源),被按下时为LOW电平(连接GND)。

  如果digitalRead(PIN_SW)返回的值为LOW电平时=开关被按下(②)、LED将被点亮。D1的LED为digitalWrite(PIN_LED0, HIGH)时将被点亮(③)。

  如果判断为开关没被按下时,当是digitalWrite(PIN_LED0, LOW)时(④),GPIO的输出为LOW电平,LED熄灭。

  图3:程序例

  请试着使用GR-SAKURA的Web编译器来执行图4所示的程序。Web编译器的使用方法请参考嵌入系统入门系列的"第一次挑战制作!

  程序的提示 通过"振荡"来防止误操作

  开关是用来接通(开关有时显示为"关")和切断(开关有时显示为"开")电路的,即开和关。在开关等装置机械地进行开和关的操作时,任何一种状态都不可能在一瞬间完成。装置会发生非常快速的振动,并非常精细地在开和关之间反复动作后才会转变为新的状态。这种现象被称为"振荡"。为了让大家更容易理解"振荡"的现象,我们制作了一个简单易懂的体验程序(图4)。请大家也试着体验一下吧。

  图4:振荡体验程序

  试着通过控制开关反复点亮、熄灭LED来执行所期望的动作,怎么样?是不是有时如你所愿,有时又适得其反?产生这种现象的原因就是因为振荡。如果将振动过程中的状态作为开关的信号读取出来,将得不到正确的结果。因此,需用防振荡程序来解决。

  在图3的程序中,检测到开关最初被按下后先停止50微妙(0.05秒)后再进行处理(图3中的⑤)。如果不停止,在检测到开关被按下时虽然LED也会亮灯,但接下来确认开关的状态时,由于振荡的原因,有可能会认为是"开关处于松开的状态"(因为输入暂时还没返回到HIGH)而导致LED熄灭。因此,如上所述,我们通过在开关的状态稳定之前停止处理(50微妙)的方式来解决这个问题。
  

  我们一起学习了GPIO的结构和使用方法。如果将程序中的PIN_LED0的部分换成别的LED号(仅在选0?3时有效),将可以变换闪烁的LED。另外,如果改写判断部分的程序,也可以进行诸如"按两次则LED亮灯,接下来再按1次时熄灭"等复杂的处理。这次的体验程序只使用了GR-SAKURA上的输入/输出设备,但也可将带有数字输出功能的外部传感器连接到GR-SAKURA的I/O端子上,也可以连接LED以外的设备(如电子蜂鸣器)。

  串行通信

  单片机与外围设备的连接:并行和串行

  单片机是嵌入式设备的"头脑",其与作为嵌入式设备的"手和脚"是各种外围设备(输入输出设备等)连接。单片机应该怎样与这些外围设备连接才好呢?比如,我们来考虑一下将传感器与单片机连接的情况。如果使用本连载第1期中介绍的"GPIO"的话,从传感器向单片机传送8位信号时需要使用8个引脚。这种传送模式被称为并行(并行通信)模式(图1―左)。但是,仅一个传感器就需要连接8个引脚,确实太可惜了,是否还有连接更少的引脚就能达到同样目的的方法呢?

  此时,可使用串行传送模式(串行通信)。 "串行"的意思就是直列或直线。通过并行传送模式(Parallerl Transferring Mode)中需要8个引脚才能实现的通信,在串行传送模式(Serial Transfer Mode)中,由于可以以排成一直线的模式进行传送,所以仅需一个引脚就够了(图1―右)。由于在单片机内部是通过并行模式来进行信号交换,所以还需将通过串行模式传送来的信号转换为并行模式(串行并行转换)。相反,从单片机向与单片机串行连接的外围设备传送的信号也需要将信号从并行模式转换为串行模式(并行串行转换)。瑞萨电子的单片机RX63N是通过被称为SCI(Serial Communication Interface,串行通信接口)的单元进行这些转换的。例如,使一个引脚对应1位 的char型变量进行信息交换的是并行通信(Parallel communication),而一个引脚以时分(time division)按每1位进行信息交换的就是串行通信(Serial Communication)。

  

  由于串行连接仅使用少数引脚便可进行,所以,近年来多被用于单片机和外围设备之间的连接。GPIO除了用于将驱动电机的信号及LED闪烁等软件操作结果的信号输出时以外,还被用于通过开关或ON/OFF输出的传感器的输入等。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top