Xem mẫu

  1. BÀI 5: CỔNG NỐI TIẾP Mục tiêu: - Trình bày được cấu tạo và các chế độ làm việc của cổng truyền thông nối tiếp theo nội dung đã học; - Thực hiện cổng truyền thông nối tiếp đúng yêu cầu kỹ thuật; - Thực hiện thu phát dữ liệu nối tiếp bằng 8051 đạt yêu cầu kỹ thuật. Nội dung: 1. Mở đầu Máy tính truyền dữ liệu theo hai phương pháp: truyền dữ liệu song song và truyền dữ liệu nối tiếp. ❖ Truyền song song: Sử dụng nhiều dây dẫn để truyền dữ liệu giữa các thiết bị có khoảng cách gần nhau (khoảng vài mét). Phương pháp này cho phép truyền dữ liệu với tốc độ cao nhờ sử dụng nhiều dây dẫn để truyền dữ liệu đồng thời nên tại một thời điểm có thể truyền được nhiều bit thông tin nhưng khoảng cách truyền thì có nhiều hạn chế. ❖ Truyền nối tiếp: Sử dụng một dây dẫn để truyền dữ liệu (một dây phát đi và một dây thu về) giữa các thiết bị có khoảng cách xa nhau (khoảng vài trăm mét trở lên). Phương pháp này sẽ truyền dữ liệu với tốc độ chậm hơn (so với phương pháp truyền song song) vì chỉ sử dụng một dây dẫn để truyền dữ liệu nên tại một thời điểm chỉ có thể truyền được một bit thông tin nhưng khoảng cách truyền thì không bị hạn chế như ở phương pháp song song. Chip 8051 có một port nối tiếp (serial port) với các tính năng như sau: 140
  2. ❖ Lưu ý: Ở trường hợp đặc trưng thứ hai thì dữ liệu thứ nhất sẽ không bị mất nếu CPU đọc xong dữ liệu thứ nhất trước khi dữ liệu thứ hai được nhận đầy đủ. 2.Thanh ghi điều khiển Các thanh ghi chức năng đặc biệt của port nối tiếp: ❖ SBUF (Serial Buffer Register): thanh ghi đệm của port nối tiếp. ❖ SCON (Serial Control Register): thanh ghi điều khiển port nối tiếp. Đại lượng đặc trưng cho tốc độ truyền dữ liệu nhanh hay chậm là tốc độ baud (baud rate) hay còn gọi là tần số hoạt động của port nối tiếp có thể là giá trị cố định hay thay đổi tùy theo yêu cầu của người lập trình. Khi chế độ tốc độ baud thay đổi được sử dụng, bộ định thời 1 cung cấp xung clock tốc độ baud và ta phải lập trình sao cho phù hợp. Ở phiên bản chip 8031/8052, bộ định thời 2 cũng có thể được lập trình để cung cấp xung clock tốc độ baud. 3. Chế độ làm việc + Thanh ghi SBUF. Thanh ghi SBUF (Serial Buffer Register): được dùng để lưu giữ dữ liệu cần phát đi và dữ liệu đã nhận được. Việc ghi dữ liệu vào thanh ghi SBUF sẽ nạp dữ liệu để phát đi và việc đọc dữ liệu từ thanh ghi SBUF sẽ truy xuất dữ liệu đã thu được. Thanh ghi SBUF bao gồm 2 thanh ghi: Thanh ghi phát (bộ đệm phát): dùng để lưu giữ dữ liệu cần phát đi. Thanh ghi thu (bộ đệm thu): dùng để lưu giữ dữ liệu đã nhận được. Cấu trúc của thanh ghi SBUF: 141
  3. Ví dụ: Các lệnh ghi dữ liệu vào SBUF và đọc dữ liệu từ SBUF. MOV SBUF, #45H ;Phát giá trị 45H qua port nối tiếp. MOV SBUF, #”D” ;Phát giá trị 44H qua port nối tiếp. MOV SBUF, A ;Phát nội dung của A qua port nối tiếp. MOV A, SBUF ;Đọc dữ liệu thu được từ port nối tiếp. + Thanh ghi SCON. Thanh ghi SCON (Serial Control Register): chứa các bit dùng để điều khiển chế độ hoạt động và báo trạng thái của port nối tiếp. Cấu trúc của thanh ghi SCON: 142
  4. Các chế độ của port nối tiếp: Trước khi sử dụng port nối tiếp cần phải: Ví dụ: Khởi động port nối tiếp ở chế độ 1, cho phép port thu dữ liệu từ chân RxD và sẵn sàng phát dữ liệu từ chân TxD. Giải Ta dùng lệnh: MOV SCON, #52H Giải thích: SM0 = 0, SM1 = 1 → cho phép port hoạt động ở chế độ 1. REN = 1 → cho phép port nối tiếp được phép thu dữ liệu. 143
  5. TI = 1 → chuẩn bị port nối tiếp sẵn sàng phát dữ liệu qua chân TxD. RI = 0 → chuẩn bị port nối tiếp sẵn sàng thu dữ liệu qua chân RxD. 3.1.Thanh ghi dịch 8 bit + Chế độ 0 – Thanh ghi dịch 8 bit: Quá trình phát dữ liệu: ❖ Quá trình khởi động: Ghi dữ liệu cần phát vào SBUF Việc phát dữ liệu bắt đầu: Dữ liệu từ SBUF được dịch ra chân RxD đồng thời với các xung clock dịch bit được gởi ra chân TxD (mỗi bit được truyền đi trên chân RxD trong 1 chu kỳ máy). 144
  6. ❖ Giản đồ thời gian phát dữ liệu: Quá trình thu dữ liệu: ❖ Quá trình khởi động: Set bit cho phép thu (REN=1) → Xóa cờ ngắt thu (RI=0) Việc thu dữ liệu bắt đầu: Các xung clock dịch bit được gởi ra chân TxD và dữ liệu từ thiết bị bên ngoài được dịch vào chân RxD bởi các xung clock dịch bit này (việc dịch dữ liệu vào chân RxD xảy ra ở cạnh lên của xung clock dịch bit). ❖ Giản đồ thời gian thu dữ liệu: Ứng dụng: Một ứng dụng khả thi của chế độ 0 (chế độ thanh ghi dịch bit) là mở rộng thêm các ngõ ra cho chip 8051. Một vi mạch thanh ghi dịch nối tiếp – song song có thể được nối với các chân TxD và RxD của chip 8051 để cung cấp thêm 8 đường xuất (xem hình vẽ bên dưới). Các thanh ghi dịch bit khác có thể ghép cascade với thanh ghi dịch bit đầu tiên để mở rộng thêm nữa. 145
  7. 3.2. Chế độ UART 8 bit có tốc độ baud thay đổi + Chế độ 1 – UART 8 bit có tốc độ baud thay đổi: Trong chế độ 1, port nối tiếp của 8051 hoạt động như một bộ thu phát không đồng bộ 8 bit có tốc độ baud thay đổi (UART -Universal Asynchronous Receiver Transmitter). UART là một bộ thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu được đứng trước bởi một bit START (logic 0) và được đứng sau bởi một bit STOP (logic 1). Thỉnh thoảng, một bit chẵn lẽ (Parity bit) được chèn vào giữa bit dữ liệu sau cùng và bit stop. Hoạt động chủ yếu của UART là biến đổi dữ liệu phát từ song song thành nối tiếp và biến đổi dữ liệu thu từ nối tiếp thành song song. Hình vẽ khuông dạng dữ liệu khi được sử dụng ở chế độ UART: Khuông dạng của một dữ liệu khi sử dụng chế độ UART 8 bit: 146
  8. Quá trình phát dữ liệu: ❖ Quá trình khởi động: Ghi dữ liệu cần phát vào SBUF Việc phát dữ liệu bắt đầu: Dữ liệu từ SBUF được dịch ra chân TxD (theo thứ tự: Start bit → 8 bit data (D0 .. D7) → Stop bit) → cờ TI=1. ❖ Tốc độ baud: do người lập trình thiết lập và được qui định bởi tốc độ tràn của Timer 1. ❖ Thời gian của 1 bit trên đường truyền: bằng nghịch đảo của tốc độ baud (1 / Baud rate). ❖ Cờ ngắt phát TI = 1: khi bit stop được xuất hiện trên chân TxD. Quá trình thu dữ liệu: ❖ Quá trình khởi động: Một sự chuyển trạng thái từ mức 1 xuống mức 0 tại chân RxD (tức xuất hiện bit Start) Việc thu dữ liệu bắt đầu: 8 bit dữ liệu được dịch vào trong SBUF (theo thứ tự: D0→D1→…→D7) → Stop bit (bit thứ 9) được đưa vào bit RB8 (thuộc thanh ghi SCON) → cờ RI=1. 147
  9. ❖ Tốc độ baud: do người lập trình thiết lập và được qui định bởi tốc độ tràn của Timer 1. ❖ Hai điều kiện bắt buộc để thực hiện quá trình thu dữ liệu như trên: • RI = 0 → Yêu cầu này có nghĩa là chip 8051 đã đọc xong dữ liệu trước đó và xoá cờ RI.. • (SM2 = 1 và Stop bit = 1) hoặc SM2 = 0 → chỉ áp dụng trong chế độ truyền thông đa xử lý. Yêu cầu này có nghĩa là không set cờ RI bằng 1 trong chế độ truyền thông đa xử lý khi bit dữ liệu thứ 9 là 0. ❖ Cờ ngắt thu RI = 1: khi 8 bit dữ liệu đã được nạp vào SBUF. Lưu ý: Trường hợp các tín hiệu nhiễu xuất hiện trên đường truyền (làm cho đường truyền xuất hiện mức thấp) dẫn đến làm cho bộ thu nhận dạng sai, cho đó là sự xuất hiện của START bit (logic 0) và tiến hành thực hiện quá trình thu dữ liệu, từ đó dẫn đến kết quả nhận vào sẽ không đúng. Để tránh điều này xảy ra thì khi đường truyền có sự chuyển trạng thái từ 1 xuống 0, bộ thu yêu cầu mức 0 này phải được duy trì trên đường truyền trong một khoảng thời gian xác định. Nếu không đảm bảo được như thế, bộ thu được giả sử rằng đã nhận được nhiễu thay vì nhận được START bit hợp lệ. Lúc đó bộ thu sẽ được thiết lập lại, quay về trạng thái nghỉ và chờ sự chuyển trạng thái từ 1 xuống 0 kế tiếp trên đường truyền. 3.3.UART 9 bit với tốc độ baud cố định (Tương tự như UART 8 bit, chỉ khác ở số bit dữ liệu là 9 bit) 148
  10. Khuông dạng của một dữ liệu khi sử dụng chế độ UART 9 bit: 3.4.Chế độ UART với tốc độ baud cố định + Chế độ 3 – UART 9 bit có tốc độ baud thay đổi: (Tương tự như UART 9 bit, chỉ khác ở tốc độ baud có thể thay đổi) Khuông dạng của một dữ liệu khi sử dụng chế độ UART 9 bit: 4. Khởi tạo và truy suất thanh ghi PORT nối tiếp Trong các chế độ truyền dữ liệu nối tiếp của 8051 đã nêu trên thì trên thực tế sử dụng, để thực hiện việc thu và phát dữ liệu nối tiếp giữa chip 8051 với các thiết bị 149
  11. khác (8051, máy tính, các thiết bị SPI,…) thường người lập trình chỉ sử dụng hai chế độ sau : Mode 1 (UART 8 bit có tốc độ baud thay đổi) hoặc Mode 3 (UART 9 bit có tốc độ baud thay đổi). Còn hai chế độ còn lại thì rất ít sử dụng khi cần truyền dữ liệu nối tiếp. Cho nên ở đây chúng ta chỉ xem xét đến trình tự thực hiện việc lập trình (bao gồm thao tác khởi động và điều khiển thu/phát dữ liệu) để 8051 có thể truyền (phát) và nhận (thu) dữ liệu thông qua port nối tiếp theo hai chế độ UART nêu trên. + Lập trình truyền dữ liệu. ❖ Chọn chế độ hoạt động cho port nối tiếp: MOV SCON, #...(1)… ❖ Chọn chế độ hoạt động Timer 1, cho bit GATE=0 và C/T=0: MOV TMOD, #...(2)… ❖ Chọn giá trị thích hợp (căn cứ vào tốc độ baud) cho Timer 1: MOV TH1, #...(3)… ❖ Cho Timer 1 chạy: SETB TR1 ❖ Kiểm tra xem đã phát xong toàn bộ dữ liệu trước đó hay chưa? JNB TI, $ hoặc WAIT: JNB TI, WAIT ❖ Xoá cờ ngắt phát TI (chuẩn bị cho lần phát dữ liệu tiếp theo): CLR TI ❖ Ghi dữ liệu cần phát vào port nối tiếp để phát đi: MOV SBUF, ...(4)… ❖ Quay trở lại bước 5 để phát một dữ liệu tiếp theo. Lưu ý: (1): Giá trị dùng để qui định chế độ hoạt động của port nối tiếp. Để đơn giản trong việc lập trình, ta có thể khởi động thanh ghi SCON theo như trình bày dưới đây: Mode 1: ...(1)… = 52H Mode 3: ...(1)… = D2H 150
  12. (2): Giá trị dùng để qui định chế độ hoạt động của Timer 1 (dùng để tạo tốc độ baud cho việc truyền dữ liệu nối tiếp). Để đơn giản trong việc lập trình, ta có thể khởi động thanh ghi TMOD theo như trình bày dưới đây (chủ yếu ở đây ta chỉ cần sử dụng Timer 1 ở Mode 2 – Chế độ 8 bit tự động nạp lại): Mode 2: ...(2)… = 20H (3): Giá trị dùng để qui định tốc độ baud cho port nối tiếp. Giá trị này phụ thuộc vào tần số thạch anh, bit SMOD và tốc độ baud mà người lập trình mong muốn (xem thêm “Bảng tính tốc độ baud cho port nối tiếp” như trên đã trình bày). ...(3)… = M f f M=− Osc , ( SMOD = 1) hoặc M = − Osc , ( SMOD = 0) 192 Baud rate 384 Baud rate Trong đó: fOsc (Hz): tần số thạch anh. Baud rate (bps): tốc độ baud của port nối tiếp. (4): Dữ liệu cần phát đi thông qua port nối tiếp. Dữ liệu này có thể là nội dung của một ô nhớ, thanh ghi hoặc một giá trị tức thời. Nên nhớ rằng, nếu có yêu cầu thì bit gửi kèm theo (ví dụ như bit Parity) cần phải thêm vào trước khi tiến hành quá trình phát dữ liệu (Mode 1: kèm thêm vào vị trí của bit D7, Mode 3: kèm thêm vào vị trí của bit TB8). + Lập trình nhận dữ liệu. ❖ Chọn chế độ hoạt động cho port nối tiếp: MOV SCON, #...(1)… ❖ Chọn chế độ hoạt động Timer 1, cho bit GATE=0 và C/T=0: MOV TMOD, #...(2)… ❖ Chọn giá trị thích hợp (căn cứ vào tốc độ baud) cho Timer 1: MOV TH1, #...(3)… ❖ Cho Timer 1 chạy: SETB TR1 ❖ Kiểm tra xem đã thu toàn bộ dữ liệu hay chưa? JNB RI, $ hoặc WAIT: JNB RI, WAIT 151
  13. ❖ Xoá cờ ngắt thu RI (chuẩn bị cho lần thu dữ liệu tiếp theo): CLR RI ❖ Cất dữ liệu vừa thu được vào nơi an toàn (tránh bị mất dữ liệu): MOV ...(4)…, SBUF ❖ Quay trở lại bước 5 để nhận một dữ liệu tiếp theo. Lưu ý: (1): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”. (2): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”. (3): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”. (4): Địa chỉ của một ô nhớ, thanh ghi mà dữ liệu thu được từ port nối tiếp sẽ lưu giữ vào trong đó. Nên nhớ rằng, nếu có yêu cầu thì bit gửi kèm theo (ví dụ như bit Parity) cần phải được xử lý trước khi tiến hành việc cất dữ liệu thu được (Mode 1: nằm tại vị trí của bit D7, Mode 3: nằm tại vị trí của bit RB8). 5. Truyền thông đa xử lý Giao tiếp nối tiếp có nghĩa là truyền dữ liệu từng chút một tại một thời điểm, khi truyền thông song song, số lượng bit có thể được truyền tại một thời điểm phụ thuộc vào số lượng dòng dữ liệu có sẵn để liên lạc. Hai phương thức giao tiếp nối tiếp là • Truyền thông đồng bộ: Chuyển dữ liệu hàng loạt trong cấu trúc khung tại một thời điểm • Truyền thông không đồng bộ: Truyền dữ liệu byte trong cấu trúc khung tại một thời điểm 8051 đã được xây dựng trong UART với RXD (nhận dữ liệu nối tiếp pin) và TXD (dữ liệu nối tiếp truyền pin) trên PORT3.0 và PORT3.1 tương ứng. Giao tiếp không đồng bộ Giao tiếp nối tiếp không đồng bộ được sử dụng rộng rãi để truyền byte theo định hướng. Cấu trúc khung trong giao tiếp không đồng bộ: • START bit: Đó là một chút mà bắt đầu giao tiếp nối tiếp và nó luôn luôn thấp. • Gói bit dữ liệu : Các bit dữ liệu có thể là gói 5 đến 9 bit. Thông thường, chúng tôi sử dụng gói dữ liệu 8 bit, luôn được gửi sau bit START. • STOP bit : Đây là một hoặc hai bit. Nó được gửi sau khi gói dữ liệu bit để cho biết kết thúc khung. Stop bit luôn logic cao. Trong khung giao tiếp nối tiếp không đồng bộ, bit START đầu tiên được theo sau bởi byte dữ liệu và ở bit STOP cuối cùng, tạo thành một khung 10 bit. Đôi khi bit cuối cùng cũng được sử dụng như bit chẵn lẻ. 152
  14. 6. Tốc độ BAUD + Tốc độ truyền dữ liệu. - Tốc độ baud cho chế độ 0: - Tốc độ baud cho chế độ 1, 3: - Tốc độ baud cho chế độ 2: ❖ Lưu ý: • Sau khi hệ thống reset thì bit SMOD = 0 (chế độ mặc định). • Vì thanh ghi PCON không được định địa chỉ từng bit, nên để tăng gấp đôi tốc độ baud (tức làm cho SMOD=1) ta phải thực hiện bằng những dòng lệnh sau: MOV A, PCON ; Lấy giá trị từ thanh ghi PCON. SETB ACC.7 ; SMOD = 1. MOV PCON, A ; Chuyển giá trị mới vào PCON. 7. Bài tập - Ứng dụng port nối tiếp trong lập trình điều khiển thiết bị ngoại vi. + Sơ đồ nguyên lý. 153
  15. R1 330 R2 330 R3 330 R4 330 J1 1 VCC GND 2 +5V 3 GND POWER 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 VCC VCC VCC VCC D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31 D32 LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 J2 J3 J4 J5 BARLED1 BARLED2 BARLED3 BARLED4 LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 Hình 0.1: Sơ đồ nguyên lý khối LED đơn (Point LED). J25 1 VCC GND 2 +5V 3 10K R15 VCC GND 1 POWER J26 2 K0 K0 1 3 K1 K1 2 KEY0 4 K2 K2 3 KEY1 5 K3 SW2 SW3 SW4 SW5 SW6 SW7 SW8 SW9 K3 4 KEY2 6 K4 KEY 0 KEY 1 KEY 2 KEY 3 KEY 4 KEY 5 KEY 6 KEY 7 K4 5 KEY3 7 K5 K5 6 KEY4 8 K6 K6 7 KEY5 9 K7 K7 8 KEY6 KEY7 K0 K1 K2 K3 K4 K5 K6 K7 PUSH KEY Hình 0.2: Sơ đồ nguyên lý khối nút nhấn (Momentary Switch). ❖ Sơ đồ bố trí linh kiện. Hình 0.3: Khối LED đơn (Point LED) Hình 0.4: Khối nút nhấn (Momentary Switch). BÀI THỰC HÀNH Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ liệu thông qua port nối tiếp. Thay đổi trạng thái của các LED tại vi điều khiển 2 (Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master). Lưu đồ giải thuật: ❖ Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển. 154
  16. Hình 0.5: Lưu đồ giải thuật của chương trình. Chương trình điều khiển: Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình. ❖ Bước 2: Khởi động phần mềm Topview Simulation. ❖ Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình là: S1_MASTER.ASM và S1_SLAVE.ASM ❖ Bước 4: Viết chương trình điều khiển dưới đây vào máy tính. Chương trình cho vi điều khiển Master: ORG 00H MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload). MOV TH1,#-3 ; Baud rate = 9600. MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit. SETB TR1 ; Kich hoat Timer 1. AGAIN: MOV A,P0 ; Lay du lieu tu SW. ACALL SEND ; Gui du lieu di SJMP AGAIN ; Thuc hien lai. ;---- Truyen du lieu noi tiep, Data = ACC. SEND: 155
  17. MOV SBUF,A ; Lay du lieu. JNB TI,$ ; Cho truyen xong du lieu. CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo. RET ; Quay ve. ;---------------- END Chương trình cho vi điều khiển Slave: ORG 00H MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload). MOV TH1,#-3 ; Baud rate = 9600. MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit. SETB TR1 ; Kich hoat Timer 1. AGAIN: ACALL RECV ; Nhan du lieu noi tiep. MOV P1,A ; Xuat len LED. SJMP AGAIN ; Thuc hien lai. ;---- Nhan du lieu noi tiep, ACC = Data. RECV: JNB RI,$ ; Cho nhan xong du lieu. MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A. CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo. RET ; Quay ve. ;---------------- END ❖ Bước 5: Lưu chương trình trên vào máy tính. ❖ Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình. • Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5. • Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy với tên là: S1_MASTER.HEX, S1_SLAVE.HEX và thực hiện tiếp theo các phần nội dung dưới đây. Mô phỏng hoạt động: Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng quá trình hoạt động của hệ thống vi điều khiển. ❖ Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10). ❖ Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển truyền dữ liệu thông qua port nối tiếp như Hình 5.4.4 dưới đây. 156
  18. MAÏCH ÑIEÀU KHIEÅN GIAO TIEÁP COÅNG NOÁI TIEÁP RP1 RP2 +5V +5V 1 1 C5 C2 2 P0.0M P0.0S 2 33p 3 P0.1M P0.1S 3 4 P0.2M P0.2S 4 33p 5 P0.3M P0.3S 5 X2 X1 6 P0.4M P0.4S 6 11.0592MHz 11.0592MHz 7 P0.5M P0.5S 7 C4 C1 8 P0.6M P0.6S 8 33p 9 P0.7M P0.7S 9 33p 10K 10K +5V U9 U1 +5V 19 39 P0.0M P0.0S 39 19 XTAL1 P0.0/AD0 P0.0/AD0 XTAL1 38 P0.1M P0.1S 38 P0.1/AD1 P0.1/AD1 37 P0.2M P0.2S 37 P0.2/AD2 P0.2/AD2 18 36 P0.3M P0.3S 36 18 XTAL2 P0.3/AD3 P0.3/AD3 XTAL2 C3 35 P0.4M P0.4S 35 C6 P0.4/AD4 P0.4/AD4 10uF 34 P0.5M P0.5S 34 10uF P0.5/AD5 P0.5/AD5 33 P0.6M P0.6S 33 P0.6/AD6 P0.6/AD6 9 32 P0.7M P0.7S 32 9 RST P0.7/AD7 P0.7/AD7 RST 21 P2.0M P2.0S21 P2.0/A8 P2.0/A8 R1 22 P2.1M P2.1S22 R18 P2.1/A9 P2.1/A9 10k 23 P2.2M P2.2S23 10k P2.2/A10 P2.2/A10 29 24 P2.3M P2.3S24 29 +5V PSEN P2.3/A11 P2.3/A11 PSEN +5V 30 25 P2.4M P2.4S25 30 +5V ALE P2.4/A12 P2.4/A12 ALE +5V 31 26 P2.5M P2.5S26 31 RP3 EA P2.5/A13 P2.5/A13 EA RP4 27 P2.6M P2.6S27 U2 P2.6/A14 P2.6/A14 U3 1 28 P2.7M P2.7S28 1 P2.7/A15 P2.7/A15 10 10 COM COM 2 D0M D0M 18 1 1 10 10 1 1 18 D0S D0S 2 1C 1B P1.0 P3.0/RXD P3.0/RXD P1.0 1B 1C 3 D1M D1M 17 2 2 11 11 2 2 17 D1S D1S 3 2C 2B P1.1 P3.1/TXD P3.1/TXD P1.1 2B 2C 4 D2M D2M 16 3 3 12 12 3 3 16 D2S D2S 4 3C 3B P1.2 P3.2/INT0 P3.2/INT0 P1.2 3B 3C 5 D3M D3M 15 4 4 13 13 4 4 15 D3S D3S 5 4C 4B P1.3 P3.3/INT1 P3.3/INT1 P1.3 4B 4C 6 D4M D4M 14 5 5 14 14 5 5 14 D4S D4S 6 5C 5B P1.4 P3.4/T0 P3.4/T0 P1.4 5B 5C 7 D5M D5M 13 6 6 15 15 6 6 13 D5S D5S 7 6C 6B P1.5 P3.5/T1 P3.5/T1 P1.5 6B 6C 8 D6M D6M 12 7 7 16 16 7 7 12 D6S D6S 8 7C 7B P1.6 P3.6/WR P3.6/WR P1.6 7B 7C 9 D7M D7M 11 8 8 17 17 8 8 11 D7S D7S 9 8C 8B P1.7 P3.7/RD P3.7/RD P1.7 8B 8C 10K ULN2803 AT89C51 AT89C51 ULN2803 10K MASTER SLAVE KEY15 KEY14 KEY13 KEY12 KEY11 KEY10 KEY9 KEY8 KEY7 KEY6 KEY5 KEY4 KEY3 KEY2 KEY1 KEY0 P0.7M P0.6M P0.5M P0.4M P0.3M P0.2M P0.1M P0.0M P0.7S P0.6S P0.5S P0.4S P0.3S P0.2S P0.1S P0.0S +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V R17 R16 R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 330 330 330 330 330 330 330 330 330 330 330 330 330 330 330 330 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 D7M D6M D5M D4M D3M D2M D1M D0M D7S D6S D5S D4S D3S D2S D1S D0S R19 +5V +5V R33 +5V +5V R20 R34 R21 R35 R22 R36 R23 R37 R24 R38 U4 R25 A1 A2 U6 R39 A3 A4 P2.4M 7 13 A1 B1 B2 P2.4S 7 13 A3 B3 B4 A QA 56 A QA 56 P2.5M 1 12 B1 C1 C2 P2.5S 1 12 B3 C3 C4 B QB 56 B QB 56 P2.6M 2 11 C1 D1 D2 P2.6S 2 11 C3 D3 D4 C QC 56 C QC 56 P2.7M 6 10 D1 E1 E2 P2.7S 6 10 D3 E3 E4 D QD 56 D QD 56 4 9 E1 F1 F2 4 9 E3 F3 F4 BI/RBO QE 56 BI/RBO QE 56 5 15 F1 G1 G2 5 15 F3 G3 G4 RBI QF 56 RBI QF 56 3 14 G1 3 14 G3 LT QG 56 LT QG 56 74LS47 74LS47 U5 U7 P2.0M 7 13 A2 P2.0S 7 13 A4 P2.1M 1 A QA 56 B2 R26 P2.1S 1 A QA 56 B4 R40 12 56 R27 12 56 R41 B QB B QB P2.2M 2 11 C2 P2.2S 2 11 C4 P2.3M 6 C QC 56 D2 R28 P2.3S 6 C QC 56 D4 R42 10 56 R29 10 56 R43 D QD D QD 4 9 E2 4 9 E4 BI/RBO QE 56 F2 R30 BI/RBO QE 56 F4 R44 5 15 56 R31 5 15 56 R45 RBI QF RBI QF 3 14 G2 3 14 G4 LT QG 56 R32 LT QG 56 R46 74LS47 74LS47 Hình 0.6: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển.  Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin là: SerialPort_1.DSN. Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học. ❖ Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 6) cho hệ thống vi điều khiển: S1_MASTER.HEX, S1_SLAVE.HEX ❖ Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính. • Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 (do mạch mô phỏng vẽ không chính xác). • Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây. + Lắp mạch và nạp chương trình điều khiển. 157
  19. Sử dụng các khối "Microcontroller Unit Slot", "Point LED", "Momentary Switch" và "Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp mạch theo thiết kế bên trên. ❖ Bước 11: Kết nối các khối trên mô hình như Hình 5.4.5 để tạo thành hệ thống mạch điều khiển như bên trên. • Tắt nguồn AC cấp cho mô hình thực hành. Hình 0.7: Sơ đồ kết nối mạch trên mô hình. Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều khiển P89V51RB2 trên mô hình thực hành. ❖ Bước 12: Bật nguồn AC cấp cho mô hình thực hành. ❖ Bước 13: Khởi động phần mềm Flash Magic. ❖ Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc độ truyền, chuẩn giao tiếp,... ❖ Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo ra từ Bước 6): S1_MASTER.HEX, S1_SLAVE.HEX ❖ Bước 16: Nạp chương trình vào vi điều khiển. ❖ Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành. • Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại. Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15. • Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành. BÀI TẬP THỰC HÀNH Nội dung: "Chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ liệu thông qua port nối tiếp. Thay đổi trạng thái của các LED tại vi điều khiển 2 (Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master) và ngược lại" 158
  20. Lưu đồ giải thuật: Chương trình cho vi điều khiển Master: ORG 00H MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload). MOV TH1,#-3 ; Baud rate = 9600. MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit. SETB TR1 ; Kich hoat Timer 1. AGAIN: ACALL RECV ; Nhan du lieu tu port ket hop truyen du lieu MOV P1,A ; Xuat len LED. SJMP AGAIN ; Thuc hien lai. ;---- Truyen du lieu noi tiep, Data = ACC. SEND: MOV SBUF,A ; Lay du lieu. JNB TI,$ ; Cho truyen xong du lieu. CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo. RET ; Quay ve. ;---- Nhan du lieu noi tiep, ACC = Data. RECV: MOV A,P0 ; Lay du lieu tu SW. ACALL SEND ; Gui du lieu di JNB RI,RECV ; Cho nhan xong du lieu. MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A. CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo. RET ; Quay ve. ;---------------- END Chương trình cho vi điều khiển Slave: ORG 00H MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload). 159
nguon tai.lieu . vn