搜索

[8/16位单片机] Atmega644 GPIO引脚输出高低电平翻转问题

[复制链接]
152|5
 楼主 | 2020-5-12 09:34 | 显示全部楼层 |阅读模式
本帖最后由 tom_xu 于 2020-5-12 09:39 编辑

各位大侠,有个问题请教下,
我用Atmel Start自动生成的项目文件,PORTB GPIO输出高低电平翻转的代码如下:
/**
* \brief Toggle output level on pin
*
* Toggle the pin levels on pin
*
* \param[in] pin       The pin number for device
*/
static inline void PORTB_toggle_pin_level(const uint8_t pin)
{
        PINB = 1 << pin;
}

也就是说 第一次调用PORTB_toggle_pin_level(2)
PB2输出高电平
第一次调用PORTB_toggle_pin_level(2)
PB2输出低电平
但是PINB是PortB Input Pins Address, PORTB输入引脚地址
不知道是怎么能够实现翻转的?
谢谢!


使用特权

评论回复
 楼主 | 2020-5-12 09:40 | 显示全部楼层
PINB在数据手册定义:

PINB.png

使用特权

评论回复
| 2020-5-12 10:04 | 显示全部楼层
数据手册67页:
12.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.

使用特权

评论回复
| 2020-5-12 10:06 | 显示全部楼层
AVR的一个特色

使用特权

评论回复
 楼主 | 2020-5-12 10:17 | 显示全部楼层
ynwa 发表于 2020-5-12 10:04
数据手册67页:
12.2.2 Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, ind ...

太牛了!!!高手!

使用特权

评论回复
 楼主 | 2020-5-12 10:22 | 显示全部楼层
ATMEGA32就没有这个功能。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表