1.8 Cổng nối tiếp .1 Giới thiệu
1.8.3 Các chế độ hoạt động - Chế độ 0
Chế độ 0 là chế độ mà cổng nối tiếp được dùng như một thanh ghi dịch 8 bit.
Dữ
liệu được truyền/nhận nối tiếp trên chân RXD, chân TXD được dùng để phát xung clock dịch bit. Khi truyền/nhận các byte dữ liệu 8bit,bit có giá trị thấp nhất(LSB) được truyền/nhận trước tiên và bit MSB được truyền/nhận sau cùng.Việc truyền dữ liệu được bắt đầu bằng việc ghi một byte dữ liệu vào SBUF còn việc nhận dữ liệu được bắt đầu khi bit REN đã được đặt ở mức 1 và cờ thu RI= 0. Tốc độ baud ở chế độ 0 cố định bằng Fosc/12.
Hình 1.8 Giản đồ truyền nhận dữ liệu ở chế độ 0 Tốc độ baud của chế độ 0:
Hình 1.9 Tốc độ baud ở chế độ 0
- Chế độ 1
Trong chế độ 1, cổng nối tiếp hoạt động như một bộ UART 8 bit có tốc độ thay đổi.
Dữ liệu được truyền nối tiếp trên chân TXD và nhận nối tiếp trên chân RXD, chế độ này cung cấp cho AT89S52 một công cụ giao tiếp với máy tính qua cổng Com.
Hình 1.10 Giản đồ truyền nhận dữ liệu của chế độ 1
Với chế độ 1, 1 khung truyền sẽ gồm 10 bit, ngoài 8 bit dữ liệu ra còn một bit start (ở mức thấp) và 1 bit stop (ở mức cao), LSB cũng được truyền trước, MSB được truyền sau.
Tốc độ baud của cổng nối tiếp trong chế độ 1 có thể được cung cấp bởi Timer 1 và Timer 2 hoặc đồng thời cả hai nếu muốn tốc độ truyền và nhận khác nhau.
AT89S52 truyền và nhận dữ liệu nối tiếp theo nhiều tốc độ khác nhau. Tốc độ truyền của nó có thể lập trình được. Khi sử dụng các bộ Timer cung cấp tốc độ baud cho cổng nối tiếp thì thạch anh có tần số 11,0592 MHz được khuyến cáo nên dùng vì với tần số này sẽ tạo được tốc độ baud chuẩn sai số 0%.
Bảng 1.15 Bảng tốc độ baud khác nhau
Hình 1.11 Dùng Timer 1 và Timer 2 cung cấp tốc độ baud cho cổng nối tiếp
Trên hình 1.11, khi TCLK= RCLK= 1 tốc độ baud của cổng nối tiếp được cung cấp bởi Timer 2. Khác với Timer 1, Timer 2 được cung cấp xung clock có tần số
ẵ tần số của bộ dao động thạch anh.
Khi cần tốc độ baud khác nhau cho đường truyền và được nhận thì có thể sử dụng cả hai bộ Timer. Nếu đặt TCLK= 1 và RCLK=0 thì tốc độ baud của đường truyền sẽ được cung cấp bởi Timer 2, tốc độ baud của đường nhận sẽ được cung cấp bởi Timer 1.
Nếu đặt TCLK=0 và RCLK=1 thì tốc độ baud của đường truyền sẽ được cung cấp bởi Timer 1, tốc độ baud của đường nhận sẽ được cung cấp bởi Timer 2.
Tốc độ baud của chế độ 1
Hình 1.12 Tốc độ baud ở chế độ 1 - Chế độ 2
Chế độ này, cổng nối tiếp hoạt động như một bộ UART 9 bit, một khung truyền gồm 11 bit, trong đó bắt đầu bằng bit Start, tiếp theo là 8 bit dữ liệu, tiếp theo là bit dữ liệu thứ 9 ( là bit TB8 nếu là khung truyền, là bit RB8 nếu là khung nhận ), cuối cùng là bit Stop. Chế độ này thường được dùng khi cần chèn thêm bit kiểm tra chẵn lẻ vào trong khung truyền để giảm bớt bit lỗi đường truyền.
Tốc độ baud trong chế độ 2 :
: Hình 1.13 Tốc độ baud ở chế độ 2
- Chế độ 3
Chế độ 3 là sự kết hợp của chế độ 1 và chế độ 2, nghĩa là cổng nối tiếp hoạt động như 1 bộ UART 9 bit và tốc độ baud của UART thay đổi giống như chế độ 1 ( được cung cấp bởi Timer1 và Timer2).
Tốc độ baud của chế độ 3:
Hình 1.14 Tốc độ baud ở chế độ 3 1.8.4 Tốc độ baud của Port nối tiếp
- Dùng Timer 1 làm xung clock tạo tốc độ baud.
Thông thường khởi động thanh ghi TMOD ở chế độ tự động nạp lại 8 bit (mode 2) và đặt giá trị nạp lại thích hợp vào thanh ghi TH1 để có tốc độ tràn đúng, từ đó tạo ra tốc độ baud
TMOD=0x20;
Baud rate=Timer1 overflow/32 hay /16 tùy theo giá trị bit SMOD
- Tính toán các giá trị nạp lại cho thanh ghi TH1 đối với các tốc độ baud 9600, 4800, 2400, 1200 (XTAL=11.0592MHz)
Bảng 1.16 Các giá trị của thanh ghi TH1 tạo tốc độ baud
1.9 Ngắt và xử lý ngắt