ATtiny817 具有不同的寄存器来控制引脚的方向。首先,我们有如下所示的 DIR 寄存器。
为了设置引脚输出或输入,我们可以分别将 1 或 0 写入寄存器的特定位。例如,要将引脚 PC0 设置为输出,我们可以写PORTC.DIR = 1<<0.此语句会将引脚 PC0 设置为输出,但也会将其他引脚设置为输入。
为了屏蔽其他引脚,我们可以先读取寄存器,然后修改第 0 位,然后将数据写回寄存器。这可以按如下方式完成PORTC.DIR |= 1<<0
或者,要将特定引脚设置为输出或输入,我们也可以使用 DIRSET 和 DIRCLR 寄存器。
要将引脚 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 寄存器。
将 1 写入特定位会将引脚设置为高电平,写入 0 会将引脚重置为低电平。但就像DIR寄存器一样,该寄存器也会影响其他引脚的状态。因此,我们可以通过首先读取寄存器,然后修改一位,然后将数据写回寄存器来设置和复位一个特定的引脚。
PORTC.OUT |= 1<<0;
_delay_ms(1000);
PORTC.OUT &= ~(1<<0);
_delay_ms(1000);
|