[PIC®/AVR®/dsPIC®产品]

Atmega644 GPIO引脚输出高低电平翻转问题

[复制链接]
1315|6
手机看帖
扫描二维码
随时随地手机跟帖
dengdc|  楼主 | 2021-10-12 21:47 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2021-10-13 21:01 编辑

我用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输入引脚地址
不知道是怎么能够实现翻转的?

使用特权

评论回复
dengdc|  楼主 | 2021-10-12 21:49 | 显示全部楼层
PINB在数据手册定义:

使用特权

评论回复
dengdc|  楼主 | 2021-10-12 21:52 | 显示全部楼层
4299461659316b02a5.png

使用特权

评论回复
dengdc|  楼主 | 2021-10-12 21:54 | 显示全部楼层
数据手册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.

使用特权

评论回复
juventus9554| | 2021-10-12 21:57 | 显示全部楼层
AVR的一个特色

使用特权

评论回复
dengdc|  楼主 | 2021-10-12 21:59 | 显示全部楼层
ATMEGA32就没有这个功能。

使用特权

评论回复
pzsh| | 2021-10-13 21:00 | 显示全部楼层
这个估计要看I/O口的内部设计

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

892

主题

13885

帖子

7

粉丝