读取端口和PIN的区别


9

读PORTA和PINA有什么区别?端口与其引脚之间的关系是什么?我真的很困惑!!! 读取端口的示例:(读取引脚在这里没有用)

装配f = 1MHZ ATmega8我需要每1ms对PORTB进行一次补充(占空比= 50%)

    LDI R16,$FF
    OUT DDRB,R16
    MAIN: LDI R16,00
    DELAY:CPI R16,200
    BREQ LOOP
    INC R16
    RJMP DELAY
    loop:IN R17,PORTB
    COM R17
    OUT PORTB,R17
    OUT R17,PORTB
    RJMP MAIN

我们是否应该使用水晶球来找出您正在使用哪个微控制器(以及代码:哪种编程语言)?
Wouter van Ooijen

抱歉,已编辑。
汉娜(Hanna)

这是您自己的代码,还是来自示例?如果是一个例子,它从哪里来?你为什么说“图钉在这里没有用”?
angelatlarge 2013年

我之前在AVR studio中测试过。您认为IN R17,PINB是正确的吗?
汉娜(Hanna)2013年

Answers:


13

PORT是输出缓冲区,PIN是输入缓冲区。

当您要将引脚设置为“高”或“低”电压时,请写入端口寄存器。

当您想知道当前施加给引脚的电压时,请阅读PIN寄存器。

这些寄存器的位代表通用输入/输出端口的相应引脚。

这是连接到单个引脚的AVR内部电子设备的简化示意图(有关完整的数据手册,请点击此处)。

每个引脚重复此电路块。其中八个形成端口(例如,端口A)。

在此处输入图片说明

从最左边的正方形(代表与外界的物理连接)开始,您可以看到三个路径:

  1. 最上方的路径是软件可选的上拉电阻
  2. 当引脚配置为输出时,使用中间路径
  3. 当引脚配置为输入时,使用最低路径

应该注意的是,当该引脚与内部外围设备共享时,可以旁路部分或全部电路。例如,模数转换器(ADC)。


+1还值得注意的是,当端口配置为输入时,将1写入PORT的任意位将启用该引脚上的内部上拉电阻。
马特·杨

我什么时候应该阅读PORT?
汉娜(Hanna)2013年

您是从PIN读取的。从PORT读取不会给您任何有用的信息。
马特·杨

@user-从PORT读取将为您提供上拉电阻的状态(是否为该引脚启用了上拉),但是正如Matt Young所提到的那样,这没什么用。
DrFriedParts 2013年

我添加了一个阅读端口的示例
Hanna 2013年

4

我完全同意DrFriedParts的回答,但是,我确实要补充一句,您确实可以阅读PORT以了解端口/引脚配置为OUTPUT高还是低(当DDR=时1,端口/引脚配置为输出)还是内部上拉电阻被激活(当DDR=时0,端口/引脚配置为输入)。这样,就可以将端口port(以一种相当愚蠢的方式)用作常规存储,或传递有关输出/输入上拉状态的信息,如以下情况所示

也许程序的一部分将某些内容写入端口或激活/停用上拉,而程序的另一部分则进行读取PORT以了解其配置方式。PORT写作后立即阅读PORT没有意义:写过PORT,您就会知道的价值PORT是什么。


您能给我一个更好的代码吗?为什么在IN R17,PINB那里没有回答?
汉娜(Hanna)2013年

从您的问题中尚不清楚您要做什么...您可以在问题中加以澄清:此代码段的目标是什么?您是否只是想以特定的频率和占空比切换端口?
angelatlarge

是的!就这样
Hanna

1

就您的目的而言,从PORT读取实际上是有道理的:有问题的引脚是输出引脚,您只想读取最后写入的值,切换该值并将其写回即可。因此,您将端口寄存器用作外部可观察RAM的字节。

另一方面,对于这个特定的应用程序,您只需将值保存在寄存器中,甚至不必回读PORT寄存器。


那么,为什么读取PIN码不正确?
汉娜(Hanna)2013年

从PIN上获得的值原则上取决于外部连接到该引脚的值,并且在您的特定应用程序中,您只对您先前自己编写的值感兴趣(当然,这是I的非典型值) / O针)。但实际上,我希望这里的PORT和PIN的值相同(您尝试过吗?)。
microtherion

是的,我之前已经在AVR Studio中对其进行过测试。我认为您所说的是对的。我们只需要补充端口值即可
Hanna
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.