HBK Tp HCMKhoa T BMT Ti liu Vi
ĐHBK Tp HCM-Khoa Đ-ĐT BMĐT Tài liệu: Vi Xử Lý - Hồ Trung Mỹ CHƯƠNG 3 HỌ VI ĐiỀU KHIỂN 8051 1
3. 6 Port (cổng) nối tiếp (serial port) 2
Các hoạt động port nối tiếp của 8051 • • • Giới thiệu Chuẩn EIA-232 E hoặc RS 232 Giao tiếp cổng nối tiếp của MCS-51/52 Ứng dụng của mode 0 Ứng dụng của mode 1 Ứng dụng của mode 2 & 3 3
Truyền dữ liệu nối tiếp • Truyền dữ liệu khoảng cách xa. • Tốc độ truyền dữ liệu thấp. • Truyền dữ liệu nối tiếp đồng bộ – Dùng tín hiệu clock riêng để đồng bộ hóa mạch thu và phát. – Thường dùng khung dữ liệu lớn hơn và nhanh hơn. • Truyền dữ liệu nối tiếp bất đồng bộ – Không cần tín hiệu clock riêng để đồng bộ hoá việc chuyển dữ liệu. – Dựa trên ký tự. Mỗi ký tự được đóng khung bằng “start bit” và “stop bit”. – Bên thu cần nhận dạng “start bit” và “stop bit” để nhận đúng ký tự dữ liệu. 4
Truyền dữ liệu nối tiếp đồng bộ và bất đồng bộ với 8051 (truyền nối tíếp đồng bộ) (truyền nối tíếp bất đồng bộ) 5
Đường truyền dữ liệu cơ bản Communication link DTE Computer or terminal DCE Modem DTE Computer or terminal • Người ta có thể sử dụng đường điện thoại công cộng hoặc dành riêng làm môi trường truyền dữ liệu nối tiếp bất đồng bộ. • Modem được dùng để chuyển đổi dữ liệu số thành dạng sóng analog thích hợp cho việc truyền trên đường dây điện thoại và ngược lại. • Có 2 kiểu đường truyền: điểm đến điểm và đa điểm. 6
Đường truyền điểm đến điểm và đa điểm Rx Tx Station. Rx Station Tx Peer Master Slave 1 Slave 2 Slave n Address 1 Address 2 Address n 7
Cơ bản về các đường truyền • Hệ thống 2 dây và 4 dây: – 2 dây: tín hiệu và đất. – 4 dây: 2 bộ 2 dây. • Các kiểu đường truyền: – Đơn công (simplex link): đường dây dành riêng cho thu hoặc phát, không phải cả hai. – Bán song công (half-duplex link): đường dây có thể dùng cho phát hoặc thu nhưng mỗi lần chỉ có 1 chiều. – Song công (full-duplex link): Phát và thu có thể tiến hành đồng thời. Đường truyền cần 4 dây. 8
Cơ bản về các đường truyền Signal pattern for letter “A” (41 H) Start bit Stop bit 5 V 0 V 0 1 0 0 0 1 Serial port D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7 >+3 V <3 V RS 23 2 mark space 9
EIA-232 -E or RS-232 • EIA-232 -E or RS-232 có thể áp dụng cho các sơ đồ truyền thông dữ liệu sau: – Truyền thông nối tiếp. – Đồng bộ và không đồng bộ. – Các đường truyền riêng rẽ hoặc thuê bao chuyên dụng. – Dịch vụ chuyển mạch. – 2 dây hoặc 4 dây. – Điểm đến điểm hoặc đa điểm. • Giao diện EIA-232 -E: cơ khí, chức năng, thủ tục, điện. 10
Các đặc tính cơ của EIA-232 -E • Đầu kết nối 25 -chân DB 25 /9 -chân DB 9. 11
Các tín hiệu của DB-9 12
Kết nối EIA-232 -E Signal direction Signal Name Signal directio to DCE Secondary Tx. D 14 1 protective ground Both to DTE Tx clock 15 2 Tx. D to DCE to DTE Secondary Rx. D 16 3 Rx. D to DTE Rx clock 17 4 Request To Send to DCE unassigned 18 5 Clear To Send to DTE Secondary Request To Send to DCE 19 6 Data Set Ready to DTE to DCE Data Terminal Ready 20 7 Signal ground Both to DTE Signal Quality Detect 21 8 Carrier Detect to DTE Ring indicator 22 9 Reserved Data Rate Select 23 10 Reserved Tx clock 24 11 Unassigned unassigned 25 12 to DTE Secondary Carrier Detect 13 to DTE Secondary Clear To Send Both to DCE 13
Các lỗi truyền dữ liệu • Lỗi khung FE (framing error): khi ký tự nhận được có khung dữ liệu không đúng do sai bit start hoặc các bit stop; lỗi này thường được thiết lập bằng sự vắng mặt của bit stop. • Lỗi tràn thu OE (receive overrun): một hoặc nhiều ký tự trong dòng dữ liệu (data stream) bị mất. • Lỗi chẵn lẻ PE (parity error): lỗi chẵn lẻ ở ký tự nhận được. 14
Kết nối không modem Khi 2 DTE rất gần nhau, không cần sử dụng các modem để kết nố Pin Circuit name DTE X 22 20 8 6 5 4 3 2 24 17 7 Ring indicator Data terminal ready CD Data carrier detect CF Data set ready Clear to send CB Request to send CA Receive data BB Transmit data Transmitter timing DA Receiver timing Signal ground DTE Y CE CE CD CF CC CC CB CA BB BA BA DA DD AB 15
Giao diện mp với RS 232 • Truyền (phát): – Biến đổi dạng data song thành dạng nối tiếp. – Thêm bit start, các bit stop và bit chẵn lẻ (tùy chọn) vào data nối tiếp. – Chuyển đổi các mức điện áp thành các mức điện áp của chuẩn EIA-232 -E. (sử dụng chip thu phát: MAX 232, MC 145403, v. v…. ) • Nhận (thu): – Chuyển đổi các mức điện áp của dòng data đến (incoming data stream) thành các mức điện áp phù hợp với mp. – Phát hiện bit start và các bit stop. – Thực hiện việc kiểm tra chẵn lẻ (tùy chọn). – Biến đổi dạng data nối tiếp thành dạng song. 16
Sơ đồ khối port nối tiếp của 8051 Cù ng địa ch ỉ 17
Các đặc tính của port nối tiếp 8051 • • Song công (full-duplex) Đệm khi thu (bộ đệm 1 byte) Có 4 mode hoạt động (mode 0 - 3) Lập trình dễ dàng để: – Chọn tốc độ (cố định (on-chip OSC/12 hoặc OSC/64), hoặc thay đổi được (T 1)). – Chọn chế độ làm việc. – Cho chạy (SCON). • Dễ sử dụng – Truyền dữ liệu: MOV SBUF, A – Nhận dữ liệu: MOV A, SBUF 18
Chức năng khác của các chân port BIT NAME BIT ADDRESS ALTERNATE FUNCTION P 3. 0 Rx. D B 0 H Receive data for serial port P 3. 1 Tx. D B 1 H Transmit data for serial port P 3. 2 /INT 0 B 2 H External interrupt 0 P 3. 3 /INT 1 B 3 H External interrupt 1 P 3. 4 T 0 B 4 H Timer/counter 0 external input P 3. 5 T 1 B 5 H Timer/counter 1 external input P 3. 6 /WR B 6 H External data memory write strobe P 3. 7 /RD B 7 H External data memory read strobe P 1. 0 T 2 90 H Timer/counter 2 external input P 1. 1 T 2 EX 91 H Timer/counter 2 capture/load 19
Byte Address Bit Address Register 99 Not bit addressable SBUF 98 90 9 F 97 9 E 9 D 9 C 9 B 9 A 99 98 SCON 96 95 94 93 92 91 90 P 1 8 D Not bit addressable TH 1 8 C Not bit addressable TH 0 8 B Not bit addressable TL 1 8 A Not bit addressable TL 0 89 Not bit addressable TMOD 88 8 F 8 E 8 D 8 C 8 B 8 A 89 88 87 TCON PCON 83 Not bit addressable DPH 82 Not bit addressable DPL 81 Not bit addressable SP 80 87 86 85 84 83 82 81 80 P 020
Byte addr F 0 Bit Address F 4 F 3 F 2 F 1 F 0 Register B F 7 F 6 F 5 E 0 E 7 E 6 E 5 E 4 E 3 E 2 E 1 E 0 A or ACC D 0 D 7 D 6 D 5 D 4 D 3 D 2 - D 0 PSW Not bit addressable CD CC CB CA C 9 C 8 TH 2 TL 2 RCAP 2 H RCAP 2 L T 2 CON CD CC CB CA C 8 CF CE B 8 - - - BC BB BA B 9 B 8 IP B 0 B 7 B 6 B 5 B 4 B 3 B 2 B 1 B 0 P 3 A 8 AF - - AC AB AA A 9 A 8 IE A 0 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 P 2 21
Thanh ghi điều khiển port nối tiếp SCON 22
Các mode (chế độ) hoạt động của port nối tiếp Trước khi sử dụng port nối tiếp, SCON được khởi tạo giá trị để chọn mode, và v. v. . . Thí dụ, lệnh sau: MOV SCON, #01010010 B khởi tạo giá trị cho port nối tiếp ở mode 1 (SM 0/SM 1 = 0/1), cho phép bộ thu (REN = 1) và đặt cờ ngắt phát (TI = 1) để chỉ bộ phát sẵn sàng hoạt động. 23
Mode 0: Thanh ghi dịch 8 bit (1/2) 24
Mode 0: Thanh ghi dịch 8 bit (2/2) 25
Mode 1: UART 8 bit có tốc độ baud thay đổi được (1/3) • Ở mode 1, 10 bit được phát đi trên TXD hoặc được thu vào ở RXD. Các bit này bao gồm 1 bit start (luôn là 0), 8 bit dữ liệu (LSB đi trước), và 1 bit stop (luôn là 1). • Để hoạt động bộ thu, bit stop đi vào RB 8 trong SCON. Trong 8051, tốc độ baud được đặt bằng tốc độ tràn của timer 1. 26
Mode 1: UART 8 bit có tốc độ baud thay đổi được (2/3) • Việc phát được khởi động bằng cách ghi vào SBUF, nhưng không thật sự bắt đầu cho đến khi cạnh xuống kế của bộ đếm chia 16 cung cấp tốc độ baud cổng nối tiếp. Dữ liệu được dịch ra trên đường TXD bắt đầu bằng bit start, theo sau là 8 bit dữ liệu, và kế đến là bit stop. Chu kỳ của mỗi bit là nghịch đảo của tốc độ baud được lập trình trong timer. Cờ ngắt để phát (TI) được đặt lên 1 ngay khi stop bit xuất hiện trên TXD. sự kiện đồng bộ hóa 27
Mode 1: UART 8 bit có tốc độ baud thay đổi được (3/3) • Việc thu được khởi động bởi chuyển tiếp 1 sang 0 ở RXD. Bộ đếm chia 16 được reset tức thời để đồng chỉnh các số đếm với chuỗi bit đến. Chuỗi bit đến được lấy mẫu ở giữa 16 lần đếm. • Giả sử bộ thu phát hiện bit bắt đầu hợp lệ thì tiếp tục nhận ký tự. Bit bắt đầu được bỏ qua và 8 bit dữ liệu được nhịp vào thanh ghi dịch cổng nối tiếp. Khi tất cả 8 bit đã được nhịp vào thì xảy ra: 1. Bit thứ 9 (bit stop) được nhịp vào RB 8 trong SCON. 2. SBUF được nạp với 8 bit dữ liệu, và 3. Cờ ngắt của bộ thu (RI) được đặt lên 1. • Tuy nhiên các điều trên chỉ xảy ra nếu có các điều kiện sau: 1. RI = 0, và 2. SM 2 = 1, và bit stop nhận được = 1, hoặc SM 2 = 0. • Yêu cầu RI = 0 để bảo đảm rằng phần mềm đã đọc ký tự trước (và đã xóa RI). Điều kiện thứ 2 thì hơi phức tạp, nhưng chỉ áp dụng trong chế độ truyền thông đa xử lý. Nó hàm ý “Không được đặt RI lên 1 trong chế độ 28 truyền thông đa xử lý khi bit dữ liệu thứ chín là 0”.
Mode 2: UART 9 bit có tốc độ baud cố định • Khi SM 0 =1 và SM 1 = 0, port nối tiếp hoạt động ở mode 2 như UART 9 bit với tốc độ baud cố định. • Mười một bit được phát hoặc thu: 1 bit start, 8 bit dữ liệu, 1 bit dữ liệu thứ 9 lập trình được, và 1 bit stop. • Khi phát, bit thứ 9 là nội dung của bit TB 8 trong SCON. • Khi thu, bit thứ 9 thu được đặt trong RB 8. • Tốc độ baud ở mode 2 là 1/32 hay 1/64 tần số mạch dao động trên chip (xem thêm mục tốc độ baud port nối tiếp). 29
Mode 3: UART 9 bit có tốc độ baud thay đổi được • Mode 3 giống với mode 2 ngoại trừ tốc độ baud được lập trình và được cung cấp bởi timer. • Thật ra các mode 1, 2, và 3 rất giống nhau. Sự khác biệt là tốc độ baud (cố định trong mode 2, thay đổi được trong mode 1 và 3) và số bit dữ liệu (8 bit trong mode 1, 9 bit trong mode 2 và 3) 30
Khởi tạo và truy cập các thanh ghi port nối tiếp • Các tác vụ với port nối tiếp – Cho phép bộ thu – Truyền (thu/phát) dữ liệu nối tiếp – Thêm bit kiểm tra chẵn lẻ – Các cờ ngắt – Đặt tốc độ baud cho port nối tiếp – Truyền thông đa xử lý 31
Cho phép bộ thu – Truyền dữ liệu nối tiếp • Sử dụng các bit trong thanh ghi SCON – Cho phép bộ thu (REN – bit 4) SETB REN hoặc MOV – SCON, #xxx 1 xxxx. B ; với x=0/1 Rx Interrupt (RI, Rx buffer Full, bit 0) Tx Interrupt (TI, Tx buffer Empty, bit 1) 1. Thu nối tiếp: WAIT: 2. JNB CLR MOV RI, WAIT RI A, SBUF Phát nối tiếp: WAIT: JNB CLR MOV TI, WAIT TI SBUF, A 32
Thêm bit kiểm tra chẵn lẻ – Bit kiểm tra chẵn lẻ - TB 8 • kiểm tra chẵn/lẻ (nếu không có dòng (*) là chẵn) ; qua bit nhớ C MOV C, P ; đặt bit kiểm tra chẵn CPL C ; kiểm tra lẻ (*) MOV TB 8, C MOV SBUF, A ; ở chế độ 1: 7 -bit + 1 parity-bit CLR ACC. 7 MOV C, P MOV ACC. 7, C MOV SBUF, A • Nếu Parity luôn bằng 1 có 2 bit dừng 33
Đặt tốc độ baud cho cổng nối tiếp Cách đặt SMOD lên 1 MOV A, PCON SETB ACC. 7 MOV PCON, A 34
Timer 1 làm xung nhịp tốc độ baud • • • Khởi tạo trị TMOD ở chế độ timer 8 bit tự động nạp lại trị đầu (mode 2 của timer) và đặt giá trị nạp lại vào TH 1 để cho tốc độ tràn bằng tốc độ baud. TMOD được khởi tạo trị như sau: MOV TMOD, #0010 xxxx. B với “x” có giá trị 0 hay 1 tùy vào mode họat động của timer 0. Đặt tốc độ baud rất thấp bằng cách dùng timer 1 chế độ 16 bit, với TMOD = #0001 xxxx. B. Tuy nhiên phải khởi tạo lại giá trị các thanh ghi TL 1/TH 1 sau mỗi lần tràn. Việc này sẽ được thực hiện trong chương trình phục vụ ngắt. Một lựa chọn khác là cung cấp xung nhịp timer 1 bằng xung nhịp bên ngoài qua chân T 1 (P 3. 5). Tốc độ baud là 1/32 tốc độ tràn của timer 1. Do đó công thức để xác định tốc độ baud trong các mode 1 và 3 là Tốc độ baud = 1/32 tốc độ tràn của timer 1 Thí dụ, hoạt động 1200 baud cần tốc độ tràn như sau 1200 = 1/32 tốc độ tràn của timer 1 Tốc độ tràn của timer 1 = 32 x 1200 = 38400 = 38. 4 KHz Với XTAL=12 MHz thì giá trị nạp cho T 1 là 1000 KHz/38. 8 KHz=26. 04 ~ 26 35
36
Thanh ghi điều khiển nguồn PCON • • • SM 0 D GF 1 GF 0 PD IDL Double Baude Rate Bit General-purpose Flag 1 General-purpose Flag 0 Power Down bit Idle mode Bit 37
Tạo tốc độ baud (baud rate) • Port nối tiếp ở mode 0 • Port nối tiếp ở mode 1 và 3 · Port nối tiếp ở mode 2 38
Khởi tạo port nối tiếp Viết chuỗi lệnh để khởi tạo port nối tiếp hoạt động như UART 8 bit với tốc độ 2400 baud. Sử dụng timer 1 để cung cấp xung nhịp tốc độ baud. Bài giải. Với thí dụ này, có 4 thanh ghi phải được khởi tạo trị là: SMOD, TCON, và TH 1. Giá trị cần để khởi tạo trị cho các thanh ghi như sau 39
Chương trình xuất ký tự Viết chương trình con OUTCHR để phát mã ASCII 7 bit trong thanh ghi tích lũy A ra port nối tiếp của 8051 với bit kiểm tra lẻ được thêm vào như bit thứ 8. Trở về từ chương trình con không làm thay đổi trị của thanh ghi tích lũy trước khi gọi chương trình con. Bài giải. Thí dụ này và thí dụ kế minh họa 2 trong số các chương trình con thông dụng nhất trên các hệ vi tính có gắn thiết bị đầu cuối RS 232: xuất ký tự (OUTCHR) và nhập ký tự (INCHAR). ORG 8100 H OUTCHR: MOV C, P ; đặt bit kiểm ra chẵn vào cờ C CPL C ; đổi sang kiểm tra lẻ MOV ACC. 7, C ; thêm vào mã ký tự AGAIN: JNB TI, AGAIN ; TX có rảnh ? Không : kiểm tra lại CLR TI ; Truyền được xóa cờ TI và MOV SBUF, A ; gửi ký tự CLR ACC. 7 ; bỏ bit kiểm tra lẻ và RET ; quay về 40 END
Thí dụ, các lệnh sau phát mã ASCII cho chữ Z đến thiết bị nối tiếp gắn vào port nối tiếp của 8051: MOV A, # ’Z’ CALLOUTCHR (tiếp tục) 41
Chương trình con nhập ký tự Viết chương trình con INCHAR để nhập 1 ký tự từ port nối tiếp của 8051 và quay về với mã ASCII 7 bit trong thanh ghi tích lũy. Ngoại trừ bit kiểm tra lẻ trong bit thứ 8 nhận được và đặt cờ nhớ lên 1 nếu có sai về kiểm tra chẵn lẻ. ORG 8100 H INCHAR: JNB RI, $ ; đợi ký tự CLR RI ; xóa cờ MOV A, SBUF ; đọc ký tự vào A MOV C, P ; với kiểm tra lẻ trong A, P sẽ = 1 CPL C ; bù để chỉ có lỗi CLR ACC. 7 ; bỏ bit kiểm tra chẵn lẻ RET 42 END
- Slides: 42