5. Phƣơng pháp nghiên cứu
2.6.4. Chức năng truyền thông nối tiếp USART
USART là một chuẩn truyền thông nối tiếp được tích hợp trong rất nhiều thiết bị, module, vi điều khiển, vi xử lý, cảm biến, các hệ thống tự động hóa... Chuẩn truyền thông USART sử dụng 2 mức logic theo chuẩn TTL tức thể hiện logic 0 (0V) và logic 1 (3-5V). Dữ liệu truyền đi có thể là đồng bộ hoặc không đồng bộ. Ở
vi điều khiển chúng ta chỉ sử dụng cách truyền là không đồng bộ tức dữ liệu sẽ được đóng gói thành các khung truyền và có tốc độ truyền (BAUD - bps) được chuẩn hóa và phải giống nhau tốc độ baud. Ví dụ: 2400, 4800, 9600, 14400, 19200, 28800,... Tốc độ truyền bây giờ có thể lên đến vài trăm kbps. Thông thường ta thường sử dụng 9600 đề truyền nhằm giảm nhiễu.
Họ vi điều khiển AVR được tích hợp sẵn một bộ truyền thông nối tiếp. TX là chân truyền dữ liệu đi và RX là chân nhận dữ liệu về. Khi ghép nối chuẩn giao tiếp ta phải đấu nó theo kiểu bắt chéo tức TX của con này với RX của con kia và TX của con kia với RX của con này, kiểu TX1-RX2 và RX1-TX2.
- Thanh ghi UDR (USART I/O Data Register): là 2 thanh ghi dữ liệu cùng một tên truyền và nhận, khi ghi vào 1 byte thì nó sẽ truyền đi byte đó, và khi nhận được một byte thì ta sẽ đọc dữ liệu từ thanh ghi này
Hình 2. 9. Thanh ghi UDR
- Thanh ghi UCSRA: là thanh ghi trạng thái của USART
Hình 2. 10. Thanh ghi UCSRA
Các bit trạng thái:
RXC là bit cờ ngắt nhận dữ liệu từ RX
TXC là bit cờ ngắt truyền đi một byte ra TX
UDRE là bit cờ ngắt thanh ghi UDR trống và sẵn sàng ghi dữ liệu mới vào
để truyền đi.
FE là bit báo khung truyền bị lỗi
DOR là bit báo tràn dữ liệu
U2X là bit set nhân đôi tốc độ truyền
MPCM là bit set chế độ truyền thông đa xử lý
- Thanh ghi UCSRB: là thanh ghi mặt nạ ngắt và điều khiển
Hình 2. 11. Thanh ghi UCSRB
Các bit trạng thái:
RXCIE là bit set cho phép ngắt nhận
TXCIE là bit set cho phép ngắt truyền
UDRIE là bit set cho phép ngắt thanh ghi UDR trống
RXEN là bit cho phép nhận dữ liệu trên chân RX
TXEN là bit cho phép truyền dữ liệu trên chân TX
UCSZ2 là bit chọn kích thước ký tự, kết hợp với 2 bit trong thanh ghi
UCSRC
RXB8 là bit truyền dữ liệu thứ 8 trong chế độ truyền 9bit
TXB8 là bit nhận dữ liệu thứ 8 trong chế độ truyền 9bit
Trong truyền dữ liệu không đồng bộ ta thường sử dụng ngắt để nhận dữ liệu do vậy ta chỉ cần set các bít sau lên 1: RXCIE=1, RXEN=1, TXEN=1 ta viết ngắn gọn UCSRB=0x98; tương đương UCSRB=0b 1001 1000
- Thanh ghi UCSRC: là thanh ghi quy định khung truyền và chế độ truyền
Hình 2. 12. Thanh ghi UCSRC
Bit UMSEL là bit chọn chế độ truyền thông đồng bộ hay không đồng bộ.
Khi UMSEL=1 là chế độ đồng bộ và UMSEL=0 là chế độ không đồng bộ, trong ứng dụng này ta đặt UMSEL=0 tức chế độ không đồng bộ.
UPM1 UPM0 Chức năng
0 0 Không sử dụng Parity
0 1 Dự trữ không dùng
1 0 Parity chẵn được chọn
1 1 Parity lẻ được chọn
Bảng 2. 4. Thiết lập bit chọn kiểu chẵn lẻ
Bit USBS là bit chọn sử dụng một hay 2 bit Stop. Nếu USBS=1 thì là 2 bit
Stop và khi USBS=0 là 1 bit Stop
Hai bit UCSZ1 và UCSZ0 kết hợp với bit UCSZ2 từ thanh ghi UCSRB ta
được 3bit chọn độ dài dữ liệu truyền:
UCSZ2 UCSZ1 UCSZ0 Kích thƣớc truyền
0 0 0 5 bit 0 0 1 6 bit 0 1 0 7 bit 0 1 1 8 bit 1 0 0 Dự trữ 1 0 1 Dự trữ 1 1 0 Dự trữ 1 1 1 9 bit
Bảng 2. 5. Thiết lập bit chọn độ dài dữ liệu truyền
Bit UCPOL là bit chỉ tích cực của xung clock trong chế độ truyền đồng bộ.
Kết luận lại ta sẽ cần có các bit sau được set (cho chế độ truyền không đồng bộ): URSEL=1, UCSZ1=1, UCSZ0=1 ta được UCSRC=0x86 tương đương UCSRC=0b 1000 0110 (8bit USART, 1 stop, no parity)
Phần cuối cùng là thiết lập tốc độ truyền BAUD được quy định bởi 2 thanh
ghi UBRRH và UBRRL. Do dữ liệu cài đặt lớn hơn 255 lên nó được mở rộng
thêm 4bit trên thanh ghi UBRRH
Ta sẽ có các bit từ UBRR[11:0] để cài đặt tốc độ BAUD theo bảng sau, ở đây ta sử dụng thạch anh 11.0592MHz để tạo tốc độ BAUD với sai số 0%
UBRRH UBRRL Tốc độ BAUD Bit U2X (UCSRA)
0x01 0x1F 2400 0 0 143 4800 0 0 71 9600 0 0 47 14400 0 0 35 19200 0 0 23 28800 0 0 17 38400 0 Bảng 2. 6. Thiết lập tốc độ BAUD
Như bảng trên ta để UBRRH mặc định không cần khai báo, còn UBRRL
sẽ bằng các giá trị trên tương ứng với tốc độ BAUD đó. Trừ BAUD = 2400 phải nạp 2 giá trị trên vào 2 thanh ghi UBRRH và UBRRL