Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
509 KB
Nội dung
BÀI 5 Tên bài: CỔNG PORT NỐI TIẾP GI Ớ I THIỆU Bài này trìn h bày về khả năng trao đổi dử liệu giữa 8051 với thiế t bị ngoại vi thông qua cổng giao ti ếp nối t iếp được tí ch hợp bên t rong nhằm t ăng tính linh hoạ t cũng như phạm vi ứng dụng của bộ vi điều khiể n. Nội dung gồm cả lý thuyế t và th ực hành trên bộ th ực t ập UN IKIT giao ti ếp với thiế t bị ngoài như : Thanh ghi dịch, máy vi tính thông qua chuẩn RS 232… MỤC TIÊU THỰC HIỆN • Hiểu đượ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 trong họ MCS-51 • Biế t cách khởi t ạo cổng nối tiêp • Biế t cách th u phát dử liệu nối ti ếp bằng 8051 • Phương pháp t ạo t ốc độ baud NỘ I DUNG CHÍNH Nội dung bài học t ập trung về các chủ đề chính như sau: • Cấu t ạo và các chế độ làm việc của cổng nối ti ếp • Các thanh ghi chức năng đặc biệ t liên quan đến cổng nối ti ếp • Phương pháp khởi t ạo cổng nối ti ếp • Phương pháp thu phát dử liệu • Truyền thông đa xử lý qua cổng nối ti ếp 1 1. MỞ ĐẦU Cổng nối ti ếp tích hợp trong họ 8051 có vài chế độ họ at động trong mộ t phạm vị t ần số rộng, chức năng cơ bản của cổng nối ti ếp là biến đổi tín hiệu xuấ t t ừ song song sang nối ti ếp và tín hiệu nhập t ừ nối ti ếp sang song song. Thiế t bị ngọai vi giao ti ếp với port nối ti ếp qua các chân TX D và RXD như giới thiệu ở bài 2. Các chân này là các chân đa chức năng của port 3, bít P3.1 t ại chân 11 (TXD) và P3.0 t ại chân 10 (RXD). Đặc điểm của port nối ti ếp là truyền song công tòan phần (thu phát đồng th ời) và đặc tính đệm dữ liệu cho phép lưu giữ ký t ử đã nhận trong bộ đệm trong khi nhận ký t ự th ứ hai, nếu CPU đọc ký t ự th ứ nhấ t tr ước khi hoàn t ấ t việc nhận ký t ự th ứ hai thì dữ iệu cũng không bị mấ t. Có 2 thanh ghi đặc biệ t phục vụ cho cổng nối ti ếp đó là ghanh ghi đệm SBUF và thanh ghi điều khiển SCON, bộ đệm port nối ti ếp có địa chỉ là 99H th ực chấ t gồm có 2 bộ đệm. Ghi vào bộ đệm t ức là nạp dữ liệu để xuấ t ra ngòai và đọc bộ đệm t ức là nhận dữ liều t ừ ngòai vào trong bộ đệm. Điều này có nghĩa là có 2 t hanh ghi phân biệ t: Thanh ghi xuấ t chỉ cho phép ghi và thanh ghi nhận chỉ cho phép đọ c. (Hình 5.1) Thanh ghi điều khiển SCON có địa chỉ là 98H được định địa chỉ theo bít bao gồm các bít tr ạng thái và các bít điều khiể n. Các bít điều khiển sẽ xác lập chế độ làm việc của port nối ti ếp còn các bít tr ạng thái cho biế t sự kế t thúc của việc xuấ t và nhập mộ t ký t ự , các bít tr ạng thái có th ể được kiểm tra bằng phần mềm hoặc có th ể được lầp trình để t ạo ra mố t ngắ t. T ần số họ at động của cổng nối ti ếp còn gọi là t ốc độ baud (t ạo ra t ừ dao động trên chip 8051) có th ể được cố định hoặc thay đổ i. Nếu mộ t t ốc độ baud thay đổi được sử dụng thì timer 1 sẽ cung cấp xung đồng hồ t ốc độ baud và phải được lập trình thích hợ p. (Timer 2 trong 8032 và 8052 có th ể được lập trình để cung cấp xung đồng hồ t ốc độ baud.) TxD (P3.1) RxD (P3.0) SBUF CLK (chỉ ghi) D Thanh ghi dịch CLK xung đồng hồ tốc độ baud (xuất) xung đồng hồ tốc độ baud (nhập) SBUF (Chỉ đọc) Bus bên trong 8051 Hình 5.1 Sơ đồ khối cổng nối tiếp 2. THANH GHI Đ I ỀU KHIỂN Chế độ làm việc của cổng nối ti ếp được thiế t lập bằng cách ghi vào th anh ghi điều khiển SCON t ại địa chỉ 99H (bảng 5.1 và bảng 5.2). 2 Trước khi sử dụng cổng nối ti ế p, S CON phải được khởi t ạo đúng chế độ . Ví dụ : mả lệnh sau: MO V SCON; # 01010010B S ẽ khởi t ạo cộng nối ti ếp làm việc ở mode 1 (SMO/SM1 = 0/1) cho phép thu (REN=1) và set cờ ngắ t phát (Ti = 1) để báo cho biế t là cổng nối ti ếp đã sẵn sàng để xuấ t dữ liệ u. 3. CHẾ ĐỘ LÀM VI ỆC Cổng nối ti ếp trong 8051 có 4 chế dộ làm việc và được chọn bằng cách ghi các giá tr ị 1 hoặc 0 vào các bít SMO và SM1 trong thanh ghi SCON. Ba chế độ cho phép tr uyền không đồng bộ trong đó mỗi ký t ự thu hoặc phát được báo lại bởi mộ t Start bít và mộ t Stop bít. Chế độ này t ương t ự như chế độ làm việc của cổng nối t iếp RS232C của máy vi tính. Ở chế độ th ứ t ư , cổng nối ti ếp hoạ t động như mộ t thanh ghi dịch đơn giả n. B ẢNG 5.1 Thanh ghi SCON Bít Ký hi ệu Địa chỉ Mô tả SCON.7 SM0 9FH mode bít ∅ (bảng 5-2) SCON.6 SM1 9EH mode bít 1 (bảng 5-2) mode bít 2. Cho phép truyền thông đa xử lý trong SCON.5 SM2 9DH mode 2 và 3 ; Ri sẽ không tác động nếu bít nhận th ứ 9 bằng 0. SCON.4 REN 9CH bít cho phép thu, phải se t bít này để thu ký t ự SCON.3 TB8 9BH phát bít 8. Bít th ứ 9 được phút ở mode 2 và 3, được set và clear bằng phần mềm. SCON.2 RB8 9AH thu bít 8. Bít th ứ 9 được thu. Cờ ngắ t phát. Set khi kế t thúc việc phát ký t ự , SCON.1 Ti 99H được clear bằng phần mềm. SCON.0 Ri 98H Cờ ngắ t thu. Set khi kế t t húc việc thu ký t ự , được clear bằng phần mềm. 3.1 Thanh ghi dịch 8 bít (mode 0) Mode o được chọn bằng cách ghi giá tr ị 0 vào b ít SM1 và SM0 trong thanh ghi điều khiển SCON, lúc này cổng nối ti ếp hoạ t động như mộ t thanh ghi dịch 8 bít. Dữ liệu nối ti ếp vào và ra thông qua chân RxD và chân T xD t ạo xung dịch chuyể n, 8 bít t hu- phát được bắ t đầu với bít th ấp nhấ t LSB (least significant bit). T ốc độ baud cố định t ại giá tr ị 1/12 t ần số dao động trên chip 8051 (lưu ý là ký hiệu RxD và TxD không còn đúng ý nghĩa trong chế độ này. Chân RxD được dùng để th u và phát dữ liệu trong khi chân TxD thì cung cấp xung dịch). Quá trình truyền đuợc khởi động bằng mộ t lệnh bấ t kỳ viế t dữ liệu vào SBUF, dữ liệu được dịch ra chân RxD (P3.0) theo nhịp xung đồng hồ ở chân T xD (P3.1). Mỗi bít được phát hợp lệ tai chân RxD trong mộ t chu kỳ má y. Trong suố t mộ t chu kỳ máy, xung đồng hồ ở mức th ấp trong khoảng th ời gian S3P1 và lên mức cao trong khoảng S6P1, giản đồ th ời gian dữ liệu được vẽ ở hình 5.2. Quá trình th u được bắ t đầu khi bít cho phép thu REN =1 và cờ ngắ t thu Ri = 0, quy t ắc chung là set bít REN khi bắ t đầu chương trìn h để khởi t ạo cổng nối ti ếp và sau đó xóa Ri để bắ t đầu thu dữ liệ u. B ẢNG 5.2 Chế độ làm việc SMO SM1 MODE Mô tả Tốc độ baud 0 0 0 Thanh ghi Cố định (t ần số dao động chia 12) 0 1 1 8 bít UART Thay đổi (thiế t lập bởi timer) 9 bít UART Cố định (t ần số dao động chia 12 1 0 2 hoặc 64) 1 1 3 9 bít UART Thay đổi (thiế t lập bởi timer) Một chu kỳ máy S1 S2 S3 S4 S5 S6 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 Osc ALE Data out Xung dịch Phóng lớn Data hợp lệ S3P1 S6P1 ALE Data Shift CLOCK (TXD) D0 D1 D2 D3 D4 D5 D6 D7 Hình 5.2 Giản đồ thời gian phát mode 0 Khi bít Ri bị xóa, xung đồng hồ được cung cấp t ừ đường TxD và bắ t đầu chu kỳ máy theo sau, dữ liệu được dịch vào chân RxD. Đương nhiên thiế t bị ngoại vi cung cấp dữ liệu vào chân RxD được đồng bộ hóa với xung dịch ở đường TxD, việc đồng bộ dữ liệu vào cổng nối ti ếp xảy ra t ại cạnh lên của xung TxD (hình 5.3). Mộ t ứng dụng dùng mode thanh ghi dịch là mở rộng ngỏ ra của 8051 . Mộ t vi mạch ghi dịch t ừ nối ti ếp sang song song được nối đến TxD và RxD của 8051 để t ạo ra thêm 8 đường xuấ t dữ liệu (hình 5.4), để mở rộng th êm có th ể nối t ầng (cascade) các vi mạch ghi dịch khác với vi mạch đầu tiên. 3.2 Chế độ UART 8 bít có tốc độ baud thay đổi (Mode 1) Trong chế độ này cổng nối ti ếp 8051 hoạ t động như mộ t bộ thu phát không đồng bộ vạn năng có t ốc độ baud thay đổi viế t t ắ t là UART. Đây là mộ t mạch truyền thông dữ liệu nối ti ếp với mỗi ký t ự được bắ t đầu bởi mộ t start bit (mức th ấp) và theo sau là mộ t stop bít (mức cao), 1 bít chẵn - lẽ đôi khi được chèn vào giữa bít dữ liệu cuối cùng và stop bít. Chức năng chính của UART là biến đổi dữ liệu ra t ừ song song sang nối ti ếp và biến đổi dữ liệu vào t ừ nối ti ếp sang song son g. Một chu kỳ máy ALE Data out RxD Shift clock TxD D0 D1 D2 D3 D4 D5 D6 D7 Hình 5.3 Giản đồ thời gian thu mode 0 Trong mode 1 mười bít dữ liệu được phát đi t ừ TxD hoặc được nhận vào t ừ RxD, những bít này bao gồm 1 start bít (luôn ở mức th ấp), 8 bít dữ liệu (bít đầu tiên là L S B) và 1 stop b ít (luôn ở mức cao) khi thu, bít stop được đưa vào RB8 trong SCON. Đối với 8051 t ốc độ baud được xác định bởi timer 1, đối với 8052 bởi timer 1 hoặc timer 2 hoặc cả hai (mộ t phát và mộ t thu). Việc dịch chuyển và đồng bộ các th anh ghi dịch cổng nối ti ếp trong mode 1,2 và 3 được thiế t lập bởi mộ t bộ đếm 4 bít chia 16, ngỏ ra của bộ đếm này là xung t ốc độ baud (Hình 5.5) ngỏ vào bộ đếm được chọn bằng phần mềm. Quá trình phát được khởi động bằng cách ghi vào SBUF nhưng việc phát cũng không th ực sự bắ t đầu cho đến lần tràn kế ti ếp của bộ đếm cung cấp xung t ốc độ baud cho cổng nối ti ế p. 8 ngỏ ra mở rộng 8051 TxD (P3.1) RxD (P3.0) Clock Thanh ghi dịch Data Hình 5.4 Mode thanh ghi dịch 16x tốc độ baud ÷ 12 X ung t ốc độ baud Thanh ghi dịch cổng nối ti ếp Hình 5.5 Xung dịch cổng nối tiếp Dữ liệu dịch đưa ra t ại chân TxD được bắ t đầu bằng start bit, theo sau là 8 bít dữ liệu và kế ti ếp là stop b ít, th ời gian của mỗi bít là nghịch đảo của t ốc độ baud được lập trình trong timer. Cờ ngắ t phát (Ti) được set ngay khi stop bít xuấ t hiện ở TxD (Hình 5.6). Quá trình th u được khởi động bởi sườn xuống t ại RxD, ngay lập t ức bộ đếm 10 bít xóa để gán số đếm với chuổi bít nhận vào (bít kế ti ếp đến khi bộ đếm tràn và cứ th ế ti ếp t ục). Dòng bít vào được được lấy mẫu ở giữa 16 số đếm. Quá trình th u bao gồm việc nhận dạng sự sai sót của bít bằng cách yêu cầu mộ t tr ạng thái 0 (start bít) của 8 số đếm sau sườn xuống đầu tiên. Nếu điều này không xảy ra gỉa sử bộ th u bị kích thí ch bởi nhiều thay đổi vì mộ t ký t ự thì mạch thu sẽ reset và tr ở về tr ạng thái nghỉ cho đến khi gặp sườn xuống ti ếp theo. Giả sử mộ t bít start hợp lệ được nhận ra, quá trình nhận ký t ự sẽ ti ếp t ụ c, bít star t được bổ qua và 8 bít dữ liệu được dịch vào thanh ghi nối ti ế p, khi việc nhận 8 bít hoàn t ấ t thì sẽ xảy ra những điều sau đây: 1. Bít th ứ 9 (stop bít) được chuyển vào RB8 trong SCON 2. Tám bít dữ liệu được nạp vào SBUF 3. Cờ ngắ t thu (Ri) bị set. TXD Start bit 1 tốc độ baude D0 D1 D2 D3 D4 D5 D6 D7 Stop bit T1 SCON.1 Ngắt phát Hình 5.6 Thiết lập cờ Ti Tuy nhiên, các điều nói t rên chỉ xảy ra nếu th ỏa mãn các điều kiện sau: 1. Ri = 0 2. SM 2 = 1 và stop bít nhận vào bằng 1, hoặc SM 2 = 0 Yêu cầu Ri = 0 để bảo đảm rằng phần mềm đã đọc xong ký t ự tr ước đó (và Ri bị xóa) yêu cầu th ứ hai phức t ạp hơn nhưng chỉ áp dụng trong chế độ truyền thông đa xử lỷ , điều này có nghĩa là không set bít Ri trong chế độ truyền thông đa xử lý khi bít dữ liệu th ứ 9 bằng 0. 3.3 UART 9 bít với tốc độ baud cố định (Mode 2) Khi SM1 = 1 và SM0 = 0, cổng nới t iếp hoạ t động như mộ t UART 9 bít có t ốc độ baud cố định , số bít thu và phát gồm 11 bít, 1 start bít, 8 data bít, 1 b ít dữ liệu th ứ 9 lập trình được và 1 stop bít, khi phát bít th ứ 9 là bít bấ t kỳ trong TB8 của SCON (có th ể là b ít parity). Khi thu, bít th ứ 9 nhận vào sẽ được đưa vào RB8. T ốc độ baud của mode 2 bằng 1/32 hoặc 1/ 64 t ần số dao động trên chip. 3.4 Chế độ UART 9 bít với tốc độ baud thay đổi (Mode 3) Mode này giớng như mode 2 ngoại tr ừ t ốc độ baud được lập trình và cung cấp bởi timer. Trên th ực t ế mode 1, 2 và 3 rấ t giống nhau. Điểm khác nhau là t ốc độ baud (cố định trong mode 2, thay đổi trong mode 1 và 3) và về số lượng bít dữ liệu (8 trong mode 1, 9 trong mode 2 và 3). 4. KHỞ I ĐỘNG VÀ TRUY XUẤ T THANH GHI PORT NỐ I TI Ế P 4.1 Cho phép nhận Phải set bít cho phép nhận REN trong thanh ghi SCON bằng phần mềm để cho phép quá trình thu các ký t ự . Việc này th ường được th ực hiện ở đầu chương trình. Khi cổng nối ti ế p, bộ đình th ời được khởi động, có 2 cách th ực hiệ n. SET B REN S ẽ làm REN = 1 hoặc dùng lện sau MOV SCON , # xxx 1 xxxx B S ẽ set bít REN và các bít còn lại của SCON có th ể là 1 hoặc 0. 4.2 Bít dữ liệu thứ 9 Bít dữ liệu th ứ 9 được phát ở mode 2 và 3 phải được nạp vào TB8 bằng phần mềm. Bít dữ liệu th ứ 9 đã nhận thì được thay vào RB8. Phần mềm có th ể hoặc không cần đến bít dữ liệu th ứ 9 phụ th uộc vào sự thiế t lập truyền thông của thiế t bị nối ti ế p. (bít dữ liệu th ứ 9 còn đóng mộ t vai trò quan tr ọng trong truyền thông đa xử lý). 4.3 Thêm vào bít chẵn - lẻ (parity) Mộ t ứng dụng th ường dùng của bít dữ liệu th ứ 9 là để chèn bít chẵn - lẽ vào trong ký t ự , như đã biế t bít parity trong thanh ghi PSW được set và clear trong t ừng chu kỳ máy để t ạo bít chẵn t ương ứng với dữ liệu 8 bít trong bộ tích lũ y. VD: Nếu yêu cầu truyền thông cần truyền đi 8 b ít dữ liệu kèm theo 1 bít chẵ n, đoạn mã lệnh sau sẽ phải đi 8 bít trong bộ tích lũy và bít chẵn là b ít th ứ 9 MOV C, P ; đưa bít chẵn vào TB8 MOV TB8, C ; bít này tr ở thành bít dữ liệu th ứ 9 MOV SBUF, A ; chuyển 8 bít t ừ A vào SBUF Nếu cần truyền bít lẻ thì đoạn mã lệnh được sửa lại như sa u: M OV C , P ; đưa bít chẵn vào cờ C CPL C ; đổi thành b ít lẻ MO V TB8, C MOV SBUF, A Đương nhiên việc sử dụng bít parity không bị giới hạn ở mode 2 và 3. Trong mode 1, tám bít được phát đi có th ể bao gồm 7 bít dữ liệu cộng th êm mộ t parity bít. Để ph át mã ASCII 7 bít và bít chẵn là bít th ứ 8, có th ể viế t như sau: CLR ACC-7 ; xóa bít MSB, bít parity là bít P MO V C, P MOV ACC-7, C ; đưa bít chẵn vào MSB M OV SB U F, A ; gởi ký t ự 7 bít và mộ t b ít chẵn 4.4 Các cờ ngắt Các cờ ngắ t thu và phát (Ri và Ti) trong SCON có vai trò quan tr ọng trong yêu cầu truyền thông nối ti ếp của 8051. Cả hai bít này được set bằng phần cứng nhưng phải xóa bằng phần mềm. Cụ th ể là Ri được set khi kế t thúc quá trình thu ký t ự và cho biế t là bộ đệm thu đả đầ y. Điều này được kiểm tra bằng phần mềm hoặc có th ể được lập tr ình để t ạo ra mộ t ngắ t. Nếu chương trình cần thu mố t ký t ự t ừ th iế t bị ngoại vi được kế t nối với cổng nối ti ếp (thì nó phải đợi cho đến khi Ri được se t, sau đó xóa Ri và đọc ký t ự trong SBUF, đoạn mã th ực hiện như sau: WAIT : JNB Ri, WAIT ; Kiểm tra Ri cho đến khi được set CLR Ri ; xóa Ri MOV A, SBUF ; đọc ký t ự Ti được set khi kế t thúc quá trình phát ký t ự và cho biế t là bộ đếm phát đã tr ống, để phát mố t ký t ự đến thiế t bị ngoại vi kế t nối với cổng nối ti ế p. Trước tiên phải chắc chắn là cổng nối ti ếp đã sẵn sàng, nói cách khác nếu mộ t ký t ự tr ước đó đã được phá t đi thì chương trình phải chờ cho đến khi kế t thúc quá trình phát tr ước khi phá t ký t ự ti ếp t heo. Đoạn mã sau sẽ phát mộ t ký t ự chứa trong A. WAIT: JNB Ti, WAIT ; kiểm tra Ti cho đến khi được set CLR T i ; xóa T i MOV SBUF, A ; phát ký t ự 5. TRUYỀN THÔNG ĐA X Ử LÝ Mode 2 và 3 cung cấp mộ t tính năng đặc biệ t trong lĩnh vực truyền thông đa xử lý. Trong các chế độ này, dữ liệu thu vào là 9 bít và bít th ứ 9 được đưa vào RB8. Cũng có th ể được lập trình sao cho khi stop bít được nhân; ngắ t nối ti ếp chỉ tá c động nếu RB8=1. Đặc tính này có được bằng cách se t bít SM2 trong SCON. Mộ t ứng dụng điển hình là kế t nối nhiều 8051 trong mộ t mạng theo kiểu chủ - t ớ (Mas ter/ Slaver) như trình bày ở hình 5.7. Khi vi xử lý mas t er muốn gởi mộ t khối dữ liệu đến mộ t trong các vi xử lý slaver. Trước tiên, nó sẽ gởi mộ t byte địa chỉ để nhân dạng slaver đ ích, điểm khác nhau giữa byte địa chỉ so với byte dữ liệu là bít th ứ 9 trong byte địa chỉ có giá tr ị 1 nhưng trong byte dữ liệu thí bít này bằng 0. Tuy nhiên , byte địa chỉ sẽ ngắ t t ấ t cả các slaver, mỗi slaver có th ể khảo sát byte nhận được để kiểm tra xem có phải mình được định địa chỉ bỏ qua các bít SM2 được set của chúng và tr ở về công việc khác không nhận các phát đi byte địa chỉ kế ti ế p. Mộ t sơ đồ t ương ứng có th ể được đưa ra nữa khi sự kế t nối chủ - t ở được thiế t lậ p, bộ xử lý slaver cũng có th ể gởi đến bộ master, th ủ thuậ t là không dùng bít dữ liệu th ứ 9 sau khi th ực hiện kế t nối (các slaver khác có t hể vô tình được chọn). Bít SM2 không ảnh hưởng trong mode 0 và trong mode 1 bít này có th ể được dùng để kiểm tra sự hợp lệ của stop bít. Trong khi thu ở mode 1 nếu SM2 = 1 thì ngắ t thu sẽ được tác động tr ừ khi đã nhận được mộ t stop bít hợp lệ . 32 đường I/0 32 đường I/0 8051 chủ TxD P0 P1 P2 P3 8051 t ớ # 1 RxD P0 P1 P2 P3 8051 t ớ # 2 RxD Hình 5.7 Truyền thông đa xử lý 6. T ỐC ĐỘ BAUD Như đã mô t ả trong bảng 5.2, t ốc độ baud được cố định ở mode 0 và mode 2. Ở mode 0 t ốc độ này luôn bằng t ần số dao động của 8051 chia cho 12 th ường là dao động th ạch anh, nếu t ần số dao động này là 12MHz thì t ốc độ baud ở mode 0 là 1MHz (hình 5.8a) Khi reset hệ th ống gía tr ị mặc định của t ốc độ baud ở mode 2 bằng t ần số dao động chia cho 64. T ốc độ baud cũng bị ảnh hưởng bởi mộ t bít trong thanh ghi PCON, bít của PCON là bít SMOD, set SMOD bít sẽ làm t ăng đôi t ốc độ baud ở mode 1, 2 và 3. Trong mode 2 t ốc độ baud có th ể được t ăng đôi t ừ giá tr ị mặc định là 1/64 t ần số dao động (SMOD = 0) đến 1/32 t ần số dao động (SMOD = 1 ). (Xem hình 5.8b) Vì thanh ghi PCON không được định địa chỉ bít, nên để set bít SMOD mà không làm thay đổi các bít khác phải cần mộ t thao tác đọc - sửa - ghi như sau: M OV A, P C O N ; đọc giá tr ị hiện hành của PCON SETB ACC.7 ; set bít 7 (SMOD) MOV PCON, A ; ghi giá tr ị mới vào PCON Các t ốc độ baud của 8051 trong chế độ 1 và 3 được xác định bởi t ốc độ tràn của timer 1. Vì timer hoạ t động với t ần số t ương đối cao, nên phải chia thêm 32 (16 nếu SMOD = 1) tr ước khi cung cấp xung t ốc độ baud cho cổng nối ti ế p. T ốc độ baud của 8052 ở chế độ 1 và 3 được xác định bởi t ốc độ tràn của timer 1 hoặc timer 2 hoặc cả hai. dao động thạch anh (a) mode 0 ÷ 12 xung baud dao động thạch anh ÷ 64 ÷ 32 SMOD = 0 SMOD = 1 xung baud (b) mode 2 tràn cờ timer 1 ÷ 64 ÷ 16 SMD = 0 SMD = 1 xung baud (c) mode 1 và 3 Hình 5.8 Tạo xung baud cho cổng nối tiếp Dùng timer 1 để tạo xung baud Phương pháp t ạo xung baud là khởi t ạo TMOD ở chế độ t ự nạp lại 8 bít (mode 2 của timer) và đặ t đúng giá tr ị nạp lại trong TH1 t ương ứng với t ốc độ baud cần t hiế t lệnh cách khởi t ạo TMOD như sau: MOV TMOD, # 0010 xxxx B Các ký hiệu “x” có th ể là 1 hoặc 0 theo yêu cầu của timer 0. Có th ể t ạo xung baud t ốc độ chậm bằng cách dùng chế độ 16 bít, timer mode 1 với TMOD = 0001 xxxx B. Tuy nhiên, có mộ t lỗi nhỏ xảy ra do cặp thanh ghi dịnh th ời TH1/TL1 phải được khởi t ạo lại sau mỗi lần tràn. Nên t hực hiện việc này bằng mộ t chương trình phục vụ ngắ t, mộ t lựa chọn khác là dùng xung ngoài kích vào ngỏ T1 (P3.5). Dù áp dụng cách nào thì t ốc độ baud luôn là t ốc độ tràn của timer 1 chia cho 32 (hoặc chia cho 16 nếu SMOD = 1) Công th ức t ổng quát để tính t ốc độ baud ở chế độ 1 và 3 như sau: T ốc độ baud = T ốc độ tr àn timer 1 ÷ 32 VD: Để có t ốc độ 1200 baud, suy ra t ốc độ tràn của t imer bằng 32 lần là 38 , 4 KHz . Nếu t ần số th ạch anh là 12MHz thì xung kích cho timer 1 là 1MHz = 1.000 KHz, vì timer phải tràn với t ốc độ là 38,4KHz nên sau mỗi 1.000/38,4 = 26,04 xung (làm tròn là 26) kích thì timer phải t ự tràn. Do timer đếm lên và chỉ tr àn khi số đếm chuyển t ừ FFH xuống 00H nên giá tr ị nạp lại phải nhỏ hơn 0 mộ t lượng là +26, giá tr ị đúng là –26 , cách dễ nhấ t để đặ t giá tr ị nạp lại vào TH1 là: MOV TH1, # -26 Phần mềm hợp ngữ sẽ dịch –26 thành 0E6H, do đó lệnh t ương đương lệnh trên là: MOV TH1, 0E6H Do làm tràn nên sẽ làm sai chút ít kế t quả t ốc độ baud, phương pháp truyền không đồng bộ (start/ stop) cho phép sai số đến 5%. Có th ể t ạo t ốc độ baud chính xác bằng [...]... cổng nối tiếp, quá trình phát bắt đầu ở lần tràn kế tiếp của bộ đêm 16 tạo xung kích cho cổng nối tiếp (hình 5.5) Cuối cùng, bít ACC.7 được xóa để nội dung của A cũng giống như khi gọi chương trình con OUTCHR có thể được gọi để phát ký tự đơn hoặc một chuổi ký tự VD: Các lệnh sau đây sẽ phát mã ASCII của ký tự “z” ra thiết bị nối tiếp kết nối với cổng nối tiếp của 8051 MOV A, # ‘z’ CALL OUTCHR (tiếp. .. gọi 7 BÀI TẬP Những bài tập sau đây là các chương trình điển hình trong yêu cầu giao tiếp giữa các thiết bị đầu cuối (hoặc các thiết bị nối tiếp khác) với máy tính Giả sử cổng nối tiếp của 8051 được khởi tạo ở chế độ UART 8 bít và tốc độ buade được cung cấp bởi timer 1 1 Viết chương trình con có tên là OUTSTR để gởi một chuỗi mã ASCII kết thúc bằng ký tự null đến thiết bị kết nối với cổng nối tiếp của... byte 00H 3 Viết chương trình gởi liên tục các chử cái (chử nhỏ) đến thiết bị kết nối với port nối tiếp 8051 Dùng chương trình con OUTCHAR ở phần trên 4 Dựa trên chương trình con OUTCHAR viết chương trình gởi liên tục các mã ASCII hiển thị được (20H – 7EH) đến thiết bị kết nối với ccổng nối tiếp của 8051 5 Sửa lại lời giải của bài tập trên để đưa ngỏ ra đến màn hình bằng cách dùng mã XOFF và XON nhập vào... trình con INCHAR và OUTCHR, viết chương trình nhập các ký tự từ một thiết bị kết nối với port nối tiếp của 8051 và hiển thị trên màn hình bằng cách thay thế bằng dấu chấm (.) đối với các ký tự điều khiển (có mã ASCII 00H đến 1FH và 7FH) 8 Dùng chương trình con OUTCHR viết chương trình xóa màn hình kết nối với port nối tiếp 8051 sau đó gởi tên của bạn ra màn hình 10 lần trên 10 dòng khác nhau Chức năng... TMOD, # 20 H TH1, # -13 TR1 ; cổng nối tiếp ở mode 1 ; timer 1, mode 2 ; trị nạp lại tương ứng 2.400 baud ; khởi động timer 1 Ví dụ 5-2: Chương trình con xuất ký tự Viết một chương trình con trên là OUTCHR để phát mã ASCII 7 bít trong thanh ghia A ra cổng nối tiếp của 8051 với bít lẻ là bít thứ 8, khi trở về nội dung của A vẫn không bị thay đổi Ví dụ này và mô tả tiếp theo là 2 trong hầu hết các chương... nhớ chương trình ngoài và chương trình gọi đặt địa chỉ của chuỗi vào con trỏ dử liệu trước khi gọi OUTSTR Chuuỗi này là các byte ASCII nối tiếp và kết thúc bằng byte 00H 2 Viết chương trình con có tên INLINE để nhập một dòng mã ASCII từ một thiết bị nối với cổng nối tiếp của 8051 và lưu vào RAM nội tại địa chỉ 50H Giả sử dòng dử liệu được kết thúc bằng ký tự xuống dòng Đặt mã của ký tự xuống dòng trong... -7(F9H) -13(F3H) -26(E6H) -3(FDH) -3(FDH) -12(F4H) -24(E8H) 1 0 0 1 0 0 0 Tốc độ baud thực sự 8923 2404 1202 19200 9600 2400 1200 Sai số 7% 0,16% 0,16% 0 0 0 0 Ví dụ 5-1: Khởi tạo cổng nối tiếp Viết đoạn mã lệnh khởi tạo cổng nối tiếp hoạt động như một UART với tốc độ 2400 baud, dùng timer 1 để cung cấp xung baud Trong ví dụ này phải khởi tạo 4 thanh ghi SMOD, TMOD, TCON và TH1, các gía trị cần thiết được... 1 SM1 1 C/T 0 TR1 1 1 SM2 0 M1 1 TF0 0 1 REN 1 M0 0 TR0 0 1 TB8 0 GTE 0 IE1 0 0 RB8 0 C/T 0 IT1 0 0 Ti 1 M1 0 IE0 0 1 Ri 0 M0 0 IT0 0 1 Thiết lập SMO/SM1 = 0/1 để đặt cổng nối tiếp vào chế độ UART 8 bít, REN = 1 cho phép cổng nối tiếp nhận các ký tự, đặt Ti = 1 cho phép phát ký tự đầu tiên bằng cách báo rằng bộ đệm phát trống Đối với TMOD việc thiết lập M1/M0 = 1/0 sẽ đặt timer 1 ở chế độ tự nạp lại... với các thiết bị hổ trợ chuẩn ANSI (american national standarts institute) 9 Trong hình 5.1 cho thấy một kỹ thuật mở rộng ngỏ ra của 8051 Giả sử với cấu hình như thê viết một chương trình khởi tạo port nối tiếp 8051 ở chế độ thanh ghi dịch và sau đó ánh xạ nội dung của RAM nội tại địa chỉ 20H đến 8 ngỏ ra mở rộng, mỗi giây 10 lần ... “z” ra thiết bị nối tiếp kết nối với cổng nối tiếp của 8051 MOV A, # ‘z’ CALL OUTCHR (tiếp tục) Ví dụ 5-3: Chương trình con nhập ký tự Viết chương trình con có tên là INCHR để nhập mốt ký tự từ cổng nối tiếp của 8051 và trở về với mã ASCII 7 bít trong thanh ghi A Sử dụng bít kiểm tra lẻ torng bít nhập thứ 8 và set cờ carry nếu có lỗi parity INCHAR: JNB CLR MOV MOV CPL CLR RET Ri, $ Ri A, SBUF C, P C . BÀI 5 Tên bài: CỔNG PORT NỐI TIẾP GI Ớ I THIỆU Bài này trìn h bày về khả năng trao đổi dử liệu giữa . cổng nối ti ếp • Phương pháp khởi t ạo cổng nối ti ếp • Phương pháp thu phát dử liệu • Truyền thông đa xử lý qua cổng nối ti ếp 1 1. MỞ ĐẦU Cổng nối . giao ti ếp với port nối ti ếp qua các chân TX D và RXD như giới thiệu ở bài 2. Các chân này là các chân đa chức năng của port 3, bít P3.1 t ại