Sự khác biệt giữa đọc PORT và PIN


9

Sự khác biệt giữa đọc PORTA và PINA là gì? Mối quan hệ giữa một cổng và chân của nó là gì? Tôi thực sự bối rối !!! mẫu đọc PORT: (đọc pin không hữu ích ở đây)

Lắp ráp f = 1MHZ ATmega8 Tôi cần bổ sung PORTB cứ sau 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

Chúng ta có nên sử dụng quả cầu pha lê của mình để tìm ra vi điều khiển nào (và cho mã: ngôn ngữ lập trình nào) mà bạn đang sử dụng không ??
Wouter van Ooijen

Xin lỗi nó đã được chỉnh sửa.
Hanna

Đây có phải là mã của riêng bạn hay đây là từ một ví dụ? Nếu nó là một ví dụ, nó đến từ đâu? Tại sao bạn nói "đọc pin không hữu ích ở đây"?
angelatlarge

Tôi đã thử nghiệm nó trước đây trong phòng thu AVR. Bạn nghĩ IN R17, PINB có đúng không?
Hanna

Câu trả lời:


13

PORT là bộ đệm OUTPUT, PIN là bộ đệm INPUT.

Khi bạn muốn đặt chân về điện áp "cao" hoặc "thấp", hãy ghi vào thanh ghi PORT.

Khi bạn muốn biết điện áp nào hiện được hiển thị cho pin, hãy đọc thanh ghi mã PIN.

Các bit của các thanh ghi này đại diện cho các chân tương ứng của cổng đầu vào / đầu ra có mục đích chung.

Dưới đây là sơ đồ đơn giản hóa các thiết bị điện tử bên trong AVR được kết nối với một pin duy nhất (vào đây để xem dữ liệu hoàn chỉnh).

Khối mạch này được lặp lại cho mỗi pin. Tám trong số này tạo thành một cổng (ví dụ cổng A).

nhập mô tả hình ảnh ở đây

Bắt đầu từ hình vuông bên trái nhất (đại diện cho kết nối vật lý với thế giới bên ngoài), bạn có thể thấy ba đường dẫn:

  1. Đường dẫn trên cùng là điện trở kéo lên có thể lựa chọn phần mềm
  2. Đường dẫn giữa được sử dụng khi pin được cấu hình làm đầu ra
  3. Đường dẫn thấp nhất được sử dụng khi pin được cấu hình làm đầu vào

Cần lưu ý rằng một số hoặc tất cả các mạch này có thể được bỏ qua khi pin được chia sẻ với một thiết bị ngoại vi bên trong. Ví dụ: Bộ chuyển đổi tương tự sang số (ADC).


+1 Điều đáng chú ý là khi các cổng được cấu hình làm đầu vào, việc ghi 1 vào bất kỳ bit nào của PORT cho phép điện trở kéo lên bên trong trên chân đó.
Matt Young

Khi nào tôi nên đọc PORT?
Hanna

Bạn đọc từ mã PIN. Đọc từ PORT sẽ không cung cấp cho bạn bất cứ điều gì hữu ích.
Matt Young

@user - Đọc từ PORT sẽ cung cấp cho bạn trạng thái của các điện trở kéo lên (cho dù kéo lên có được bật cho pin đó hay không), nhưng như Matt Young đề cập, điều đó không hữu ích lắm.
DrFriedParts

Tôi đã thêm một mẫu đọc PORT
Hanna

4

Tôi hoàn toàn đồng ý với câu trả lời của DrFriedParts , tuy nhiên, tôi muốn thêm rằng, bạn thực sự có thể đọc PORTđể tìm hiểu xem cổng / pin được cấu hình là OUTPUT cao hay thấp (khi DDR= 1, port / pin được định cấu hình là đầu ra) hoặc liệu bên trong điện trở pullup được kích hoạt (khi DDR= 0, cổng / pin được cấu hình làm đầu vào). Theo cách này, một cổng cổng có thể được sử dụng (theo cách khá ngớ ngẩn) làm lưu trữ chung hoặc để truyền thông tin về trạng thái của các pullups đầu ra / đầu vào, như trong kịch bản sau đây

Có lẽ một phần trong chương trình của bạn ghi một cái gì đó vào các cổng hoặc kích hoạt / hủy kích hoạt pullups và phần khác của chương trình đọc PORTđể tìm hiểu cách cấu hình. Đọc PORTngay sau khi viết PORTkhông có ý nghĩa: đã viết PORT, bạn biết giá trị của PORTnó là gì.


Bạn có thể cho tôi một mã tốt hơn không? Và tại sao IN R17, PINB không trả lời ở đó?
Hanna

Không rõ câu hỏi của bạn, bạn đang cố gắng làm gì ... bạn có thể làm rõ điều đó trong câu hỏi của bạn: mục tiêu của đoạn mã này là gì không? Bạn chỉ đang cố gắng để chuyển một cổng ở một tần số và chu kỳ nhiệm vụ cụ thể?
angelatlarge

vâng !!! chỉ thế này
Hanna

1

Đối với mục đích của bạn, đọc từ PORT thực sự có ý nghĩa: Các chân trong câu hỏi là chân đầu ra và bạn chỉ đơn giản muốn đọc giá trị cuối cùng bạn đã viết, chuyển đổi và viết lại. Vì vậy, bạn đang sử dụng thanh ghi cổng như một byte RAM có thể quan sát được bên ngoài.

Mặt khác, đối với ứng dụng cụ thể này, bạn chỉ cần giữ giá trị trong một thanh ghi và thậm chí sẽ không phải đọc lại thanh ghi PORT.


Vậy tại sao đọc mã PIN không chính xác?
Hanna

Về nguyên tắc, giá trị bạn nhận được từ mã PIN phụ thuộc vào những gì được gắn vào mã pin bên ngoài và trong ứng dụng cụ thể của bạn, bạn chỉ quan tâm đến giá trị mà bạn đã tự viết trước đó (Tất nhiên, điều này khá không điển hình đối với tôi / Chân O). Tuy nhiên, trên thực tế, tôi hy vọng rằng các giá trị của PORT và PIN giống hệt nhau ở đây (bạn đã thử chưa?).
microtherion

Có, tôi đã thử nghiệm nó trước đây trong phòng thu AVR. Tôi nghĩ những gì bạn nói là đúng. Chúng tôi chỉ cần bổ sung giá trị cổng ...
Hanna
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.