Giáo trình Vi điều khiển - Chương 10: Truyền thông nối tiếp của 8051

Các máy tính truyền dữ liệu theo hai cách: Song song và nối tiếp. Trong truyền
dữ liệu song song thường cần 8 hoặc nhiều đường dây dẫn để truyền dữ liệu đến một
thiết bị chỉ cách xa vài bước. Ví dụ của truyền dữ liệu song song là các máy in và các
ổ cứng, mỗi thiết bị sử dụng một đường cáp với nhiều dây dẫn. Mặc dù trong các
trường hợp như vậy thì nhiều dữ liệu được truyền đi trong một khoảng thời gian ngắn
bằng cách dùng nhiều dây dẫn song song nhưng khoảng cách thì không thể lớn được.
Để truyền dưdx liệu đi xa thì phải sử dụng phương pháp truyền nối tiếp. Trong
truyền thông nối tiếp dữ liệu được gửi đi từng bít một so với truyền song song thì một
hoặc nhiều byte được truyền đi cùng một lúc. Truyền thông nối tiếp của 8051 là chủ
đề của chương này. 8051 đã được cài sẵn khả năng truyền thông nối tiếp, do vậy có
thể truyền nhánh dữ liệu với chỉ một số ít dây dẫn. 
pdf 18 trang thamphan 27/12/2022 1520
Bạn đang xem tài liệu "Giáo trình Vi điều khiển - Chương 10: Truyền thông nối tiếp của 8051", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfgiao_trinh_vi_dieu_khien_chuong_10_truyen_thong_noi_tiep_cua.pdf

Nội dung text: Giáo trình Vi điều khiển - Chương 10: Truyền thông nối tiếp của 8051

  1. CHƯƠNG 10 Truyền thông nối tiếp của 8051 Các máy tính truyền dữ liệu theo hai cách: Song song và nối tiếp. Trong truyền dữ liệu song song thường cần 8 hoặc nhiều đường dây dẫn để truyền dữ liệu đến một thiết bị chỉ cách xa vài bước. Ví dụ của truyền dữ liệu song song là các máy in và các ổ cứng, mỗi thiết bị sử dụng một đường cáp với nhiều dây dẫn. Mặc dù trong các trường hợp như vậy thì nhiều dữ liệu được truyền đi trong một khoảng thời gian ngắn bằng cách dùng nhiều dây dẫn song song nhưng khoảng cách thì không thể lớn được. Để truyền dưdx liệu đi xa thì phải sử dụng phương pháp truyền nối tiếp. Trong truyền thông nối tiếp dữ liệu được gửi đi từng bít một so với truyền song song thì một hoặc nhiều byte được truyền đi cùng một lúc. Truyền thông nối tiếp của 8051 là chủ đề của chương này. 8051 đã được cài sẵn khả năng truyền thông nối tiếp, do vậy có thể truyền nhánh dữ liệu với chỉ một số ít dây dẫn. 10.1 Các cơ sở của truyền thông nối tiếp. Khi một bộ vi xử lý truyền thông với thế giới bên ngoài thì nó cấp dữ liệu dưới dạng từng khúc 8 bít (byte) một. Trong một số trường hợp chẳng hạn như các máy in thì thông tin đơn giản được lấy từ đường bus dữ liệu 8 bít và được gửi đi tới bus dữ liệu 8 bít của máy in. Điều này có thể làm việc chỉ khi đường cáp bus không quá dài vì các đường cáp dài làm suy giảm thậm chí làm méo tín hiệu. Ngoài ra, đường dữ liệu 8 bít giá thường đắt. Vì những lý do này, việc truyền thông nối tiếp được dùng để truyền dữ liệu giữa hai hệ thống ở cách xa nhau hàng trăm đến hàng triệu dặm. Hình 10.1 là sơ đồ truyền nối tiếp so với sơ đồ truyền song song. Serial Transfer Parallen Transfer Sender Receiver Sender D0 Receiver D7 Hình 10.1: Sơ đồ truyền dữ liệu nối tiếp so với sơ đồ truyền song song. Thực tế là trong truyền thông nối tiếp là một đường dữ liệu duy nhất được dùng thay cho một đường dữ liệu 8 bít của truyền thông song song làm cho nó không chỉ rẻ hơn rất nhiều mà nó còn mở ra khả năng để hai máy tính ở cách xa nhau có truyền thông qua đường thoại. Đối với truyền thông nối tiếp thì để làm được các byte dữ liệu phải được chuyển đổi thành các bít nối tiếp sử dụng thanh ghi giao dịch vào - song song - ra - nối tiếp. Sau đó nó có thể được truyền quan một đường dữ liệu đơn. Điều này cũng có nghĩa là ở đầu thu cũng phải có một thanh ghi vào - nối tiếp - ra - song song để nhận dữ liệu nối tiếp và sau đó gói chúng thành từng byte một. Tất nhiên, nếu dữ liệu được truyền qua đường thoại thì nó phải được chuyển đổi từ các số 0 và 1 sang âm thanh ở dạng sóng hình sin. Việc chuyển đổi này thực thi bởi một thiết bị có tên gọi là Modem là chữ viết tắt của “Modulator/ demodulator” (điều chế/ giải điều chế).
  2. Truyền thông dữ liệu nối tiếp dị bộ được sử dụng rộng rãi cho các phép truyền hướng kỹ tự, còn các bộ truyền dữ liệu theo khối thì sử dụng phương phát đồng bộ. Trong phương pháp dị bộ, mỗi ký tự được bố trí giữa các bít bắt đầu (start) và bít dừng (stop). Công việc này gọi là đóng gói dữ liệu. Trong đóng gói dữ liệu đối với truyền thông dị bộ thì dữ liệu chẳng hạn là các ký tự mã ASCII được đóng gói giữa một bít bắt đầu và một bít dừng. Bít bắt đầu luôn luôn chỉ là một bít, còn bít dừng có thể là một hoặc hai bít. Bít bắt đầu luôn là bít thấp (0) và các bít dừng luôn là các bít cao (bít 1). Ví dụ, hãy xét ví dụ trên hình 10.3 trong đó ký tự “A” của mã ASCII (8 bít nhị phân là 0100 0001) đóng gói khung giữa một bít bắt đầu và một bít dừng. Lưu ý rằng bít thấp nhất LSB được gửi ra đầu tiên. Stop 0 1 0 0 0 0 0 1 Start Mar bít Space bít d d Goes out Goes out Hình 10.3: Đóng khung một ký tự “A” của mã ASCII (41H) có tín hiệu là 1 (cao) được coi như là một dấu (mark), còn không có tín hiệu tức là 0 (thấp) thì được coi là khoảng trống (space). Lưu ý rằng phép truyền bắt đầu với start sau đó bít D0, bít thấp nhất LSB, sau các bít còn lại cho đến bít D7, bít cao nhất MSB và cuối cùng là bít dừng stop để báo kết thúc ký tự “A”. Trong truyền thông nối tiếp dị bộ thì các chíp IC ngoại vi và các modem có thể được lập trình cho dữ liệu với kích thước theo 7 bít hoặc 8 bít. Đây là chưa kể các bít dừng stop có thể là 1 hoặc 2 bít. Trong khi các hệ ASCII cũ hơn (trước đây) thì các ký tự là 7 bít thì ngay nay do việc mở rộng các ký tự ASCII nên dữ liệu nhìn chung là 8 bít. Trong các hệ cũ hơn do tốc độ chậm của các thiết bị thu thì phải sử dụng hai bít dừng để đảm bảo thời gian tổ chức truyền byte kế tiếp. Tuy nhiên, trong các máy tính PC hiện tại chỉ sử dụng 1 bít stop như là chuẩn. Giả sử rằng chúng ta đang truyền một tệp văn bản các ký tự ASCII sử dụng 1 bít stop thì ta có tổng cộng là 10 bít cho mỗi ký tự gồm: 8 bít cho ký tự ASCII chuẩn và 1 bít start cùng 1 bít stop. Do vậy, đối với mỗi ký tự 8 bít thì cần thêm 2 bí vị chi là mất 25% tổng phí. Trong một số hệ thống để nhằm duy trì tính toàn vẹn của dữ liệu thì người ta còn thêm một bít lẻ (parity bít). Điều này có nghĩa là đối với mỗi ký tự (7 hoặc 8 bít tuỳ từng hệ) ta có thêm một bít ngoài các bít start và stop. Bít chẵn lẻ là bít chẵn hoặc bít lẻ. Nếu là bít lẻ là số bít của dữ liệu bao gồm cả bít chẵn lẻ sẽ là một số lẻ các sô 1. Tương tự như vậy đối với trường hợp bít chẵn thì số bít của dữ liệu bao gồm cả bít chẵn - lẻ sẽ là một số chẵn của các số 1. Ví dụ, ký tự “A” của mã ASCII ở dạng nhị phân là 0100 0001, có bít 0 là bít chẵn. Các chíp UART đều cho phép việc lập trình bít chẵn - lẻ về chẵn, lẻ hoặc không phân biệt chẵn lẻ. 10.1.4 Tốc độ truyền dữ liệu. Tốc độ truyền dữ liệu trong truyền thông dữ liệu nối tiếp được gọi là bít trong giây bps (bít per second). Ngoài ra, còn được sử dụng một thuật ngữ rộng rãi nữa là tốc độ baud. Tuy nhiên, các tốc baud và bps là hoàn toàn không bằng nhau. Điều này
  3. Số chân Mô tả 1 Đất cách ly (Protective Cround) 2 Dữ liệu được truyền TxD (TráNsmitted data) 3 Dữ liệu được phân RxD (Received data) 4 Yêu cầu gửi RTS (Request To Send) 5 Xoá để gửi CIS (Clear To Send) 6 Dữ liệu sẵn sàng DSR (Data Set Ready) 7 Đất của tín hiệu GND (Signal Cround) 8 Tách tín hiệu mạng dữ liệu DCD (Data Carrier Detect) 9/10 Nhận để kiểm tra dữ liệu (Received for data testing) 11 Chưa dùng 12 Tách tín hiệu mạng dữ liệu thứ cấp (Secondary data carrier 13 detect) 14 Xoá đẻ nhận dữ liệu thứ cấp (Secondary Clear to Send) 15 Dữ liệu được truyền thứ cấp (Secondary Transmit Signal 16 Element Timing) 17 Truyền phân chia thời gian phần tử tín hiệu (Transmit Signal 18 Element Timing) 19 Dữ liệu được nhận thứ cấp (Secondary Received data) 20 Nhận phân chia thời gian phần tử tín hiệu (Receiveo Signal 21 Element Timing) 22 Chưa dùng 23 Yêu cầu để nhận thứ cấp (Secondary Request to Send) 24 Đầu dữ liệu sẵn sàng (Data Terminal Ready) 25 Phát hiện chất lượng tín hiệu (Signal Qualyty Detector) Báo chuông (Ring Indicator) Chọn tốc độ tín hiệu dữ liệu (Data Signal Rate Select) Truyền phân chia thời gian tín hiệu (Transmit Signal Element Timing) Chưa dùng 10.1.7 Phân loại truyền thông dữ liệu. Thuật ngữ hiện nay phân chia thiết bị truyền thông dữ liệu thành một thiết bị đầu cuối dữ liệu DTE (Data Terminal Equipment) hoặc thiết bị truyền thông dữ liệu DCE (Data Communication Equipment). DTE chủ yếu là các máy tính và các thiết bị đầu cuối gửi và nhận dữ liệu, còn DCE là thiết bị truyền thông chẳng hạn như các modem chịu trách nhiệm về truyền dữ liệu. Lưu ý rằng tất cả mọi định nghĩa về chức năng các chân RS232 trong các bảng 10.1 và 10.2 đều xuất phát từ gốc độ của DTE. Kết nối đơn giản nhất giữa một PC và bộ vi điều khiển yêu cầu tối thiểu là những chân sau: TxD, RxD và đất như chỉ ra ở hình 10.6. Để ý rằng trên hình này thì các chân TxD và RxD được đổi cho nhau. Hình 10.5: Sơ đồ đầu nối DB - 9 của RS232. 1 5 6 9 Bảng 10.2: Các tín hiệu của các chân đầu nối DB - 9 trên máy tính IBM PC.
  4. 4. Tín hiệu xáo để gửi CTS: Để đáp lại RTS thì khi modem có để chứa dữ liệu mà nó cần nhận thì nó gửi một tín hiệu CTS tới DTE (PC) để báo rằng bây giờ nó có thể nhận dữ liệu. Tín hiệu đầu vào này tới DTE dùng để khởi động việc truyền dữ liệu. 5. Tách tín hiệu mang dữ liệu DCD: Modem yêu cầu tín hiệu DCD báo cho DTE biết rằng đã tách được một tín hiệu mang dữ liệu hợp lệ và rằng kết nối giữa nó và modem khác đã được thiết lập. Do vậy, DCD là một đầu ra của modem và đầu vào của PC (DTE). 6. Báo chuông RI: Một đầu ra từ modem (DCE) và một đầu vào tới máy tính PC (DTE) báo rằng điện thoại đang báo chuông. Nó tắt và bật đồng bộ với âm thanh đang đổ chuông. Trong 6 tín hiệu bắt tay thì tín hiệu này là ít được dùng nhất do một thực tế là các modem đã chịu trách nhiệm về trả lời điện thoại. Tuy nhiên, nếu trong một hệ thống đã cho mà PC phải chịu trách nhiệm trả lời điện thoại thì tín hiệu này có thể được dùng. Từ mô tả trên thì việc truyền thông PC và modem có thể được tóm tắt như sau: Trong khi các tín hiệu DTR và DSR được dùng bởi PC và modem để báo rằng chúng đang hoạt động tốt thì các tín hiệu RTS và CTS thực tế đang kiểm tra luồng dữ liệu. Khi PC muốn gửi dữ liệu thì nó yêu cầu RTS và đáp lại, nếu modem sẵn sàng (có chỗ chứa dữ liệu) để nhận dữ liệu thì nó gửi lại tín hiệu CTS. Còn nếu không có chỗ cho dữ liệu thì modem không kích hoạt CTS và PC thôi không yêu cầu DTR và thử lại. Các tín hiệu RTS và CTS cũng được cọi như tín hiệu luồng điều khiển phần cứng. Đến đây kết thúc sự mô tảt 9 chân quan trọng nhất của các tín hiệu bắt tay RS232 và các tín hiệu TxD, RxD và đất (Ground). Tín hiệu Ground này cũng được coi như là tín hiệu SG - đất của tín hiệu. 10.1.9 Các cổng COM của IBM PC và tương thích. Các máy tính IBM PC và tương thích dựa trên các bộ vi xử lý × 86 (8086, 286, 384, 486 và Pentium) thường có hai cổng COM. Cả hai cổng COM đều có các đầu nối kiểu RS232. Nhiều máy tính PC sử dụng mỗi đầu nối một kiểu ổ cắm DB - 25 và DB - 9. Trong những năm gần đây, cổng COM1 được dùng cho chuột và COM2 được dùng cho các thiết bị chẳng hạn như Modem. Chúng ta có thể nối cổng nối tiếp của 8051 đến cổng COM2 của một máy tính PC cho các thí nghiệm về truyền thông nối tiếp. Với nền kiến thức về truyền thông nối tiếp này chúng ta đã sẵn sàng làm việc với 8051. 10.2 Nối ghép 8051 tới RS232. Như đã nói ở phần 10.1, chuẩn RS232 không tương thích với mức lô-gíc TTL, do vậy nó yêu cầu một bộ điều khiển đường truyền chẳng hạn như chíp MAX232 để chuyển đổi các mức điện áp RS232 về các mức TTL và ngược lại. Nội dung chính của phần này là bàn về nối ghép 8051 với các đầu nối RS232 thông qua chíp MAX232. 10.2.1 Các chân RxD và TxD trong 8051. 8051 có hai chân được dùng chuyên cho truyền và nhận dữ liệu nối tiếp. Hai chân này được gọi là TxD và RxD và là một phần của cổng P3 (đó là P3.0 và P3.1). chân 11 của 8051 là P3.1 được gán cho TxD và chân 10 (P3.0) được dùng cho RxD. Các chân này tương thích với mức lô-gích TTL. Do vậy chúng đòi hỏi một bộ điều khiển đường truyền để chúng tương thích với RS232. Một bộ điều khiển như vậy là chíp MAX232. 10.2.2 Bộ điều khiển đường truyền MAX232.
  5. ta không thể lấy một chíp MAX232 ra khỏi một bảng mạch và thay vào đó RS233. Hãy xem hình 10.8 để thấy MAX233 không cần đến tụ. Vc 13 7 11 14 8051 15 12 Max23 16 5 17 10 P3.1 11 2 5 2 TxD T1- T1- T1- 4 2 2 5 10 3 R1- R1- 3 4 P3.0 T2- T2- RxD DB - 1 18 R2- R2- 20 19 6 9 TTL Rs232 Hình 10.8: a) Sơ đồ bên trong của MAX233. b) Sờ đồ nối ghép của MAX233 với 8051 theo modem không. 10.3 Lập trình truyền thông nối tiếp cho 8051. Trong phần này chúng ta sẽ nghiên cứu về các thanh ghi truyền thông nối tiếp của 8051 và cách lập trình chúng để truyền và nhận dữ liệu nối tiếp. Vì các máy tính IBM PC và tương thích được sử dụng rất rộng rãi để truyền thông với các hệ dựa trên 8051, do vậy ta chủ yếu tập trung vào truyền thông nối tiếp của 8051 với cổng COM của PC. Để cho phép truyền dữ liệu giữa máy tín PC và hệ thống 8051 mà không có bất kỳ lỗi nào thì chúng ta phải biết chắc rằng tốc độ baud của hệ 8051 phải phù hợp với tốc độ baud của công COM máy tính PC được cho trong bảng 10.3. Chúng ta có thể kiểm tra các tốc độ baud này bằng cách vào chương trình Windows Terminal và bấm chuột lên tuỳ chọn Communication Settings. Chương trình Terminal.exe của Window3.1 cũng làm việc tốt trên Windows95 và Window98. Trong Window95 và cao hơn ta có thể sử dụng chức năng Hyperterrminal. Hàm Hyperterminal hỗ trợ các tốc độ Baud cao hơn nhiều so với các tốc độ cho trong bảng 10.3. Bảng 10.3: Các tốc độ Baud của máy tính PC486 và Pentium cho trong BIOS. 100 150 300 600 1200 2400 4800 Ví dụ 10.1: Với tần số XTAL là 11.0592MHz. Hãy tìm giá trị TH1 cần thiết để có tốc độ baud sau: a) 9600 b) 2400 c) 1200 Lời giải: Với tần số XTAL là 11.0592MHz thì ta có tần số chu trình máy của 8051 là 11.0592MHz : 12 = 921.6kHz và sau đó lấy 921.6kHz/32 = 28.800Hz là tần số được cấp bởi UART tới bộ định thời Timer1 để thiết lập tốc độ. a) 28.800/3 = 9600 trong đó - 3 = FD được nạp vào TH1 b) 28.800/12 = 2400 trong đó - 12 = F4 được nạp vào TH1 c) 28.800/24 = 1200 trong đó - 24 = F8 được nạp vào TH1
  6. 10.3.3 Thanh ghi điều khiển nối tiếp SCON. Thanh ghi SCON là thanh ghi 8 bít được dùng để lập trình việc đóng khung bít bắt đầu Start, bít dừng Stop và các bít dữ liệu cùng với việc khác. Dưới đây là mô tả các bít khác nhau của SCON: SM0 SM1 SM2 REN TB8 RB8 T1 SM0 SCON.7 Số xác định chế độ làm việc cổng nối tiếp SM1 SCON.6 Số xác định chế độ làm việc cổng nối tiếp SM2 SCON.5 Dùng cho truyền thông giữa các bộ vi xử lý (SM2 = 0) REN SCON.4 Bật/xoá bằng phần mềm để cho phép/ không cho thu TB8 SCON.3 Không sử dụng rộng rãi RB8 SCON.2 Không sử dụng rộng rãi T1 SCON.1 Cờ ngắt truyền đặt bằng phần cứng khi bắt đầu bít Stop ở chế độ 1. R1 SCON.0 Cờ ngắt thu Xoá bằng phần mềm. Hình 10.2: Thanh ghi điều khiển cổng nối tiếp SCON. 10.3.3.1 Các bít SM0, SM1. Đây là các bít D7 và D6 của thanh ghi SCON. Chúng được dùng để xác định chế độ đóng khung dữ liệu bằng cách xác định số bít của một ký tự và các bít Start và Stop. Các tổ hợp của chúng là: SM0 SM1 0 0 Chế độ nối tiếp 0 0 1 Chế độ nối tiếp 1, 8 bít dữ liệu, Start, Stop 1 0 Chế độ nối tiếp 2 1 1 Chế độ nối tiếp 3 Trong bốn chế độ ta chỉ quan tâm đến chế độ 1, các chế độ khác được giải thích ở Appendisk A3. Trong thanh ghi SCON khi chế độ 1 được chọn thì dữ liệu được đóng khung gồm 8 bít dữ liệu, 1 bít Start, 1 bít Stop để tương thích với cổng COM của IBM PC và các PC tương thích khác. Quan trọng hơn là chế độ nối tiếp 1 cho phép tốc độ baud thay đổi và được thiết lập bởi Timer1 của 8051. Trong chế độ nối tiếp 1 thì mỗi ký tự gồm có 10 bít được truyền trong đó có bít đầu là bít Start, sau đó là 8 bít dữ liệu và cuối cùng là bít Stop. 10.3.3.2 Bít SM2. Bít SM2 là bít D5 của thanh ghi SCON. Bít này cho phép khả năng đa xử lý của 8051 và nó nằm ngoài phạm vi trình bày của chương này. Đối với các ứng dụng của chúng ta đặt SM2 = 0 vì ta không sử dụng 8051 trong môi trường đa xử lý. 10.3.3.3 Bít REN. Đây là bít cho phép thu (Receive Enable), bít D4 của thanh ghi SCON. Bít REN cũng được tham chiếu như là SCON.4 vì SCON là thanh ghi có thể đánh địa chỉ theo bít. Khi bít REN cao thì nó cho phép 8051 thu dữ liệu trên chân RxD của nó. Và kết quả là nếu ta muốn 8051 vừa truyền và nhận dữ liệu thì bít REN phải được đặt lên 1. Khi đặt REN thì bộ thu bị cấm. Việc đặt REN = 1 hay REN = 0 có thể đạt được
  7. SJMP AGAIN ; Tiếp tục gửi lại chữ A Ví dụ 10.3: Hãy viết chương trình để truyền chữ “YES” nối tiếp liên tục với tốc độ 9600 baud (8 bít dữ liệu, 1 bít Stop). Lời giải: MOV TMOD, #20H ; Chọn bộ Timer1, chế độ 2 MOV TH1, # - 3 ; Chọn tốc độ 9600 baud MOV SCON, #50H ; Truyền 8 bít dữ liệu, 1 bít Stop cho phép thu SETB TR1 ; Khởi động Timer1 AGAIN: MOV A, # "Y" ; Truyền ký tự “Y” ACALL TRANS MOV A, # "E" ; Truyền ký tự “E” ACALL TRANS MOV A, # "S" ; Truyền ký tự “S” ACALL TRANS SJMP AGAIN ; Tiếp tục ; Chương trình con truyền dữ liệu nối tiếp. TRANS: MOV SBUF, A ; Nạp SBUF HERE: JNB TI, HERE ; Chờ cho đến khi truyền bít cuối cùng CLR TI ; Chờ sẵn cho một byte kế tiếp RET 10.3.4.1 Tầm quan trọng của cờ TI. Để hiểu tầm quan trọng của cờ ngắt TI ta hãy xét trình tự các bước dưới đây mà 8051 phải thực hiện khi truyền một ký tự quan đường TxD: 1. Byte ký tự cần phải truyền được ghi vào SBUF. 2. Truyền bít Start 3. Truyền ký tự 8 bít lần lượt từng bít một. 4. Bít Stop được truyền xong, trong quá trình truyền bít Stop thì cờ TI được bật (TI = 1) bởi 8051 để báo sẵn sàng để truyền ký tự kế tiếp. 5. Bằng việ hiển thị cờ TI ta biết chắc rằng ta không nạp quá vào thanh ghi SBUF. Nếu ta nạp một byte vào SBUF trước ghi TI được bật thì phần dữ liệu của byte trước chưa truyền hết sẽ bị mất. Hay nói cách khác là 8051 bật cờ TI khi đã truyền xong một byte và nó sẵn sàng để truyền byte kế tiếp. 6. Sau khi SBOF được nạp một byte mới tì cờ nhằm để có thể truyền byte mới này. Từ phần trình bày trên đây ta kết luận rằng bằng việc kiểm tra bít cờ ngắt TI ta biết được 8051 có sẵn sàng để truyền một byte khác không. Quan trọng hơn cần phải nói ở đây là bít cờ TI được bật bởi từ 8051 khi nó hoàn tất việc truyền một byte dữ liệu, còn việc xoá nó thì phải được lập trình viên thực hiện bằng lệnh “CLR TI”. Cũng cần lưu ý rằng, nếu ta ghi một byte vào thanh ghi SBUF trước khi cờ TI được bật thì sẽ có nguy cơ mất phần dữ liệu đang truyền. Bít cờ TI có thể kiểm tra bằng lệnh “JNB TI ” hoặc có thể sử dụng ngắt như ta sẽ thấy trong chương 11. 10.3.5 Lập trình 8051 để nhận dữ liệu. Trong lập trình của 8051 để nhận các byte ký tự nối tiếp thì phải thực hiện các bước sau đây. 1. Nạp giá trị 20H vào thanh ghi TMOD để báo sử dụng bộ Timer1, chế độ 2 (8 bítm, tự động nạp lại) để thiết lập tốc độ baud. 2. Nạp TH1 các giá trị cho trong bảng 10.4 để tạo ra tốc độ baud với giả thiết XTAL = 10.0592MHz.
  8. MOV F1, A ; Hiển thị nó ra các đền LED SJMP B - 1 ; ở lại vòng lặp vô hạn ; Truyền dữ liệu nối tiếp ACC có dữ liệu SEND: MOV SBUF, A ; Nạp dữ liệu H- 2: JNB TI, H - 2 ; ở lại vòng lặp vô hạn CLR TI ; Truyền dữ liệu nối tiếp RET ; Nhận dữ liệu ; Truyền dữ liệu nối tiếp ACC có dữ liệu RECV: JNB RI, RECV ; Nạp dữ liệu MOV A, SBUF ; ở lại đây cho đến khi gửi bít cuối cùng CLR RI ; Sẵn sàng cho ký tự mới RET ; Trở về mời gọi ; Nhận dữ liệu nối tiếp trong ACC RECV: JNB RI, RECV ; Đợi ở đây nhận ký tự MOV A, SBUF ; Lưu nó vào trong ACC CLR RI ; Sẵn sàng nhận ký tự mã tiếp theo RET ; Trở về nời gọi ; Ngăn xếp chưa thông báo MYDATA: DB “Chúng tôi đã sẵn sàng” 0 END 8051 LED To P1 PC TxD CO M RxD SW port P2 10.3.5.1 Tầm quan trọng của cờ RT. Khi nhận các bít quan chân RxD của nó thì 8051 phải đi quan các bước sau: 1. Nó nhận bít Start báo rằng bít sau nó là bít dữ liệu đầu tiên cần phải nhận. 2. Ký tự 8 bít được nhận lần lượt từng bít một. Khi bít cuối cùng được nhận thì một byte được hình thành và đặt vào trong SBUF. 3. Khi bít Stop được nhận thì 8051 bật RT = 1 để báo rằng toàn bộ ký tự được nhận và phải lấy đi trước khi nó bị byte mới nhận về ghi đè lên. 4. Bằng việc kiểm tra bít cờ RI khi nó được bật lên chúng ta biết rằng một ký tự đã được nhận và đang nằm trong SBUF. Tại sao nội dung SBUF vào nơi an toàn trong một thanh ghi hay bộ nhớ khác trước khi nó bị mất. 5. Sau khi SBUF được ghi vào nơi an toàn thì cờ RI được xoá về 0 bằng lệnh “CLR RI” nhằm cho các ký tự kế tiếp nhận được đưa vào SBUF. Nếu không làm được điều này thì gây ra mất ký tự vừa nhận được. Từ mô tả trên đây ta rút ra kết luận rằng bằng việc kiểm tra cờ RI ta biết 8051 đã nhận được một byte ký tự chưa hay rồi. Nếu ta không sao được nội dung của thanh ghi SBUF vào nơi an toàn thì có nguy cơ ta bị mất ký tự vừa nhận được. Quan trọng hơn là phải nhớ rằng cờ RI được 8051 bật lên như lập trình viên phải xoá nó bằng lệnh “CLR RI”. Cũng nên nhờ rằng, nếu ta sao nội dung SBUF vào nơi an toàn trước khi RI được bật ta mạo hiểm đã sao dữ liệu chưa đầy đủ. Bít cờ RI có thể được kiểm tra bởi lệnh “JNB RI, xx” hoặc bằng ngắt sẽ được bàn ở chương 11. 10.3.6 Nhân đôi tốc độ baud trong 8051. Có hai cách để tăng tốc độ baud truyền dữ liệu trong 8051.
  9. -6 DA 4800 9600 -12 F4 2400 4800 -24 E8 1200 2400 Ví dụ 10.6: Giả sử tần số XTAL = 11.0592MHz cho chương trình dưới đây, hãy phát biểu a) chương trình này làm gì? b) hãy tính toán tần số được Timer1 sử dụng để đặt tốc độ baud? và c) hãy tìm tốc độ baud truyền dữ liệu. MOV A, PCON ; Sao nội dung thanh ghi PCON vào thanh ghi ACC SETB ACC.7 ; Đặt D7 = 0 MOV PCON, A ; Đặt SMOD = 1 để tăng gấp đôi tần số baud với tần số XTAL cố định ; MOV TMOD, #20H ; Chọn bộ Timer1, chế độ 2, tự động nạp lại MOV TH1, - 3 ; Chọn tốc độ baud 19200 (57600/3=19200) vì SMOD = 1 ; MOV SCON, #50H ; Đóng khung dữ liệu gồm 8 bít dữ liệu, 1 Stop và cho phép RI. SETB TR1 ; Khởi động Timer1 MOV A, #”B” ; Truyền ký tự B A-1: CLR TI ; Khẳng định TI = 0 MOV SBUF, A ; Truyền nó H-1: JNB TI, H-1 ; Chờ ở đây cho đến khi bít cuối được gửi đi SJMP A-1 ; Tiếp tục gửi “B” Lời giải: a) Chương trình này truyền liên tục mã ASCII của chữ B (ở dạng nhị phân là 0100 0010) b) Với tần số XTAL = 11.0592MHz và SMOD = 1 trong chương trình trên ta có: 11.0592MHz/12 = 921.6kHz là tần số chu trình máy 921.6kHz/16 = 57.6kHz là tần số được Timer1 sử dụng để đặt tốc độ baud c) 57.6kHz/3 = 19.200 là tốc độ cần tìm Ví dụ 10.7: Tìm giá trị TH1 (ở dạng thập phân và hex) để đạt tốc độ baud cho các trường hợp sau. a) 9600 b) 4800 nếu SMOD = 1 và tần số XTAL = 11.0592MHz Lời giải: Với tần số XTAL = 11.0592MHz và SMOD = 1 ta có tần số cấp cho Timer1 là 57.6kHz. a) 57.600/9600 = 6 do vậy TH1 = - 6 hay TH1 = FAH b) 57.600/4800 = 12 do vậy TH1 = - 12 hay TH1 = F4H SMOD= 11.0592M 57600H To ÷ 16 28800Hz timer 1 XTAL ÷ 12 28800H to set oscillator 921.6kH ÷ 32 baud SMOD=