前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >物联网-I/O准双向输出实验

物联网-I/O准双向输出实验

原创
作者头像
会洗碗的CV工程师
修改2024-02-13 16:47:57
2040
修改2024-02-13 16:47:57
举报
文章被收录于专栏:LongJava学习资料LongJava学习资料

一、实验目的

学习STC12C5A单片机IO口知识。

二、实验设备

硬件:IOT-L01-05型物联网综合实验箱1台,串口线。

软件:Keil u Vision4编译软件,STC下载软件STC_ISP_V479。

三、实验原理

芯片手册:配套光盘\附件\芯片手册\STC单片机手册\STC12C5A60S2.pdf

源码路径:配套光盘\源代码\STC12C5A16S2基础实验\实验一 IO口准双向实验

hex文件路径:配套光盘\源代码\STC12C5A16S2基础实验\可执行程序\IO.hex

3.1 ?STC12C5A16S2系列单片机I/O口工作原理

STC12C5A16S2系列单片机所有I/O口均(新增P4口和P5口)可由软件配置成4种工作类型之一,如图3.1所示。4种类型分别为:准双向口/弱上拉(标准8051输出模式)、强推挽输出/强上拉、仅为输入(高阻)或开漏输出功能。每个口由2个控制寄存器中的相应位控制每个引脚工作类型。STC12C5A60S2系列单片机上电复位后为准双向口/弱上拉(传统8051 的I/O口)模式。2V以上时为高电平,0.8V以下时为低电平。每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过120mA。

每个管脚的工作模式由PxM1与PxM0两个寄存器控制(x的取值为:0,1,2,3,4,5),且PxM1与PxM0寄存器的具体某一位(如:P1M1和P1M0的第2位),与相应的IO口的寄存器具体某一位(P1口的第2个管脚)对应。

图3.1 ?STC12C5A60S2的I/O口工作模式

3.2 I/O准双向工作模式介绍

STC12C5A16S2的准双向口输出类型可用作输出和输入功能不需重新配置口线输出状态。这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为0时,它的驱动能力很强,可吸收相当大的电流。准双向口有3个上拉晶体管适应不同的需要。

在3个上拉晶体管中,有1个上拉晶体管称为“弱上拉”,当口线寄存器为1且引脚本身也为1时打开。此上拉提供基本驱动电流使准双向口输出为1。如果一个引脚输出为1而由外部装置下拉到低时,弱上拉关闭而“极弱上拉”维持开状态,为了把这个引脚强拉为低,外部装置必须有足够的灌电流能力使引脚上的电压降到门槛电压以下。

第2个上拉晶体管,称为“极弱上拉”,当口线锁存为1时打开。当引脚悬空时,这个极弱的上拉源产生很弱的上拉电流将引脚上拉为高电平。

第3个上拉晶体管称为“强上拉”。当口线锁存器由0到1跳变时,这个上拉用来加快准双向口由逻辑0到逻辑1转换。当发生这种情况时,强上拉打开约2个时钟以使引脚能够迅速地上拉到高电平。其内部电路结构如图3.2所示。

图3.2 ?准双向内部电路

3.3 ?硬件原理设计

相关硬件原理图如图3.3所示。

图3.3 ?硬件原理图

由上面电路图可以看出为了使LED灯的D1发光需要将P1口的第0管脚设置为0,准双向输入,这个时候他的驱动能力很强,可以吸收D1过来的电流形成通路,从而使得D1发光。当P1口的第0管脚设置为1,准双向输出时,这个时候管脚驱动能力很弱, D1过来的电流不能形成电流通路,从而使得D1不发光。

3.4 实验源代码解析及流程图

首先进行初始化,将灯的状态置为灭。之后进入一个死循环,使程序一直在运行,在死循环中,每一次循环调用一次延时函数(延时一定时间)。延时完毕之后,对灯的状态进行取反,完成灯的状态装换。

四、实验步骤

4.1 ??编写实验源代码文件

4.1.1 ?打开Keil集成开发环境,创建IO工程,如图4.1所示。 ?????

图4.1 IO工程项目

4.1.2 ?配置IO工程的参数。

4.1.3 ?编写IO.c源代码。

4.1.4 ?编译工程文件,生成可执行IO.hex文件。

4.1.5 ?使用串口线将电脑与物联网综合实验箱中带有STC单片机的底板连接,拨打好串口控制开关。

4.1.6 ?将可执行IO.hex文件通过STC_ISP串口下载软件下载进STC单片机中。

4.1.7 ?将下载完程序的开发板从新上电。

4.2 ?实验源代码解析

IO.c源代码

代码语言:c
复制
/**************************************************************
* ?晶振频率 ???:选取用RC 11.0592MHz
* ?文件名 ?????:IO.c
* ?功能说明 ???:STC12C5A16S2单片机的I/O口演示实验
* ?制作 ???????:www.frotech.com
* ?变更记录 ???:2013.04.27
* ?变更内容 ???:新建造
*************************************************************/
#include <STC12C5A60S2.h>
#define Main_Fosc 11059200L  //定义外部晶振的频率
sbit ?P1_0 = P1^0; //定义特殊功能寄存器位变量P1_0为P1口的第0位
void delay_ms(unsigned char ms); //声明毫秒级延时函数
/*************************************************************
* ?函数名:main( void )
* ?输入:无
* ?输出:无
* ?功能描述:实验LED的D1灯循环闪烁
*************************************************************/
void main(void)
{
 P1_0 = 1;   //P1_0输出使得D1初始状态为灭
  while(1)
 ??{
  delay_ms(5000);  //延时
   P1_0 =~P1_0 ;   //对P1_0口的状态循环取反,使其亮,灭循环变化
  ?}
}
/*************************************************************
* ?函数名:delay_ms(unsigned char ms)
* ?输入:延时的时间
* ?输出:无
* ?功能描述:实现毫秒级延时
*************************************************************/
void delay_ms(unsigned char ms)
{
????unsigned int i;
 do{
 ????i = Main_Fosc /1400;
  while(--i);
 }while(--ms);
}

五、实验小结

这个实验主要是让我们熟悉试验箱和软件的交互过程,从而加深我们对实验的一些准备流程,本次实验也不是很难,主要是修改一些数值,使得灯闪烁没那么快。

我们遇到的问题就是,一开始一直没有发现那个串口,后面收拾东西的时候,发现试验箱连接线插错位置了,插到另一台电脑了,因此后面就迅速做完了。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、实验目的
  • 二、实验设备
  • 三、实验原理
  • 四、实验步骤
  • 五、实验小结
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com