历史上的今天
返回首页

历史上的今天

今天是:2025年03月23日(星期日)

正在发生

2021年03月23日 | 飞思卡尔16位单片机(三)——GPIO输出功能测试

2021-03-23 来源:eefocus

一、GPIO介绍

GPIO是单片机最常用的功能,XEP100单片机的并行I/O的资源很丰富,XEP100的IO有PORTA、PORTB、PORTH、PORTJ、PORTM、PORTP、PORTS、PORTT、PORTK和PORTE共10组IO。这些I/O口除了具有通用I/O功能外,还分别具有专用I/O的功能。可以根据需要进行设置,专用I/O功能启用后,通用I/O功能自动关闭。


在使用单片机的并行I/O时要进行一些设置,主要的设置如下所示:


1功能设置

每个I/O子系统都有一个功能设置寄存器,其中的几个位用于部分或者全部引脚的功能设定,设定为专用功能后,方向设置功能可能自然禁止,但上拉、下拉及降功率驱动功能一般仍然有效,具体取决于I/O子系统的要求。通常复位后,各引脚默认为通用I/O输入功能,具体取决于MCU的工作模式。


2方向设置

当引脚设定为通用I/O后,通过方向寄存器指定引脚的输入/输出,一般复位后默认为输入。设定为输出后,上拉、下拉功能禁止,但降功率驱动功能允许,而设定为输入后,降功率驱动功能禁止,而上拉、下拉功能允许。


3上拉/下拉

输入引脚一般可以设定是否激活上拉/下拉功能,激活后可以保证浮空引脚的输入值固定,对于非浮空引脚有时可以提高响应速度,增强抗干扰能力。


4驱动能力

输出引脚可以选择是否降低驱动功率,如果激活可以使驱动能力降低至约50%,这样可以减小对其他部分的射频辐射干扰,同时降低功率消耗,但可能少量延长过渡时间、降低响应速度,因此必须根据引脚的外部负载情况确定是否采用。


二、蜂鸣器测试

蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。有源蜂鸣器中自带震荡电路,而无源蜂鸣器中没有。普通电磁式的有源蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片和外壳等组成,振动膜在电磁线圈和磁铁的相互作用下周期性的振动发声。而无源蜂鸣器中没有振荡器,必须由外部信号来提供震荡。本开发平台上配备的是有源蜂鸣器,只要接通电源,蜂鸣器就可以发声。


在本实验中,蜂鸣器驱动电路的原理图如下图所示:

驱动电路采用三极管对蜂鸣器进行驱动,当BUZZ输入高电平时,三极管导通,蜂鸣器响; 当BUZZ输入低电平时,三极管不导通,蜂鸣器不响。


单片机对蜂鸣器的控制引脚为


PORTK5——BUZZ


采用下面的代码对蜂鸣器进行测试,其中INIT_BUZZ();为蜂鸣器的初始化代码,它将蜂鸣器的控制IO设置为输出。


void main(void) {

  DisableInterrupts;   //禁止中断

  INIT_BUZZ();

  EnableInterrupts;    //允许中断

  LEDCPU = 0;

 

  for(;;) 

  {

   BUZZ = BUZZ_ON;     //蜂鸣器响

   delay();

   BUZZ = BUZZ_OFF;    //蜂鸣器不响

   delay();

  } 

}


这个实验的代码,可以从本文的资源中下载。


将这个实验的代码烧写到单片机中,并运行,则蜂鸣器会滴滴的响。


三、发光二极管测试

发光二极管是半导体二极管的一种,可以把电能转化成光能,常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压时就会发光,光的强弱与工作电流成正比。一般情况下,LED的正向工作电流在10mA左右,如果电流过大就会烧坏LED,因此使用时必须串联限流电阻以控制通过二极管的电流。限流电阻R可用下式计算:


R=(U-UD)/ID


式中U为电源电压,UD为LED的正向压降,ID为LED的一般工作电流。


普通发光二极管的正向饱和压降为1.6V~2.1V,正向工作电流为5~20mA。发光二极管的特点是:工作电压很低(有的仅一点几伏);工作电流很小(有的仅零点几毫安即可发光);抗冲击和抗震性能好,可靠性高,寿命长;通过调制通过的电流强弱可以方便地调制发光的强弱。由于有这些特点,发光二极管在一些光电控制设备中用作光源,并广泛应用于各种电子电路、家电、仪表等设备中,做电源或电平指示。


在单片机的应用中,一般一个比较初级的入门实验就是流水灯实验。这个实验我们就来运行一个流水灯程序,实验对应的硬件电路如下图所示。

上图中,PB0~PB7可以接5V或者悬空,也可以接地。以PB0为例,当PB0接5V或者悬空时,没有电流通过,LED灯的状态是熄灭的;当PB0接地时,两端压差是5V,所以LED灯被点亮。在数字电路中,接+5V为电平“1”,接地为“0”。通常“1”为高电平,“0”为低电平。


所以在设计中,将LED连接到单片机的I/O口,此时我们只需要控制单片机的I/0口为“1”或者为“0”就可以控制LED灯的亮灭了。


8个LED与单片机引脚的对应关系如下


PORTB0——LED1


PORTB1——LED2


PORTB2——LED3


PORTB3——LED4


PORTB4——LED5


PORTB5——LED6


PORTB6——LED7


PORTB7——LED8


实验的主要代码如下所示


void main(void) {

DisableInterrupts;

  LED_dir=0xff;       //设置为输出

  LED=~data;          //点亮LED1

EnableInterrupts;

 

 

  for(;;) 

  {

      delay();

      data=data<<1;         //左移一位

      if(data==0)

          data=0x01;

      LED = ~data;

  } 

}


在这段代码中data为LED控制的码值,将它取反后赋值给PORTB,就可以对LED进行控制,修改data的值,可以改变LED的点亮情况。


将上述代码烧写到单片机中,并运行,则发光二极管以流水灯方式闪烁。


推荐阅读

史海拾趣

ALLTHREAD公司的发展小趣事

面对日益激烈的市场竞争,ALLTHREAD意识到必须不断提升生产效率和质量。于是,他们开始引入先进的自动化设备和智能化生产技术,对生产线进行全面升级。通过技术升级,ALLTHREAD的生产效率得到了大幅提升,产品质量也更加稳定可靠。

3M公司的发展小趣事

ALLTHREAD深知品牌建设的重要性。他们注重提升品牌形象和知名度,积极参加各类行业展会和论坛,与业界同仁交流学习。同时,他们还建立了完善的客户服务体系,为客户提供及时、专业的技术支持和售后服务。这些举措有效提升了ALLTHREAD的品牌影响力和客户满意度。

Aydin Corp公司的发展小趣事

在国内市场取得一定成绩后,Aydin Corp开始积极拓展国际市场。通过与全球知名企业的合作,公司成功将产品打入多个国家和地区的市场。同时,Aydin Corp还积极参加国际电子展会和交流活动,与业界同行建立了广泛的合作关系。这些举措不仅提升了公司的国际知名度,也为公司的持续发展注入了新的动力。

B&B Electronics Manufacturing Company公司的发展小趣事

在发展过程中,B&B公司注重与上下游企业的合作与共赢。公司与多家知名的芯片制造商、原材料供应商建立了长期稳定的合作关系,确保了产品的质量和供应链的稳定性。同时,公司也积极与集成商、解决方案提供商等合作伙伴开展深度合作,共同为客户提供更加完善的服务。

Herth+Buss Fahrzeugteile GmbH & Co KG公司的发展小趣事
在特定情况下(如宠物活动、热气流等),可能引发误报。
中科银河芯(GXCAS)公司的发展小趣事
输入信号的电压范围决定了三极管何时截止、何时饱和导通。

问答坊 | AI 解惑

ZT:一个技术人员悟到的管理秘诀

我在原来的公司做的时候,就注意观察公司在管理上的成功和失败的经验教训,并在网络上找很多关于管理的文章。     管理上有很多故事,让我领悟到管理就是设计一个合理的机制。          故事之一:分粥          分粥的故 ...…

查看全部问答>

驱动加载出错

我写了个驱动程序,编译没错,但是insmod的时候就出现 moduletest: please compile with -fno-common insmod: cannot insert `moduletest.ko\': Invalid module format (-1): Exec format error的错误,不知道为什么,求高手指教. 源码如下: #inclu ...…

查看全部问答>

s3c2440 for wince4.2 的 eboot启动时出现的网络端口问题,高手请进给解答一下。

启动后,DNW出现下列打印信息: WinCE NAND Boot v1.00 Jun 11 2007 11:50:13 Start Eboot... Start Launch...0 Microsoft Windows CE Ethernet Bootloader Common Library Version 1.0 Built Mar 13 2003 23:05:42 Microsoft Windows CE SMD ...…

查看全部问答>

STM32菜鸟程序!

拿到STM32开发板三天了!写了几个程序!程序简单但对入门还是有点帮助的!我自己下次调试成功了的! 上传供一起刚入门的朋友分享下! 第一天学习:MDK工程建立和GPIO 第二天学习:RCC和按键程序 第三天学习:EXTI程序(一个中断按键程序) 每 ...…

查看全部问答>

请教2407数据区与程序存储区的问题!谢谢

我用2407做一个液晶显示,因为有存放大量字符数据的常量数组,我把这些数组定义为const unsigned char 类型。cmd文件如下: -o LCD.out - stack 60 MEMORY {     PAGE 0:    /* Program Memory */      & ...…

查看全部问答>

电风扇模拟控制系统设计 求助 !!真的不会啊!!

电风扇模拟控制系统设计1.用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:“自然风”、 “常风”和“睡眠风”。2.设计 “自然风”、 “常风”和“睡眠风” 三个风类键用于设置风类; 设计一个“摇头” 键用于控制电机摇头。 &nb ...…

查看全部问答>

MSP430极品的中文资料,本人极力推荐!

偶然发现这个PDF,与别的430资料不同,这里全是经典,传上来与大家分享下!…

查看全部问答>

趣味实验

家里有一个上小学的女孩子,有一天兴冲冲的跟我说,要做一个伟大的实验给我看,并且不许我偷看。看着她神秘的样子,我想小孩子搞什么名堂。大概过了半个多小时,她跑进来把我屋里面的灯给关了,然后又匆匆忙忙的跑出去。不一会儿,她小心翼翼的端着 ...…

查看全部问答>

知道一些MOS管的选择方法

        我们知道, MOS管最常见的应用可能是电源中的开关元件,此外,它们对电源输出也大有裨益。服务器和通信设备等应用一般都配置有多个并行电源,以支持N+1 冗余与持续工作 (图1)。各并行电源平均分担负载,确保 ...…

查看全部问答>

液晶显示图片

在执行以下函数的时候 用仿真发现 i 只能加到14,然后就归零(也就是程序退不出第一个for循环),为什么?按道理说不该这样啊 显示上半屏函数: Write_Command(0x34); //  *******显示上半屏内容设置    for(i=0;i…

查看全部问答>