- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
昨晚,我和一个 friend 遇到了一个异常现象,我们试图理解它,但无法理解。当时我们正在使用 AVR 组件使用 ATTiny2313,今天我在 ATMega328P 上的 Arduino 中复制了完全相同的体验。
我注意到他的代码中有一个错误,他使用 PINB,6
将 LED 设置为高电平(后来又设置为低电平)。我告诉他使用 PORTB,6 ,但(由于某些其他原因)根本不起作用。现在整个代码都消失了,所以我在 Ardunio C++ 中复制了它,并得到了意想不到的结果,当分配正确时,一切都会正常工作,但当分配不正确时,LED 会以一半的速率闪烁。这似乎是一个阶段问题。
在进入代码之前,我知道您无法通过 PIN
分配输出,问题是我们尝试过(错误)并试图了解它是如何工作的。
void setup(){
DDRB=0xFF;
}
void loop(){
PORTB |= 1<<5; // turns on the LED
delay(500);
PORTB &= ~(1<<5); // turns off the LED
delay(500);
}
上面的代码是正确的,LED 每 500 毫秒切换一次
void setup(){
DDRB=0xFF;
}
void loop(){
PINB |= 1<<5; // turns on the LED
delay(500);
PINB &= ~(1<<5); // turns off the LED
delay(500);
}
现在上面的代码实际上偶尔可以工作。它不是每 500 毫秒打开和关闭一次,而是每秒打开和关闭一次!
我已经检查了芯片的电路图(实际上是 ATMEga128,因为我这里有 PDF 的硬拷贝),第 66 页,图 30,通用数字 I/O。
该电路表明 PINx 是只读的,但显然您可以设置它,尽管似乎需要每三次设置一次。
有趣的是,如果您只设置 PINx(如以下代码所示:)
void loop(){
PINB |= 1<<5; // turns on the LED
delay(500);
}
LED 开关!每 500 毫秒。尝试清除 OUTPUT 也是行不通的,只能设置它。
再说一遍,我知道这不是 OUTPUT 的设置方式,我只是想理解它为什么会这样做。
最佳答案
您遇到过 ATmega 系列的一个经常被忽视的功能:在 PINx 寄存器中设置一个位会切换 PORTx 中的相应位。
来自ATmega328P datasheet中的第77页:
14.2.2 Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.
关于assembly - 设置 PINx 时会发生什么?为什么它有时会起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21083552/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!