Qual é a diferença entre ler PORTA e PINA? Qual a relação entre uma porta e seus pinos? Estou realmente confuso !!! amostra de leitura PORT: (o pino de leitura não é útil aqui)
Montagem f = 1MHZ ATmega8 Preciso complementar o PORTB a cada 1ms. (Dutycycle = 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
Respostas:
PORT é o buffer de SAÍDA, PIN é o buffer de ENTRADA.
Quando desejar definir o pino para uma tensão "alta" ou "baixa", escreva no registro PORT.
Quando você quiser saber qual a voltagem atualmente apresentada a um pino, leia o registro do PIN.
Os bits desses registradores representam os pinos correspondentes da porta de entrada / saída de uso geral.
Aqui está um esquema simplificado dos componentes eletrônicos dentro do AVR conectados a um único pino (clique aqui para obter fichas técnicas completas).
Este bloco de circuito é repetido para cada pino. Oito deles formam uma porta (porta A, por exemplo).
Começando na praça mais à esquerda (que representa a conexão física com o mundo externo), você pode ver três caminhos:
Deve-se notar que parte ou todo esse circuito pode ser ignorado quando o pino é compartilhado com um periférico interno. Por exemplo, o conversor analógico-digital (ADC).
fonte
Concordo com a resposta DrFriedParts completamente, no entanto, quero acrescentar que, de fato, você pode ler
PORT
para descobrir se a porta / pino está configurada como SAÍDA alta ou baixa (quandoDDR
=1
porta / pino configurada como saída) ou se o interno o resistor de pullup está ativado (quandoDDR
=0
porta / pino configurada como entrada). Dessa maneira, uma porta de porta pode ser usada (de maneira bastante tola) como armazenamento geral ou para passar informações sobre o estado dos pullups de saída / entrada, como no cenário a seguirTalvez uma parte do seu programa grave algo em portas ou ative / desative pullups, e a outra parte do programa leia
PORT
para descobrir como ele está configurado. LerPORT
imediatamente após a escritaPORT
não faz sentido: depois de escreverPORT
, você sabe qual é o valorPORT
.fonte
Para seus propósitos, a leitura do PORT realmente faz sentido: os pinos em questão são pinos de saída e você simplesmente deseja ler o último valor que escreveu, alterná-lo e escrevê-lo novamente. Então você está usando o registrador de portas como um byte de RAM observável externamente.
Por outro lado, para esse aplicativo em particular, você poderia simplesmente manter o valor em um registro e nem precisaria ler novamente o registro PORT.
fonte