Tiếp phần 1, Giáo trình Vi điều khiển: Phần 2 cung cấp cho người học những kiến thức như: Hoạt động ADC; Hoạt động USART; Hoạt động SPI; Hoạt động I2C. Mời các bạn cùng tham khảo!
Trang 26.1 GIỚI THIỆU
6.1.1 Giới thiệu
Bộ biến đổi ADC là biến đổi tín hiệu từ tương tự sang tín hiệu số, tùy thuộc vào độ phân giải (số bit được biến đổi) và tốc độ biến đổi và độ sai số mà ta có chất lượng biến đổi khác nhau, và cũng tùy vào từng ứng dụng cụ thể mà ta có thể chọn các bộ biến đổi ADC cho phù hợp với công việc của mình
Việc biến đổi tín hiệu từ tương tự sang số có rất nhiều ứng dụng trên thực tế: Đo lường nhiệt độ, độ ẩm, cân điện tử, biến đổi tín hiệu âm thanh để lưu trữ sang dạng số… Đối với vi điều khiển atmega16 ta có các thông số sau:
Là bộ biến đổi tín hiệu tương tự (0 – VCC) sang tín hiệu số với giá trị tương ứng, độ phân giải tối đa 10 bit ~ 1023 bước
inV
V
(6.1) Trong đó:
o a: Giá trị số sau khi biến đổi (thay đổi từ 0 đến 1023)
o Vin: Điện áp ngõ vào (0 – 5VDC)
o Vref: Điện áp tham chiếu (0 – 5VDC)
o b: số bit biên đổi (độ phân giải) đối với atmega b = 10
Trang 3Việc chọn điện áp tham chiếu phụ thuộc vào độ phân giải và số bit của thiết bị và được tính như sau:
b ref dpg
Với: dpg: độ phân giải của thiết bị, cảm biến
Hình 6.1 Tín hiệu tương tự và tín hiệu số 6.1.2 Bài tập ví dụ
Ví dụ 1: Một bộ biến đổi ADC có điện áp ngõ vào là 1,35 volt, độ phân giải là 5mv, số
bit biến đổi là 10 bit, hỏi giá trị ngõ ra và điện áp tham chiếu là bao nhiêu? Giải: Dựa vào công thức 6.2 ta có điện áp tham chiếu là:
Vref = dpg.2b = 0.005.210 = 5.12 (volt) Giá trị ngõ ra theo công thức 6.1 là:
270 1024
* 12 5
35 1 2
Ví dụ 2: Sau khi biến đổi ADC, ngõ ra nhận được là: 0x253, hỏi điện áp tham chiếu và
giá trị điện áp ngõ vào là bao nhiêu, biết số bit sử dụng là 8 bit, độ phân giải 10mVolt
Giải: Điện áp tham chiếu theo công thức 6.2 là:
Vref = dpg.2b = 0.01.28 = 2.56 (volt) Điện áp ngõ vào theo công thức 6.1 là:
volt V
a
V in b ref 1.49
1024
56.2
*5952
Trang 46.2 CÁC THANH GHI LIÊN QUAN
6.2.1 Thanh ghi ADMUX
REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0
Hình 6.2 Thanh ghi ADMUX
Bit 7 – 6: REFS0.1 chọn điện áp tham chiếu xem bảng bên trên
Stt REFS1 REFS0 Nguồn điện áp tham chiếu
0 0 0 AREF, không sử dụng điện áp tham chiếu nội
1 0 1 AVCC với tụ được đặt tại chân AREF
2 1 0 Không sử dụng
3 1 1 Điện áp tham chiếu nội 2.56V với tụ ngoài tại chân
AREF
BẢNG 6.1 Chọn điện áp tham chiếu
Bit 5: ADLAR (ADC Left Adjust Result): bit này dùng để chọn byte cao, byte thấp của dữ liệu, khi ADLAR = 0, ADCL lưu bit0 7, ADCH lưu bit8.9 Khi ADLAR = 1 thì ngược lại
Hình 6.3 Thanh ghi dữ liệu ADC khi ADLAR = 0
Hình 6.4 Thanh ghi dữ liệu ADC khi ADLAR = 1
Trang 5 Bit 4:0 MUX4:0 Dùng chọn kênh ngõ vào và độ lợi của biến đổi ADC
MUX4 0
Single Ended Input
Positive Differential Input
Negative Differential Input
Trang 66.2.2 Thanh ghi ADCSRA
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
Hình 6.5 Thanh ghi ADCSRA
Bit 7 (ADEN): Bit này bằng 1 sẽ cho phép hoạt động ADC, bằng không sẽ không cho phép hoạt động Nếu bit này được viết vào giá trị không trong lúc đang biến đổi ADC thì hoạt động ADC này sẽ bị hủy bỏ
Bit 6(ADSC): Bắt đầu hoạt động ADC, khi bit này bằng 1 nó sẽ bắt đầu biến đổi ADC, và sẽ trở về mức logic không sau khi biến đổi xong, viết logic 0 vào bit này không có giá trị
Bit 5(ADATE): Khi bit này bằng 1 nó sẽ cho phép nguồn kích hoạt ADC
Bit 4(ADIF): Cờ ngắt trong hoạt động ADC, khi sử dụng ngắt cờ này sẽ bật lên 1 khi biến đổi ADC hoàn tất, trong hoạt động ngắt cờ này sẽ tự động được xóa về không, khi không sử dụng ngắt muốn xóa cờ này phải ghi mức logic 1 vào
Bit 3(ADIE): Cho phép ngắt trong hoạt động ADC, khi bit này bằng 1 thì cho phép hoạt động ADC, khi hoạt động ADC hoàn thành sự kiện ngắt sẽ được kích hoạt
Bit 2 – 0 (ADPS2 0): Chọn bộ chia (thời gian biến đổi ADC) trong hoạt động ADC
Stt ADPS2 ADPS1 ADPS0 Hệ số chia
Trang 7Hình 6.6 Bộ chia trong hoạt động ADC
Hình 6.7 Giản đồ thời gian cho lần biến đổi ADC đầu tiên
Hình 6.8 Giản đồ thời gian cho lần biến đổi ADC thứ 2
Trang 86.2.3 Thanh ghi SFIOR
Hình 6.9 Thanh ghi SFIOR
Bit 7 – 5 (ADTS2 0) Các nguồn kích hoạt ADC
Stt ADTS2 ADTS1 ADTS0 Nguồn kích hoạt
1 0 0 0 Biến đổi ADC liên tục
2 0 0 1 So sánh điện áp giữa 2 chân AIN0 và AIN1
3 0 1 0 Tác động bởi chân ngắt ngoài của vi điều khiển
4 0 1 1 Khi OCR0 = TCNT0
5 1 0 0 Khi Timer/Counter0 tràn
6 1 0 1 Khi OCR1B = TCNT1
7 1 1 0 Khi Timer/Counter1 tràn
8 1 1 1 Khi đọc giá trị thanh ghi TCNT1
Bảng 6.4 Các nguồn kích hoạt ADC
Hình 6.10 Các tác nhân kích hoạt ADC
Bit 4 – 0: Các bit này không sử dụng trong hoạt động ADC
Trang 96.3 BÀI TẬP VÍ DỤ
Ví dụ 1: Cho thanh ghi ADMUX có giá trị là 0xED, điện áp trên chân ADC3 là 300mV,
ADC2 = 500mV, hỏi giá trị ADCH, ADCL là bao nhiêu?
Giải: Ta có gán các bit vào thanh ghi ADMUX như hình vẽ sau
Bit 5: ADLAR = 1 nên giá trị lưu trong thanh ghi ADCH và ADCL là:
ADCH = bit9 2 ADCL = bit1.0 Bit 4 – 0: MUX = 01101 dựa vào bảng 6.3 trang ta nhận thấy độ lợi là GIAN = 10
Như vậy giá trị trên thanh ghi ADCR sẽ là
ADC = 512*10*(300-500)/2560= -400 = 1024 – 400 = 0x270 = 0b1001110000
Vậy ADCH = 0b10011100 = 0x9C và ADCL = 0b00 . .=0x00
Ví dụ 2: Viết chương trình khi nhấn nút SW trên chân 16 (INT0 – PB2) thì vi điều khiển
sẽ biến đổi tín hiệu ADC từ chân PA5 sau đó hiển thị kết quả trên PORTD cho byte cao (bit9.8) và PORTC cho byte thấp (bit7 0)
Giải: Các bước thực hiện:
Xác định tác nhân kích hoạt ADC
Xác định điện áp tham chiếu
Xác định dữ liệu được lưu trong thanh ghi ADCL, ADCH
Xác định tần suất lấy mẫu
Xác định chân cần biến đổi ADC
Xác định xem có ngắt hay không
Tác nhân kích hoạt ADC:
Ngắt ngoài 0 INT0 vậy ADTS2.0 = 010 và ADATE = 1
Điện áp tham chiếu:
Trang 10Ta chọn Vref = 2.56v (internal reference) nên REFS1.0 = 11
Xác định dữ liệu trong thanh ghi
Vì PORTB = bit9.8 và PORTC = bit7.00 nên bit ADLAR = 0
Tần suất lấy mẫu:
Trong đề bài không đề cập đến tần suất biến đổi ADC nên ta chọn tùy ý, ở đây ta chọn là thời gian nhanh nhất là fadc = fck / 2, vậy ADPS2.0 = 000
Chân cần biến đổi ADC:
PA5 nên MUX4 0: 00101
6.4 CÂU HỎI ÔN TẬP HẾT CHƯƠNG
Câu 1: Atmega có mấy chân biến đổi được ADC, các chân nhận tín hiệu biến đổi ADC
trên Port nào, số chân?
Câu 2: Atmega16 có mấy nguồn điện áp tham chiếu, hãy nêu sự khác nhau giữa việc
chọn điện áp tham chiếu
Trang 11Câu 3: Hãy nêu ý nghĩa của bộ prescaler trong hoạt động ADC
Câu 4: Tần suất lấy mẫu lớn nhất và nhỏ nhất hoạt động ADC là bao nhiêu biết fclk =
2Mhz
Câu 5: Hoạt động ngắt xảy ra ở thời điểm nào trong hoạt động ADC
Câu 6: Độ phân giải là gì, hãy cho ví vụ minh họa
Câu 7: Bit nào cho phép và không cho phép hoạt động ADC
Câu 8: Bit nào nhận biết hoạt động ADC đã hoàn tất, hoặc đang thực hiện
Câu 9: Hãy trình bài một ứng dụng trên thực tế có liên quan đến hoạt động ADC Câu 10: Khi điện áp ngõ vào cần biến đổi là 1,36v, điện áp tham chiếu là 2.56v, độ
phân giải 8 bit, hỏi giá trị sau khi biến đổi bằng bao nhiêu?
Câu 11: Khi giá trị sau khi biến đổi có giá trị là 672, điện áp tham chiếu là 4,5v, độ
phân giải 10 bit, hỏi giá trị điện áp ngõ vào là bao nhiêu?
Câu 12: Sau khi biến đổi ADC giá trị thu được là: 0x2d5, hỏi ADCH, ADCL có giá bị
là bao nhiêu, khi ADLAR = 0 và = 1
Câu 13: Điện áp tham chiếu trên chân AREF = 3v, Điện áp trên chân 36 là 2v
a Hỏi giá trị lưu trong thanh ghi ADCH và ADCL là bao nhiêu (xét 2 trường hợp ADLAR = 0 và = 1)
b Giá trị thanh ghi ADMUX bằng bao nhiêu?
Câu 14: Xác định các thanh ghi trong hoạt động ADC:
a Nguồn kích hoạt ADC (INT0)
b Điện áp tham chiếu (3v)
c 8 bit cao, 2 bit thấp
d Tần suất lấy mẫu (chia 64)
e Chân cần biến đổi ADC.6
f Không sử dụng ngắt
Câu 15: Xác định các thanh ghi trong hoạt động ADC:
a Nguồn kích hoạt ADC (Khi điện áp chân 3 lớn hơn chân 4)
b Điện áp tham chiếu (5v)
Trang 12c 2 bit cao, 8 bit thấp
d Tần suất lấy mẫu (chia 32)
e Chân cần biến đổi 35
f Không sử dụng ngắt
g Nếu giá trị trên thanh ghi ADCH = 0x03 và ADCL = 0b11001101 thì điện
áp trên chân 35 là bao nhiêu?
Câu 16: Viết chương trình khi nhấn nút SW trên chân 16 (INT0 – PB2) thì vi điều khiển
sẽ biến đổi tín hiệu ADC từ chân PA5 hiển thị kết quả trên PORTD cho byte cao (bit9.8) và PORTC cho byte thấp (bit7 0) Điện áp tham chiếu VREF Bộ prescaler = 16
Câu 17: Viết chương trình khi điện áp trên chân 3 lớn hơn chân 4 thì biến đổi ADC tín
hiệu giữa 2 chân 39, 40 (39 điện áp dương, 40 điện áp âm) độ lợi 200x, điện
áp tham chiếu AVCC, hiển thị kết quả trên PORTD cho byte cao (bit9 2) và PORTC cho byte thấp (bit1.0) Bộ prescaler = 128
Câu 18: Viết chương trình điều khiển tốc độ động cơ thông qua biến trở trên chân
PORTA.0, khi biến trở có giá trị nhỏ nhất thì động cơ quay thấp nhất (ngừng quay), khi biến trở có giá trị cao nhất thì động cơ quay nhanh nhất
Câu 18: Viết chương trình điều khiển tốc độ động cơ thông qua biến trở trên chân
PORTA.0, khi biến trở có giá trị nhỏ nhất thì động cơ quay thấp nhất (ngừng quay), khi biến trở có giá trị cao nhất thì động cơ quay nhanh nhất
Câu 19: Tính thời gian biến đổi ADC biết tần số thạch anh là 5Mhz, biết thanh ghi
ADCSRA = 0bxxxx.x101
Câu 20: Hãy cho biết thời gian biến đổi nhanh nhất và chậm nhất của hoạt động ADC
biết tần số thạch anh là 8 Mhz
Trang 13Chương 7
TRUYỀN NHẬN DỮ LIỆU
ĐỒNG BỘ
VÀ BẤT ĐỒNG BỘ
(THE UNIVERSAL SYNCHRONOUS AND ASYNCHRONOUS SERIAL
RECEIVER AND TRANSMITTER USART)
Trang 147.1 GIỚI THIỆU
Đây là bộ truyền nhận dữ liệu nối tiếp đồng bộ và không đồng bộ, biên độ thay đổi
từ -12v đến 12v thích hợp trong môi trường công nghiệp, có nhiều tín hiệu nhiễu, việc truyền nhận dữ liệu được thực hiện trên 2 chân của vi điều khiển RxD và TxD
Là hoạt động chỉ phụ thuộc vào chân RxD/ TxD kết hợp với thời gian (tốc độ baud)
mà không phụ thuộc vào chân CLK, một khung dữ liệu của hoạt động bất đồng bộ bao gồm: xung start bit, số bit dữ liệu (5,6,7,8,9 tùy mục đích sử dụng), 1 hoặc 2 stop bit, trong hoạt động bất đồng bộ đòi hỏi phải cài đặc thông số giữa 2 thiết bị phải giống nhau, cụ thể các thông số sau:
Số lượng stop bit (1,2)
Tốc độ baud (1200, 2400, 9600,…)
Kiểm tra chẵn lẻ (parity bit)
Số bit được truyền đi trong 1 khung (5, 6, 7, 8, 9)
Hình 7.1 Khung dữ liệu giao tiếp nối tiếp
Trang 157.1.3 Đặc tính giao tiếp USART
Hoạt động truyền nhận song công
Đồng bộ và không đồng bộ
Tốc độ truyền nhanh
Hỗ trợ các khung 5,6,7,8 hoặc 9 bit dữ liệu, 1 hoặc 2 stop bit (bất đồng bộ)
Giao tiếp nhiều vi điều khiển theo nghi thức Master, Slaver
7.2 CÁC THANH GHI LIÊN QUAN
UDR (read), UDR (write), UCSRA, UCSRB, UCSRC, UBRRH, UBRRL
7.2.1 Thanh ghi UDR
Là thanh ghi đệm dùng để truyền UDR (write) và nhận UDR (read) dữ liệu nó có cùng địa chỉ, việc viết dữ liệu vào thanh ghi đệm chỉ thực hiện được khi cờ UDRE trong thanh ghi UCSRA bằng 1
RXB[7:0]
TXB[7:0]
Hình 7.2 Thanh ghi UDR 7.2.2 Thanh ghi UCSRA
RXC TXC UDRE FE DOR PE U2X MPCM
Hình 7.3 Thanh ghi UCSRA Bit 7 – RXC USART (USART Receive Complele) khi RXC = 1 thì dữ liệu trong thanh ghi UDR (read) chưa đọc, và khi RXC = 1 thì dữ liệu trong thanh ghi này đã được đọc, khi đó thanh ghi UDR (read) được xem là thanh ghi trống
Bit 6 – TXC (USART Transmit Complete) dùng thông báo cho hoạt động truyền dữ liệu
đã hoàn tất, khi TXC = 1 thì toàn bộ dữ liệu trong thanh ghi dịch (shift register) đã được dịch chuyển ra ngoài và không còn dữ liệu trong thanh ghi UDR (write) Bit này tự động xóa về 0 khi thực thi hoạt động ngắt, hoặc ghi giá trị 1 vào bit này, bit này có thể kích hoạt hoạt động ngắt
Trang 16Bit 5 – UDRE (USART Data Register Empty) bit này dùng để báo cho biết thanh ghi UDR (write) có sẵn sàng nhận dữ liệu mới hay không Nếu bit này = 1 thì bộ đệm trống, thanh ghi UDR (write) sẵn sàng nhận dữ liệu Bit này có thể kích hoạt hoạt động ngắt khi thanh ghi đệm trống Bit này = 1 sau hoạt động reset
Bit 4 – FE (Frame Error) khi FE = 1 sẽ thông báo lỗi trong hoạt động nhận dữ liệu, bit này phải được viết = 0 khi trong thanh ghi UCSRA
Bit 3 – DOR (Data OverRun) DOR = 1 nếu xảy ra quá trình tràn dữ liệu, bit này phải được viết = 0 khi trong thanh ghi UCSRA
Bit 2 – PE (Parity Error) PE = 1 khi có lỗi về Parity xảy ra, bit này phải được viết = 0 khi trong thanh ghi UCSRA
Bit 1 – U2X (Double the USART Transmittion Speed) bit này chỉ có tác dụng trong hoạt động bất đồng bộ, và bit này được viết = 0 trong hoạt động đồng bộ Khi bit này bằng 1
sẽ giảm tốc độ baud xuống ½
Bit 0 – MPCM (Multi-processor Communication Mode) bit này cho phép hoạt động đa
vi điều khiển, khi bit này = 1 tất cả các dữ liệu khi nhận không chứa đựng thông tin về địa chỉ sẽ bị bỏ qua (không nhận), xem phần giao tiếp đa vi điều khiển
7.2.3 Thanh ghi UCSRB
RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8
Hình 7.4 Thanh ghi UCSRB Bit 7 – RXCIE (RX Complete Interrupt Enable) bit này = 1 cho phép ngắt trên cờ ngắt RXC Khi muốn thực hiện hoạt động ngắt khi nhận dữ liệu thì ta cần phải cài đặt như sau (theo thứ tự ưu tiên): bit I trong thanh ghi SREG, bit RXCIE trong thanh ghi UCSRB Hoạt động xảy ra khi bit RXC = 1
Bit 6 – TXCIE (TX Complete Interrupt Enable) bit này = 1 cho phép ngắt trên cờ ngắt TXC Hoạt động ngắt xảy ra khi bit RXC = 1 Khi muốn thực hiện hoạt động ngắt khi truyền dữ liệu thì ta cần phải cài đặt như sau (theo thứ tự ưu tiên): bit I trong thanh ghi SREG, bit TXCIE trong thanh ghi UCSRB
Trang 17Bit 5 – UDRIE (USART Data Register Empty Interrupt Enable) bit này = 1 cho phép ngắt trên cờ UDRE Hoạt động xảy ra khi bit UDRE = 1 Khi muốn thực hiện hoạt động ngắt khi truyền dữ liệu thì ta cần phải cài đặt như sau (theo thứ tự ưu tiên): bit I trong thanh ghi SREG, bit UDRIE trong thanh ghi UCSRB
Bit 4 – RXEN (Receiver Enable) bit này = 1 sẽ cho phép nhận dữ liệu
Bit 3 – TXEN (Transmitter Enable) bit này = 1 sẽ cho phép truyền dữ liệu
Bit 2 – UCSZ2 (Character size) bit này kết hợp với 2 bit UCSZ1.0 để xác độ dài dữ liệu
Hình 7.5 Thanh ghi UCSRC Bit 7 – URSEL (Register Select) dùng để chọn thanh ghi UBRRH hoặc thanh ghi UCSRC, khi bit này bằng 0 thì thanh ghi UBRRH được chọn, khi bit này bằng 1 thì thanh ghi UCSRC được chọn
Bit 6 – UMSEL (USART Mode Select) dùng để chọn hoạt động đồng bộ/ không đồng
bộ
0 Asynchronous Operation (hoạt động bất đồng bộ)
1 Asynchronous Operation (hoạt động đồng bộ)
Bảng 7.1 Chế độ làm việc giao tiếp nối tiếp
Bit 5.4 – UPM1.0 (Parity Mode) 2 bit này dùng để xác định hoạt động parity trong quá trình nhận và truyền dữ liệu
Trang 18UPM1 UPM0 Parity Mode
0 0 (Disabled) Không sử dụng
1 0 Cho phép kiểm tra chẵn (even parity)
1 1 Cho phép kiểm tra lẽ (odd parity)
Bảng 7.2 Cài đặc bit Parity
Bit 3 – USBS (Stop Bit Select) dùng để chọn số stop bit trong hoạt động truyền dữ liệu, trong hoạt động nhận sẽ bỏ qua hoạt động này
Bảng 7.3 Cài đặc bit USBS
Bit 2.1 – UCSZ1.0 chọn kích thước dữ liệu
Stt UCSZ2 UCSZ1 UCSZ0 Kích thước bit
Bảng 7.4 Cài đặc số bit dữ liệu
Bit 0 – UCPOL (Clock Polarity) bit này chỉ được sử dụng trong hoạt động đồng bộ, bit này phải được viết = 0 trong hoạt đồng bất đồng bộ
UCPOL Truyền dữ liệu (ngõ ra, chân TxD) Nhận dữ liệu mẫu (ngõ vào, chân RxD)
0 Cạnh lên xung XCK Cạnh xuống xung XCK
1 Cạnh xuống xung XCK Cạnh lên xung XCK
Bảng 7.5 Cài đặc bit UCPOL
Trang 19Hình 7.6 Dữ liệu sẽ được thay đổi tại cạnh lên và lấy mẫu tại cạnh xuống
Hình 7.7 Dữ liệu sẽ được thay đổi tại cạnh xuống và lấy mẫu tại cạnh lên 7.2.5 Thanh ghi UBRRL và UBRRH
Hình 7.8 Thanh ghi UBRRL và UBRRH Thanh ghi UBRRH có cùng địa chỉ với thanh ghi UCSRC
Bit 7 – URSEL (Register Select) dùng để chọn thanh ghi UBRRH hoặc thanh ghi UCSRC, khi bit này bằng 0 thì thanh ghi UBRRH được chọn, khi bit này bằng 1 thì thanh ghi UCSRC được chọn
Tất cả các bit còn lại được sử dụng để chọn tốc độ baud trong hoạt động truyền/ nhận
dữ liệu, việc lựa chọn tốc độ baud phải đồng bộ với nhau và sai số trên 0.5% sẽ cho kết quả truyền không chính xác
Trang 20Bảng 7.6 Chọn tốc độ baud ở các tần số từ 1Mhz đến 2Mhz
Bảng 7.7 Chọn tốc độ baud ở các tần số từ 3Mhz đến 7Mhz
Trang 21Bảng 7.8 Chọn tốc độ baud ở các tần số từ 8Mhz đến 14Mhz
Bảng 7.9 Chọn tốc độ baud ở các tần số 16Mhz đến 20Mhz
7.3 CÁC BƯỚC THỰC HIỆN CÀI ĐẶC
Khi truyền/ nhận dữ liệu nối tiếp bất đồng bộ ta phải thực hiện các công việc sau:
1 Cài đặc tốc độ baud
2 Cài đặc số stop bit (1 hoặc 2)
Trang 223 Số bit truyền nhận dữ liệu
4 Có kiểm tra chẵn lẻ hay không
5 Xác định vi điều khiền nhận/ truyền hoặc vừa nhận vừa truyền dữ liệu
6 Xác định xem có ngắt hay không
2 Kiểm tra quá trình nhận dữ liệu có lỗi hay không, có 3 vấn đề cần kiểm tra đó là:
Parity Error (PE bit – 2 trong thanh ghi UCSRA)
Data OverRun (DOR bit – 3 trong thanh ghi UCSRA)
Frame Error (FE bit – 4 trong thanh ghi UCSRA)
3 Sau đó, VĐK sẽ nhận dữ liệu từ thanh ghi UDR (read) Kết thúc quá trình nhận
dữ liệu
7.3.2 Quá trình truyền dữ liệu:
1 Kiểm tra bit UDRE xem thanh ghi UDR (write) đã sẵn sàng nhận dữ liệu hay chưa
Nếu UDRE = 1 thì thanh ghi UDR (write) đang trống (đã truyền dữ liệu) và sẵn sàng nhận dữ liệu để truyền đi
Nếu UDRE = 0 thì thanh ghi UDR (write) đang bận truyền dữ liệu và không nhận dữ liệu mới
2 Viết dữ liệu vào thanh ghi UDR
Trang 237.3.3 Các thời điểm xảy ra ngắt trong hoạt động USART
Khi hoạt động nhận hoàn thành bit cho phép ngắt RXCIE
Khi hoạt động truyền hoàn thành, bit cho phép ngắt TXCIE
Khi thanh ghi dữ liệu UDR trống, bit cho phép ngắt UDRIE
7.4 BÀI TẬP VÍ DỤ
1 Bit nào, trong thanh ghi nào qui định việc cài đặt hoạt động đồng bộ và bất đồng bộ
2 Hãy cho biết thời điểm xảy ra hoạt động ngắt
3 Bit nào cho biết trạng thái truyền/ nhận dữ liệu đã hoàn thành
4 Tốc độ baud có ảnh hưởng tới quá trình đồng bộ, bất đồng bộ hay ảnh hưởng cả hai
5 Thanh ghi nào nhận dữ liệu và thanh ghi nào truyền dữ liệu
6 Khi cài đặc giao tiếp nối tiếp không đồng bộ giữa 2 thiết bị phải cùng các thông số nào?
7 Khi truyền dữ liệu đồng bộ với IC 74HC74 thì ta phải chọn bit UCPOL bằng bao nhiêu, tại sao?
Giao tiếp giữa 2 vi điều khiển theo nghi thức giao tiếp nối tiếp CHƯƠNG TRÌNH TRUYỀN DỮ LIỆU
/*****************************************************
This program was produced by the CodeWizardAVR V2.05.0 Professional Date : 11/25/2011
Author : LÂM QUANG CHUYÊN
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 1.000000 MHz
Trang 24#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
// Declare your global variables here
void main(void)
Trang 25TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 2 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 19200
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 1.000000 MHz
Trang 26# define FRAMING_ERROR (1<<FE)
# define PARITY_ERROR (1<<UPE)
# define DATA_OVERRUN (1<<DOR)
# define DATA_REGISTER_EMPTY (1<<UDRE)
// Declare your global variables here
void main( void )
Trang 27// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 19200
Trang 28Hình 7.9 Mạch giao tiếp giữa 2 vi điểu khiển theo kiểu nói tiếp