Sự khác biệt giữa giá trị nhị phân thực và giá trị dao động


14

Tôi đã cố gắng nhìn thấy một ký tự "A" ASCII bằng máy hiện sóng nhưng giá trị nhị phân thực và giá trị dao động là khác nhau tại sao lại như vậy? Giá trị nhị phân ASCII "A" - 01000001

Máy hiện sóng hiển thị biểu đồ này:

Aiiii

Aiiii

Tôi sử dụng Arduino Uno để gửi giá trị ASCII bằng mã:

void setup() {  
  Serial.begin(9600);  
}  

void loop() {  
  Serial.println("A");  
  delay(1000);  
}

Câu trả lời:


35

Đây là cách bạn đọc dạng sóng dao động. Tôi đã dành thời gian để chỉnh sửa hình ảnh dạng sóng của bạn và chú thích nó để hiển thị bit nào. Bộ vi điều khiển gửi 10 bit cho mỗi ký tự; START, luôn là 0, 8 bit dữ liệu và STOP luôn luôn là 1. Dòng cũng nằm ở 1, do đó, điểm rơi START đầu tiên cảnh báo cho người nhận rằng một byte đang đến. Các bit được gửi LSB trước, vì vậy nếu bạn muốn "xem" chúng một cách hợp lý, bạn cần phản chiếu chúng theo chiều ngang để chúng có ý nghĩa. Độ rộng của mỗi bit được xác định bởi baudrate, và cả máy phát và máy thu đều phải biết baudrate là gì.

Từ hình ảnh bên dưới, bạn có thể thấy rằng nó gửi ba ký tự: ký tự ASCII 'A', trả về vận chuyển và nguồn cấp dữ liệu.

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


Nếu đó là giao tiếp nối tiếp, sóng cho như thế này. đúng? CR và LF là gì? Dữ liệu khác có thể nhận được như CR hoặc LF là gì?
dùng38701

1
CR là Vận chuyển trở lại, LF là Nguồn cấp dữ liệu. Họ cùng nhau tạo thành một Dòng mới, ví dụ con trỏ đi đến đầu dòng tiếp theo. Chúng là một phần của tiêu chuẩn "ASCII" ("Mã tiêu chuẩn Mỹ để trao đổi thông tin"), google "biểu đồ ASCII" hoặc một cái gì đó.
LOL

@ user38701: CRLF là những gì xảy ra khi bạn nhấn phím enter. Về mặt kỹ thuật, CR được coi là khóa trả về và LF được coi là khóa enter nhưng bàn điều khiển nối tiếp diễn giải khóa enter là CRLF (hoặc đôi khi chỉ là LF). Trong hầu hết các ngôn ngữ lập trình, CR là "\ r" và LF là "\ n" nhưng một số trình biên dịch / ngôn ngữ xuất CRLF cho "\ n"
slebetman

1
Việc trở lại vận chuyển là đơn giản. Ông đã sử dụng một printlnlệnh, có nghĩa là in chuỗi, cũng như "\ r \ n". Vì vậy, ba nhân vật
ps95

1
đáng chú ý là chấm dứt dòng là dành riêng cho hệ thống. CRLF chủ yếu là chấm dứt dòng Windows và Arduino. Nếu bạn lặp lại thử nghiệm tương tự bằng cách sử dụng một thiết bị đầu cuối trên linux làm nguồn của "A", bạn sẽ chỉ nhìn thấy LF.
Nicolas Holthaus

13

Nếu bạn nhìn vào tài liệu Arduino println (), bạn sẽ thấy rằng nó sẽ nối thêm phần hoàn trả vận chuyển và cho ăn ở cuối. Vì vậy, trong thập phân, bạn sẽ kết thúc với 65 (A), 13 (CR) và 10 (LF) trong nhị phân dịch thành:

01000001 00001101 00001010

Dữ liệu nối tiếp Async được gửi LSB trước để trở thành:

10000010 10110000 01010000

Tín hiệu của bạn ở mức cao nên bit start sẽ là 0 và bit stop sẽ là 1 vì vậy thêm nó vào từng byte và bạn kết thúc bằng:

0100000101 0101100001 0010100001

Thật khó để tìm ra thời gian chính xác từ sơ đồ của bạn nhưng điều đó dường như ít nhất là khớp với nhau và sẽ cho bạn biết một số bit bổ sung đến từ đâu và tại sao chúng được sắp xếp lại. Liên kết Wikipedia được cung cấp bởi Kvegaoro cung cấp nhiều thông tin cơ bản tốt về dữ liệu nối tiếp không đồng bộ.


1

Nếu luồng đó bạn hiển thị có nối tiếp không đồng bộ , máy hiện sóng sẽ hiển thị bit bắt đầu tương ứng, bit dừng (s) và bit chẵn lẻ. Ngoài ra, hãy tính đến việc tín hiệu của bạn có bị đảo ngược hay không và thời tiết là bit đáng kể đầu tiên hoặc là bit đáng kể đầu tiên. Nếu bạn thêm chi tiết về luồng nối tiếp mà bạn đã thể hiện trong ảnh, chúng tôi có thể cung cấp cho bạn câu trả lời chi tiết hơn nếu không đây chỉ là phỏng đoán có giáo dục

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.