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

ATtiny817 控制输出引脚

[复制链接]
604|6
手机看帖
扫描二维码
随时随地手机跟帖
gejigeji521|  楼主 | 2024-3-25 19:48 | 显示全部楼层 |阅读模式
ATtiny817 具有不同的寄存器来控制引脚的方向。首先,我们有如下所示的 DIR 寄存器。
27687660163f961677.png
为了设置引脚输出或输入,我们可以分别将 1 或 0 写入寄存器的特定位。例如,要将引脚 PC0 设置为输出,我们可以写PORTC.DIR = 1<<0.此语句会将引脚 PC0 设置为输出,但也会将其他引脚设置为输入。

为了屏蔽其他引脚,我们可以先读取寄存器,然后修改第 0 位,然后将数据写回寄存器。这可以按如下方式完成PORTC.DIR |= 1<<0

或者,要将特定引脚设置为输出或输入,我们也可以使用 DIRSET 和 DIRCLR 寄存器。

6960366016430bbdb3.png
要将引脚 PC0 设置为输出,我们可以使用 DIRSET 寄存器,PORTC.DIRSET = 1<<0.要将引脚 PC0 设置为输入,我们可以使用 DIRCLR 寄存器,PORTC.DIRCLR = 1<<0.

我们可以使用上述任何一种方法将引脚设置为输出。LED 连接到 PC0,因此我们将其设置为输出。

int main(void)
{
        clkInit();
        PORTC.DIR |= (1<<0);   //Set PC0 as Output, PORTC.DIRSET = 1<<0 can also be used
在 main 函数中,我们将首先初始化时钟,然后将引脚 PC0 设置为输出。

现在我们将在 while 循环中闪烁 LED。要使 LED 闪烁,我们需要在一段时间后将引脚 PC0 设置为高电平和低电平。MCU同样具有不同的寄存器来设置和复位引脚的状态。
首先,我们有 OUT 寄存器。

970166601645e933e8.png
将 1 写入特定位会将引脚设置为高电平,写入 0 会将引脚重置为低电平。但就像DIR寄存器一样,该寄存器也会影响其他引脚的状态。因此,我们可以通过首先读取寄存器,然后修改一位,然后将数据写回寄存器来设置和复位一个特定的引脚。
PORTC.OUT |= 1<<0;
_delay_ms(1000);
PORTC.OUT &= ~(1<<0);
_delay_ms(1000);



使用特权

评论回复
gejigeji521|  楼主 | 2024-3-25 19:48 | 显示全部楼层
上面的代码显示了我们如何通过修改 OUTput 寄存器的位 0 来闪烁 LED。我提供了 1 秒的延迟,因此 LED 将保持亮起 1 秒钟,然后再熄灭一秒钟。

或者,我们使用 OUTSET 和 OUTCLR 寄存器来控制仅 1 个引脚的状态。
734226601648201853.png
将 1 写入 OUTSET 寄存器的特定位会将引脚设置为高电平,而不会影响此端口的其他引脚。写入 0 时对引脚的状态没有任何影响。

同样,将 1 写入 OUTCLR 寄存器的特定位会将引脚重置为低电平,而不会影响此端口的其他引脚。写入 0 时对引脚的状态没有任何影响。
PORTC.OUTSET = 1<<0;
_delay_ms(1000);
PORTC.OUTCLR = 1<<0;
_delay_ms(1000);

使用特权

评论回复
gejigeji521|  楼主 | 2024-3-25 19:52 | 显示全部楼层
上面的代码显示了我们如何通过修改 OUTSET 和 OUTCLR 寄存器的位 0 来闪烁 LED。我提供了 1 秒的延迟,因此 LED 将保持亮起 1 秒钟,然后再熄灭一秒钟。

我们还有另一种选择来闪烁 LED。OUTTGL寄存器可用于切换特定输出引脚的状态。
41244660164a2de96c.png
将 1 写入 OUTTGL 寄存器的特定位将切换特定引脚的状态,而不会影响此端口的其他引脚。写入 0 时对引脚的状态没有任何影响。
PORTC.OUTTGL = 1<<0;
_delay_ms(1000);

上面的代码显示了我们如何通过修改 OUTTGL 寄存器的位 0 来闪烁 LED。我提供了 1 秒的延迟,因此 LED 将保持亮起 1 秒钟,然后再熄灭一秒钟。

使用特权

评论回复
黑心单片机| | 2024-3-26 14:38 | 显示全部楼层
就是高低电平控制呗

使用特权

评论回复
稳稳の幸福| | 2024-3-26 19:41 | 显示全部楼层
方向寄存器控制IO当前是输入还是输出。

使用特权

评论回复
药无尘| | 2024-3-27 11:38 | 显示全部楼层
通过修改 OUTTGL 寄存器的位来输出高低电平

使用特权

评论回复
yiy| | 2024-3-28 23:03 | 显示全部楼层
寄存器操作单片机。

使用特权

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

本版积分规则

166

主题

2141

帖子

8

粉丝