Nguyên tắc hoạt động:
Dữ liệu cần truyền được đặt vào thanh ghi TXREG, baud rate được tạo ra, khi bit TXEN được gán bằng 1, dữ liệu từ thanh ghi TXREG đi vào thanh ghi TSR đồng thời baud rate tác động đến thanh ghi TSR, đẩy dữ liệu cần truyền ra bộ đệm, sau đó xuất ra chân TX và đi ra ngoài.
Hình 6.4: Sơ đồ khối bộ truyền UART
Bit TXIF dùng để báo trạng thái trong thanh ghi TXREG, nếu có dữ liệu trong thanh ghi TXREG thì bít này sẽ có tín hiệu là 1, ngược lại sau khi dữ liệu đã được truyền xuống thanh ghi TSR thì bít TXIF được xóa về không. Tương tự như bit TXIF, bit TRMT dùng để báo trạng thái của thanh ghi TSR. Quá trình truyền cũng có thể tạo ra ngắt truyền, mỗi khi dữ liệu truyền đã kết thúc bằng việc đặt bit TXIF=1.
Ngoài ra bộ truyền còn có thể truyền với chế độ 9 bit bằng việc cho bit TX9 =1, và dữ liệu của bit thứ 9 do bit TX9D quy định.
Thanh ghi quy định chế độ truyền:
Các bit liên quan đến chế độ truyền nhận bất đồng bộ.
TX9: Bit cho phép truyền nhận chế độ 9-bit
1: Cho phép hoạt động với chế độ 9 bit 0: Hoạt động với chế độ 8bit
TXEN: Bit cho phép truyền UART
1: Cho phép truyền. 0: Không cho phép truyền.
SYNC: Bit lựa chọn chế độ truyền.
1: Truyền nhận chế độ đồng bộ. 0: Truyền nhận chế độ bất đồng bộ.
BRGH: Bit lựa chọn chế độ baud rate
1: Tốc độ cao (bất đổng bộ) 0: Tốc độ thấp (bất đồng bộ)
TRMT: Bit hiển thị trạng thái thanh ghi truyền
1: Thanh ghi TSR trống. 0: Thanh ghi TSR có dữ liệu.
TX9D: Dữ liệu bit thứ 9 trong chế độ truyền 9 bit
Hình 6.5: Ngắt truyền UART
Các bit khởi tạo ngắt truyền UART:
TXIF: Cờ ngắt, sau khi thanh ghi TXREG truyền dữ liệu xuống
thanh ghi TSR thì bit này tự động bằng 1.
TXIE: Bit cho phép ngắt truyền, để tạo ra ngắt truyền ta cần phải
cho phép bit này bằng 1.
PEIE: Bit cho phép ngắt ngoại vi. GIE: Bit cho phép ngắt toàn cục. Các bước khởi tạo chế độ truyền UART:
* Bước 1: Khởi tạo thanh ghi SPBRGH, SPBRG và các bit BRGH và BRG16 để tạo ra baud rate cần thiết.
* Bước 2: Cho phép giao tiếp bất đồng bộ: SYNC=0;
SPEN=1;
* Bước 3: Cho phép chế độ 9 bit (nếu sử dụng truyền nhận 9 bit): TX9=1;
* Bước 4: Cho phép truyền: TXEN=1;
* Bước 5: Nếu sử dụng ngắt thì cần phải khởi tạo: TXIE=1;
PEIE=1; GIE=1;
* Bước 6: Gởi dữ liệu cần truyền của bit thứ 9 (nếu sử dụng truyền nhận 9 bit):
TX9D=…..;
* Bước 7: Gởi dữ liệu cần truyền vào thanh ghi 8 bit: TXREG=…..;