历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | AVR开发 Arduino方法(一) 端口子系统

2019-12-05 来源:elecfans

  Arduino UNO R3的主处理器ATMega328P上有3个8位的输入/输出端口,分别是PB,PC和PD。Arduino IDE提供的Blink示例可以帮助我们了解端口的数字输出功能: 


 1 // Blink.ino

 2 int led = 13;

 3 

 4 void setup() {

 5   pinMode(led, OUTPUT);

 6 }

 7 

 8 void loop() {

 9   digitalWrite(led, HIGH);

10   delay(1000);

11   digitalWrite(led, LOW);

12   delay(1000);

13 }


   这个示例使Arduino开发板13(PB5)引脚上的LED闪烁,与数字输出相关的Arduino库函数有:


  pinMode(pin, mode):配置指定引脚为输入或输出


  pin:指定引脚


  mode:OUTPUT(输出),INPUT(输入)或INPUT_PULLUP(带上拉电阻的输入)


  digitalWrite(pin, value):从指定引脚输出电平


  pin:指定引脚


  value:LOW(低电平,0V),HIGH(高电平,5V)


  ATMega328P的每个端口都由3个相关寄存器控制,方向寄存器DDRx(x = B, C, D)用于指定端口引脚方向,若向其中某位写入1,则该位控制的引脚被设置为输出,写入0则为输入。输出寄存器PORTx(x = B, C, D)在该端口引脚被设置为输出时,写入1则输出高电平,写入0则输出低电平;在该端口引脚被设置为输入时,写入1则对其启用上拉电阻,即在该端口引脚被悬空时默认输入高电平。输入寄存器PINx(x = B, C, D)在端口引脚被设置为输入时存储该端口引脚的输入,若端口引脚输入高电平,则寄存器相应位被置为1,输入低电平则置为0。


  通过直接访问寄存器改写以上程序为:


1 // Blink_reg.ino

2 void setup() {

3   DDRB |= (1 << PB5);

4 }

6 void loop() {

7   PORTB ^= (1 << PB5);

8   delay(1000);

9 }


  如图所示连接电路,使按键的的两端分别连接在Arduino开发板2(PD2)引脚和GND(地)引脚上:

  这样使得按键在没有按下时2(PD2)引脚处于悬空状态,因此需要将2(PD2)引脚设置为带上拉电阻的输入模式。下面的示例使得按键在按下时13(PB5)引脚上的LED点亮,按键松开时LED熄灭:


 1 // DigitalInputPullup.ino

 2 void setup() {

 3   pinMode(2, INPUT_PULLUP);

 4   pinMode(13, OUTPUT);

 5 }

 6 

 7 void loop(){

 8   int seneorVal = digitalRead(2);

 9 

10   if (sensorVal == HIGH) {

11     digitalWrite(13, LOW);

12   }

13   else {

14     digitalWrite(13, HIGH); 

15   }

16 }


  除了pinMode()函数外,与数字输入相关的Arduino库函数有:


  digitalRead(pin):从指定引脚上读取电平


  pin:指定引脚


  函数返回LOW(低电平,0V)或HIGH(高电平,5V)


  通过直接访问寄存器改写以上程序为:


 1 // DigitalInputPullup_reg.ino

 2 void setup() {

 3   DDRB |= (1 << PB5);

 4   DDRD &= ~(1 << PD2);

 5   PORTD |= (1 << PD2);

 6 }

 7 

 8 void loop() {

 9   if (PIND & (1 << PD2)) {

10     PORTB &= ~(1 << PB5);

11   } else {

12     PORTB |= (1 << PB5);

13   }

14 }

推荐阅读

史海拾趣

Coherent Inc公司的发展小趣事

随着公司的发展,Coherent Inc.开始通过收购和整合来增强自身实力。1998年,公司以6500亿美金收购了Palomar Medical Technologies的部分业务,这一举措进一步拓宽了公司的业务范围和技术领域。此外,公司还陆续收购了多家具有技术优势的公司,如Positive Light和Lambda Physik,这些收购不仅增强了公司的技术实力,也使其在激光技术领域的地位更加稳固。

常忆科技(CHINGIS)公司的发展小趣事

在电子行业的激烈竞争中,常忆科技也面临着诸多挑战。其中,市场需求的快速变化和竞争对手的不断涌现是公司需要重点关注的问题。为了应对这些挑战,常忆科技不断调整和优化产品结构,以满足市场的多样化需求。同时,公司还加大了对核心技术的保护力度,防止技术泄露和侵权行为的发生。

在面对行业危机时,常忆科技展现出了强大的抗风险能力。公司通过加强内部管理、降低运营成本、提高生产效率等措施,成功度过了多次行业危机。这些经历不仅锻炼了公司的应对能力,也进一步提升了公司在行业中的地位和影响力。

ADTech公司的发展小趣事

AdTech公司在成立之初,以其完整的传统半导体器件工艺在通信、激光医疗和激光防卫领域获得了广泛认可。然而,随着技术的不断进步和市场的变化,公司管理层意识到需要转型以维持竞争优势。2008年,经过三年的技术储备,AdTech决定将原有的光电探测器业务剥离,转而专注于量子级联激光器(QCL)的研发和生产。这一决策使公司能够专注于前沿技术,逐渐在QCL领域建立了领先地位,成为美国各大QCL激光设备的核心供应商。

DRS Technologies公司的发展小趣事

DRS Technologies公司成立于1968年,由Leonard Newman和David Gross两位工程师共同创立。当时,他们正在Loral Corporation研究反潜战的信号处理技术。然而,当Loral决定转向其他技术方向时,Newman和Gross决定继续他们的研究,并创立了DRS。他们的努力最终导致了AN/SQR-17无源潜艇探测系统的开发,这一系统至今仍在广泛使用。

DESIGNERSYSTEMS公司的发展小趣事

DESIGNERSYSTEMS公司意识到,要在电子行业持续发展,必须不断拓展市场。他们积极寻求跨界合作的机会,与汽车、医疗、航空航天等多个行业的领军企业建立了合作关系。通过跨界合作,DESIGNERSYSTEMS不仅将自身的技术优势应用于更广泛的领域,还从合作伙伴那里学到了更多行业知识和经验,进一步提升了自身的综合实力。

Abundance Enterprise Company公司的发展小趣事

随着国内市场的逐渐饱和,Abundance Enterprise Company开始积极拓展国际市场。公司积极参与国际电子展览和交流活动,与全球知名电子企业建立了广泛的合作关系。同时,公司还在海外设立了多个分支机构,进一步拓展国际业务。这些举措不仅提升了公司的国际影响力,也为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

关于下一步怎样学习verilog,FPGA的问题

在下,学习verilog也有一段时间了,虽然不是很长,但verilog基本上是会用了。前一段时间用verilog写过一些类似于电子钟,交通灯控制系统的程序,还有频率计等。现在我感到很迷茫,不知道接下来的路该怎样走。请高手为我指一条明道,越具体越详细越 ...…

查看全部问答>

【藏书阁】模拟电子技术 PPT (西电版 江晓安)

目录: 第一章  半导体器件 第二章  放大电路分析基础 第三章  放大电路的频率特性 第四章  场效应管放大电路 第五章  负反馈放大电路 第六章  集成运算放大器 第七章 ...…

查看全部问答>

全美智能手机报告:黑莓苹果依然领先

replyreload += \',\' + 377092; 本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 Timson,如果您要查看本帖隐藏内容请回复 …

查看全部问答>

WinCE Mobile下D3DM 3D显示问题

我现在要在wince下实现D3DM显示,不知如何利用非托管程序实现.x文件导出的3d图像。 马宁做个讲座的,但最后讲的不是很清楚。他讲的是利用托管程序实现。 不知谁有他讲座的ppt资料。…

查看全部问答>

可以使用任何字体的gvim for win32

下载地址:http://download.eeworld.net/source/342371 大家可能在使用 gvim for win32 的时候,会遇到不能设置自己中意的字体的问题。原因在于官方(www.vim.org)版本的 gvim for win32 只是简单的列出每个字体族中的一种字体,而不是全部。我做了 ...…

查看全部问答>

用MSVC1.52和MASM6.11编译Loadcepc.mak问题

请问下 我用MSVC1.52编译 loadcepc.mak  我现在编译它的系统是XP 这个是怎么回事呢? 我要设置些什么呢? 还是本来就系统不对啊 还是要换个系统编译 错误信息: Invoking external build utility... \'NMAKE\' 不是内部或外部命令, ...…

查看全部问答>

关于STR711F的远程升级。。。

                                 准备采用STR711F芯片升级原来的51系统了,但是老板要求有代码远程升级的功能,我的系统是带有GPRS通信的功能的,不 ...…

查看全部问答>

codewarrior请教

刚接触单片机不久,项目中有用到codewarrior开发一个控制系统,用的片子是定制的c*core,用给的工程模板打开工程文件后报错如图所示,应该是找不到编译器和连接器的意思吧,这样就无法编译综合了,请教给位前辈这个问题应该怎么解决啊?十分感谢…

查看全部问答>

对TI Stellaris发展的一点看法

      现在的MCU市场竞争太激烈了,有久经沙场的老将,也有刚出茅庐的新手,林林总总几十上百家做MCU的公司,也很难说得上谁占据绝对优势,正如几年前不同厂商采用各自的内核进行竞争一样,都做得有声有色。而现在为什么A ...…

查看全部问答>

[学习分享]VLO的使用

    MSP430G2XXX系列基本上都集成了VLO时钟,TI的教学视频里一带而过,网络上也没有详细的资料,在这里我来分享一下自己在学习和使用VLO中的一点心得。一、认识VLO    Very-Low-Power Low-FrequencyOscillator (VLO),也就是超 ...…

查看全部问答>