Vi điều khiển AVR do hãng Atmel ( hoa kỳ ) sản xuất được giới thiệu lần đầu tiên năm 1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny ( như At tiny 13, At tiny 22 ) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi , rồi đén dòng AVR ( chẳng hạn AT90S8535, AT90S8515 ) co kích thước bộ nhớ vào loại trung bình và manh hơn là dòng Mega ( như ATmega 16, Atmega 32, ATmega 128 .) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với bộ ngoại vi đa dạng được tích hợpcả bộ LCD trên chip ( dòng LCD AVR). Tốc độ của dòng Mega cũng cao hơn so với các dòng khác. Sự khác nhau cơ bản giữa các đòng chính là cấu trúc ngoại vi, còn nhân thì vẫn như nhau
58 trang |
Chia sẻ: luyenbuizn | Lượt xem: 2026 | Lượt tải: 3
Bạn đang xem trước 20 trang nội dung tài liệu Tìm hiểu vi mạch điều khiển atmega 16 và phần mềm lập trình giao diện máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÁO CÁO TỐT NGHIỆP
Các Yêu Cầu:
Tìm Hiểu Vi Điều Khiển Atmega16
Giới thiệu tổng quan
Các chức năng
Giới thiệu 1 số modun của Atmega16 : Cổng vào ra , AVR ATmega16 Memories, System Clock , Timer/Counter , Interrupt Vectors in ATmega16 , USART.
Tìm Hiểu phần mềm lập trình giao diện máy tính.
Giới thiệu phần mềm VISUAL BASIC
Các Control
Lập trình giao tiếp cổng COM
Phần 1. Tìm hiểu vi điều khiển Atmega16
Giới thiệu tổng quan
Giới thiệu AVR:
- Vi điều khiển AVR do hãng Atmel ( hoa kỳ ) sản xuất được giới thiệu lần đầu tiên năm 1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny ( như At tiny 13, At tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi , rồi đén dòng AVR ( chẳng hạn AT90S8535, AT90S8515…) co kích thước bộ nhớ vào loại trung bình và manh hơn là dòng Mega ( như ATmega 16, Atmega 32, ATmega 128…..) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với bộ ngoại vi đa dạng được tích hợpcả bộ LCD trên chip ( dòng LCD AVR). Tốc độ của dòng Mega cũng cao hơn so với các dòng khác. Sự khác nhau cơ bản giữa các đòng chính là cấu trúc ngoại vi, còn nhân thì vẫn như nhau
- ATmega16 là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết những bài tóan điều khiển trên nền vi xử lý.+Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn trong việc thay thế và sửa chữa hệ thống lúc cần.+Giá thành của dòng Vi Điều Khiển này khá phải chăng+Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống.
- ATmega16 là vi điều khiển 8bit dựa trên kiến trúc RISC. Với khả năng thực hiện mỗi lệnh trong vong một chu kỳ xung clock, Atmega16 có thể đạt được tốc độ 1MIPS trên mỗi MHz( 1triệu lệnh/s/MHz),các lệnh được xử lý nhanh hơn,tiêu thụ năng lượng thấp.
1.2.Chức năng của ATmega16* Atmega16 có cấu trúc RISC với: +131 lệnh,hầu hết được thực thi trong 1 chu kì xung nhịp. +32x8 thanh ghi đa dụng +Full static operation +Tốc độ làm việc 16MPIS,với thạch anh 16MHz +Trong chip co 2 chuc nang ho tro go roi va lap trinh saon chuong trinh - Bộ nhớ: +16 KB ISP Flash với khả năng 10.000lần ghi/xóa +512Byte EEROM +1KB SRAM ngọai* Giao tiếp JTAG +Khả năng quét toàn diện theo chuẩn JTAG +Hỗ trợ khả năng go roi +Hỗ trợ lập trình Flash,EEROM,fuse… +Lock bit qua giao tiếp JTAG* Ngọai vi: +2 timer/counter 8 bit với các mode :so sánh và chia tần số +1 timer/counter 16 bit với các mode:so sánh,chia tần số,capture,PWM +1 timer thời gian thực(Real time clock) với bộ dao động riêng biệt +4 kênh PWM(họăc nhiều hơn trong các VĐK khác thuộc họ này) +8 kênh biến đổi ADC 10bit +Hỗ trợ giao tiếp I2C +Bộ giao giao tiếp nối tiếp lập trình được USART +Giao tiếp SPI +Watch_dog timer với bộ dao động on-chip riêng biệt* Những thuộc tính đặc biệt: +Power On reset và Brown-out detection +chế độ hiệu chỉnh bộ sai số cho bộ dao động RC On-chip +Các chế độ ngắt ngòai và trong đa dạng +6 mode sleep:Idle,ADC noise reduction,tiết kiệm năng lượng,power-down, standby,extended standby* I/O port: +32 chân I/O(Atmega16) và 21 chân I/O (Atmega8) lập trình được +vỏ 40 chaân (Atmega16) ,28 chân(Atmega8),64 chân(AT90can128);* Nguồn cấp: 2,7->5.5 V với ATmega16L 4.5->5.5V với ATmega16H* Tiêu hao năng lượng: +Khi họat động tiêu thụ dòng 1,1mA +Ở mode Idle tiêu thụ dòng 0.35mA +Ở chế độ Power_down tiêu thụ dòng nhỏ hơn 1uA
* Đây là những chức năng cơ bản thường thấy trong các Vi điều khiển AVR,ngòai ra trong các vi điều khiển khác thuộc dòng vi điều khiển này thì thường được hỗ trợ thêm những chức năng đặc biệt.Ví dụ AT90can128 hỗ trợ thêm bộ giao tiếp mạng Can bus on-chip
* Các phần mềm lập trình cho AVR: + AVRStuido (free), Code Vision. Các phần mềm này có hỗ trợ phần nạp và debug on chip + Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic800...
Một số modun của Atmega16
Cổng vào ra I/O
- Vi điều khiển ATmega16 có 32 đuờng vào ra chia làm bốn nhóm 8bit một. Các cổng vào ra của AVR là cổng vào ra 2 chiều có thể định hướng, tức có thể chọn hướng của cổng là hướng vào ( input ) hay hướng ra ( out put ). Tất cả các cổng vào ra của AVR đều có tính năng Đọc- Chỉnh sửa- Ghi ( Read- Modify-Write ) khi sử dụng chúng như là các cổng vào ra số thong thường. Điều này có nghĩa là khi tat hay đổi hướng của 1 chân nào đó thì nó không ảnh hưởng tới hướng của các chân khác, Tất cả các chân của các các cổng ( Port ) đều có điện trở kéo lên (Pull-up ) riêng, ta có thể cho phếp hay không cho phép điện trở léo lên này hoat động.
- Điện trở kéo lên ( pull- up ): là 1 điện trở được dung khi thiết kế các mạch điện tử logic. Nó có 1 đầu được nói với nguồn điện áp dương ( thường là Vcc hoặc Vdd) và đầu còn lại được nối với tín hiệu lối vào/ra của 1 mạch logic chức năng, Điện trở kéo lên có thể được nắp đặt tại các lối vào ra của các khôíi mạch logic để thiết lập mức logic của khối mạch khi không có thiết bị ngoài nối với lối vào. Điện trở kếo lên cũng có thể nắp đặt tại các gaio diện giữa 2 khối mạch logic không cùng loại logic, đặc biệt là khi 2 khối mạch này được cấp nguồn khác nhau.
- Khi khảo sát các cổng như là các cổng vào ra số thong thường thì tính chất của các cổng ( Port A, PortB, PortC ) là tương tự nhau, nên ta chỉ cần lkhảo sát 1 cổng nào đó trong 3 cổng của vi điều khiển là đủ
- Mỗi 1 cổng vào ra của vi điều khiển được lien kết với 3 thanh ghi : PORTx, DDRx, PINx (ở đây x là thay thé cho A, B, C ). Ba thanh ghi này sẽ được phối hợp với nhau đẻ điều khiển hoạt động của cổng, chẳmg hạn thiết lạp cổng thành lối vào có sử dụng điện trở pull-up… Sau đây là vai trò của 3 thanh ghi trên.
Thanh ghi DDRx
Đây là thanh ghi 8bit( ta có thể đọc và ghi ở các thanh ghi này) có tác dụng điều khiển hướng cổng PORTx( tức là cổng vào hay cổng ra). Nếu như một bit trong thanh ghi này được set thì bit tương ứng đó trên PORTx đuệoc định nghĩa như một cổng ra. Ngược lại nếu như bit đó không được set thi bit tương úng trên PORTx được định nghĩa là cổng vào
Thanh ghi PORTx
Đây cũng là thanh ghi 8bit ( các bit có thể đọc và được ghi) nó là thanh ghi dữ liệu của cổng Px và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi tag hi một môtl bit lên thanh ghi này thì chân tương ứng trên port đó cùng có mức logic. Trong trường hợp đó mà cổng được định nghĩa là cổng vào thì thanh ghi này mang dữ liệu điều khiển cổng. Cụ thể là nếu bit nào đó của thanh ghi này được set (đưa lên mức 1 ) thì điện trở kéo lên pull up của chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái. Thanh ghi này sau khi khởi động Vi điều khiển sẽ có giá trị là 0x00
Thanh ghi PINx
Đây là thanh ghi 8bit chứa dữ liệu vào của PORTx ( trong trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không ghi vào được
AVR ATmega16 Memories
- AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chương trình. Ngoài ra ATmega16 còn có them bộ nhớ EEPROM để lưu trữ dữ liệu
Bộ nhớ chương trình( bộ nhớ Flash)
bộ nhớ Flash 16Kb của ATmega16 dùng để lưu trữ chương trình. Do các lẹnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp théo kiểu 8KX16. Bộ nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trinh ứng dụng
Bộ nhớ dữ liệu SRAM
1120 ô nhớ dữ liệu đinh địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội
Bộ nhớ dữ liệu EEPROM
Đây là bộ nhớ dữ liệu có thể ghi xoá ngay trong lúc vi điều khiẻn hoạt động và không bị mất dữ liệu khi nguồn điện cung cấp bị mất. Có thể ví bộ nhớ dữ liệu EEPROM giống như ổ cứng của máy tính. Với vi điều khiển ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ ghi từng byte một . EEPROM được xem như là 1 bộ nhớ vào ra được đánh địa chỉ độc lập với SRAM , điều này có nghĩa ta cần sử dụng cá lệnh in , out… khi muốn truy xuất tới EEPROM. Để điều khiển vào ra dữ liệu với EEPROM ta sử dụng 3 thanh ghi sau:
Thanh ghi EEAR (EEARH và EEARL )
EEAR là thanh ghi 16 bit lưu giữ địa chỉ của các ô nhớ của EEPROM, thanh ghi EERA được kết hợp từ 2 thanh ghi 8 bit là EEARH và thanh ghi EEARL.
Thanh ghi EECR
Đây là thanh ghi điều khiển EEPROM, ta chỉ sử dụng 4 bit đầu chảu thanh ghi này,4 bit cuối là dự trữ. Sau đây là chức năng của từng bit.
+ Bit 3- EERIE : EEPROM ( Ready Interrup Enable) : Đây là bit cho phép EEPROM ngắt CPU, khi bit này được set thành 1 và ngắt toàn cục dược cho phép ( bằng cách set bit 1 trong thanh ghi SREG lên 1) thì EEPROM sẽ tạo ra 1 ngắt với CPU khi bit EEWE được xoá, điều này có nghĩa là khi các ngắt được cho phép ( bit 1 trong thanh ghi SREG và bit EERIE tronh thanh ghi EECR được set thành 1) với quá trình ghi vào ROM vừa xong thì sẽ tạo ra 1 ngắt với CPU , chương trình sẽ nháy với vectơ ngắt có địa chỉ là 002C để thực hiện chương trình phục vụ ngắt (ISR ). Khi bit EERIE là 0 thì ngắt không được cho phép.
+ Bit 2- EEMWE : EEPROM Master Write Enable : Khi bit EEMWE và bit EEWE là 1 sẽ ra lệnh cho CPU ghi dữ liệu từ thanh ghi EEDR vào EEPROM, địa chỉ của ô nhớ cần ghi trong EEPROM dược lưu trong thanh ghi EEAR. Khi bit này là 0 thì không cho phép ghi vào EEPROM. Bit EEMWE sẽ được xoá bởi phần cứng sau 4 chu kỳ máy.
+ Bit1- EEWE : EEPROM (Write Enable ) Bit này vừa đong vai trò như 1 bit cờ, vừa là bit điều khiển việc ghi dữ liệu vào EEPROM. Ở vai trò của 1 bit điều khiển nếu bit EEMWE đã được set lên 1 thì khi ta set bit EEWE lên 1 thì sẽ bắt đầu quá trình ghi dữ liệu vào EEPROM. Trong suốt quá trình ghi dữ liệu vào EEPROM bit EEWE luôn giữ là 1. Ở vai trò của 1 bit cờ khi quá trình ghi dữ liệu vào EEPROM hoàn tất , phần cứng sẽ tự động xoá bit này về 0. Trước khi dữ liệu vào EEPROM ta cần phải biết chắc là khong có qú trình ghi EEPROM nào khác đang xảy ra , đẻ biết được điều này ta cần kiểm tra bit EEWE. Để ý là sau khi quá trình đọc dữ liẹu từ EEPROM hoàn tất, bit EERE sẽ được tự động xoá bởi phần cứng. Nếu EEPROM đang được ghi thì ta không thể đọc được dữ liệu từ EEPROM. Khi bắt đầu quá trình đọc dữ liệu từ EEPROM , CPU sẽ tạm nghỉ 4 chu kỳ máy trước khi thực hiện lếnh kế tiếp.
- Tóm lại để ghi vào EEPROM ta cần thực hiện các bước sau:
+ Chờ cho bit EEWE về 0
+ Cấm tất cả các ngắt
+ Ghi địa chỉ vào thanh ghi EEAR
+ Ghi dữ liệu mà ta cần ghi vào EEPROM vào thanh ghi EEDR
+ Set bit EEMWE thành 1
+ Set bit EEWE thành 1
+ Cho phép các ngắt trở lại
- Nếu 1 ngắt xảy ra giữa bước 5 và 6 sẽ làm hỏng quá trình ghi vào EEPROM bởi vì bit EEMWE sau khi set lên 1 chỉ được giữ trong 4 chu kỳ máy, chương trình ngắt sẽ làm hết thời gian ( Time out ) duy trì bit này ở mức 1.
- Một ngắt xuất hiện ở cuối bước 4 cũng có thể làm cho địa chỉ và dữ liệu cần ghi vào EEPROM trở lên không chính xác nếu trong vhương trình phục vụ ngắt có chỉnh sửa lại các thanh ghi EEAR và EEDR. Đó là lý do ta cần cấm các ngắt trước khi thực hiện tiếp các bước 3, 4, 5, 6
Quá trình ghi dữ liệu vào EEPROM cũng có thể không an toàn nếu điện thé nguồn nuôi (Vcc) quá thấp.
- Đọc dữ liệu từ EEPROM :Việc đọc dữ liệu từ EEPROM đơn giản hơn ghi dữ liệu vào EEPROM, để đọc dữ liệu từ EEPROM ta thực hiện các bước sau: Chờ cho bit EEWE về 0. Ghi địa chỉ vào thanh ghi EEAR . Set bit EERE lên 1
C. Bộ Định thời (Timer/ Counter )
- là một modum định thời/đếm 8bit, có đặc điểm sau:
+ Bộ đếm một kênh.
+ Xoá bộ định thời khi trong mode so sánh( tự động nạp)
+ PWM
+ Tạo tần số
+ Bộ đếm sự kiẹn ngoài
+ Bộ chia tần 10 bit
+ Nguồn ngắt tràn bộ đếm và so sánh
- Các thanh ghi : TCNT0 và OCR0 là các thanh ghi 8 bit. Các tín hiệu yêu cầu ngắt đều nằm trong thanh ghi TIFR. Các ngắt có thể được che bởi thanh ghi TIMSK.
- Bộ định thời có thể sử dụng xung clock nội thong qua bộ chia hoặc xung clock ngoài trên chân T0. Khối chọn xung clock điều khiển việc bộ định thời/bộ đếm sẽ dung nguồn xung nào để tăng giá trị của nó. Ngõ ra của khối chọn xung clock được xem là xung clock của bộ định thời.
- Đơn vị đếm
- Phần chính của bộ định thời 8 bit là 1 đơn vị song hướng có thể lập trình được
Count: tăng hay giảm TCNT01
Direction: lựa chọn giữa đếm lên và đếm xuống
Clear: xoá thanh ghi TCNT0
Clkto : xung clock của bộ định thời
TOP: báo hiệu bộ định thời đã tăng đến giá trị lớn
nhất
BOTTOM : báo hiệu bộ đinh thời đã giảm đến giá trị nhỏ nhất( 0 )
* Đơn vị so sánh ngõ ra
- Bộ sa sánh 8 bit lien tục so sánh giá trị TCNT0 với giá trị trong thanh ghi so sánh ngõ ra(OCR0). Khi giá trị TCNT0 băng với OCR0, bộ so sánh sẽ tạo một báo hiệu. Báo hiệu này sẽ đặt giá trị cờ so sánh ngõ ra (OCF0 ) lên 1 vào chu kỳ xung clock tiếp theo. Nếu được kích hoạt ( OCIE0=1 ), cờ OCF0 sẽ tạo ra 1 ngắt được thực thi. Cờ OCF0 cũng có thể được xoá bằng phần mềm.
- Mô tả các thanh ghi
Thanh ghi điều khiển bộ định thời/bộ đếm TCCR0
+ Bit 7- FOC0 : so sánh ngõ ra bắt buộc
Bit này chỉ tích cực khi bit WGM00 chỉ định chế độ làm việc không có PWM. Khi đặt bit này lên 1, một báo hiệu so sánh bắt buộc xuất hiện tại đơn vị tạo dạng song
+ Bit 6, 3- WGM01, WGM00 : chế độ tạo dang song
Các bit này điều khiển đếm thứ tự của bộ đếm, nguồn cho giá trị lón nhất của bộ đếm ( TOP ) và kiểu tạo dạng song sẽ được sử dụng.
+ Bit 5, 4- COM01, COM00 : chế độ báo hiệu so sánh ngõ ra
Các bit này điều khiển hoạt động của chân OC0. Nếu 1 hoặc cả 2 bit COM01 và COM00 được đặt lên 1, ngõ ra OC0 sẽ hoạt động.
+ Bit 2, 0- CS02, CS00 : chọn sung đồng hồ
Ba bit này dung để lựa chọn nguồn xung cho bộ định thời/ bộ đếm
Thanh ghi bộ định thời/ bô đếm
- Thanh ghi bộ định thời/ bộ đếm cho phép truy cập trực tiếp ( cả đọc và ghi) vào bộ đếm 8 bit
Thanh ghi so sánh ngõ ra- OCR0
- Thanh ghi này chứa 1 giá trị 8 bit và lien tục được so sánh với giá trị của bộ đém
- Thanh ghi mặt nạ ngắt
+ Bit 1- OCIE0: cho phép ngắt báo hiệu so sánh
+ Bit 0- TOIE0 :cho phép ngăt tràn bộ đếm
Thanh ghi cờ ngắt bộ định thời
+ Bit 1- OCF0 : cờ so sánh ngõ ra 0
+ Bit 0- TOV0 : cờ tràn bộ đếm
- Bit TOV0 được đặt lên 1 khi bộ đếm bị tràn và đựoc xoá bởi phần cứng khi vectơ ngắt tương ứng được thực hiện . Bit này cũng có thể xoá bằng phần mềm.
D .Interrup
Khái niệm về ngắt :
Ngắt là sự kiện bên trong hay bên ngoài làm ngắt bộ vi điều khiển để báo cho nó biết rằng thiết bị cần dịch vụ của nó.
Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có 2 cách để thực hiện điều này đó là sử dụng các ngắt Interrup và thăm dò ( polling). Trong phương pháp sử dụng các ngắt thì mỗi khi có thiết bị bất kỳ cần đến dịch vụ của nó thì nó báo cho bộ vi điều khiển bằng cách gửi 1 tín hiệu ngắt. Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị. Chương trình đi cùng ngắt được gọi là dịch vụ ngắt ISR hay còn gọi là chương trình quản lý ngắt. Còn trong phương pháp thăm dò thì bộ vi điều khiển hiển thị lien tục tình trạng của 1 thiết bị đã cho và điều khiển thỏa mãn thì nó phục vụ thiết bị. Sau đó chuyển sang hiển thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều được phục vụ
Điểm mạnh của phương pháp ngắt là bộ vi điều khiển là phục vụ rất nhiều thiết bị( tất nhiên là không cùng tại một thời điểm.
Trình phục vụ ngắt
Đối với mỗi ngắt thì phải có 1 trình phục vụ ngắt ISR hay trình ngắt. Khi 1 ngăt được gọi thì bộ vi điều khiển phục vụ ngắt. Đối với mỗi ngắt thì có 1 vị trí cố định trong bộ nhớ giữa địa chỉ ISR của nó. Nhóm các vị trí nhớ được dành riêng để gửi các địa chỉ của các ISR được gọi là bảng vectơ ngắt.
Khi kích hoạt 1 ngắt bộ vi điều khiển đi qua các bước sau :
+ Vi điều khiển kết thúc lênh đang thực hiện và lưu trữ đia chỉ của lệnh kế tiếp ( PC ) vào ngăn xếp.
+ Nó nhảy đến 1 vị trí cố định trong bộ nhớ được gọi là bảng vectơ ngắt nơi lưu giữ địa chỉ của 1 trình phục vụ ngắt
+ Bộ vi điều khiển nhận địa chỉ ISR từ bảng vectơ ngắt và nhảy tới đó. Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR và RETI ( trở về từ ngắt )
+ Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 2 byte trên đỉnh của ngăn xếp vào PC. Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó.
Bảng vectơ ngắt của Atmega 16
E. USART
- USART : Bộ truyền nhận nối tiếp đồng bộ và bất đồng bộ phổ dụng . Đây là khối chức năng dung cho việc truyền thong giữa vi điều khiển với các thiết bị khác. Trong vấn đè truyền dữ liệu só, có thể phân chia cách thức(method) truyền dữ liệu ra 2 chế độ mode cơ bản là : chế độ nhận Đồng Bộ (shynchronous) và chế độ nhận Bất đồng bộ (Asynchronous). Ngoài ra , nếu có góc độ phần cứng thì có thể phân chia theo cách khác đó là : Truyền nhận dữ liệu theo kiểu Nối Tiếp ( serial) và song song (paralen)
Truyền đồng bộ: là kiểu truyền dữ liệu trong đó bộ truyền (Transmitter) và bộ nhận(Receiver) sử dụng chung mọt xung đồng hồ (clock).Do đó hoạt động truyền và nhận dữ liệu diễn ra đồng thời. Xung clock có vai trò là tín hiệu đồng bộ cho hệ thống ( gồm khối truyền và khối nhận). Ưu điểm của kiểu ctuyền đồng bộ là tốc độ nhanh, thích hợp khi truyền dữ liệu khôí block).
Truyền bất đồng bộ : là kiểu truyền dữ liệu trong đó mỗi bộ truyền (transmitter) và bộ nhận (receiver) có tạo bộ xung (lock) riêng, tốc độ xung clock ở 2 khối này có thể khác nhau, nhưng thưòng khong quá 10%. Do không dung chung xung clock, nên để đồng bộ quá trình truyền và nhận dữ liệu, người ta phải truyền các bit đồng bộ (Start, stop,…) đi kèm với các bit dữ lieu. Các bộ truyền và bộ nhận sẽ dựa vào các bit đồn bộ này quyết định khi nào sẽ thực hiện hay kết thúc quá trình truyền hoặc nhận dữ liệu. Do đó, hệ thống truyền không đồng bộ còn được gọi là hệ thống truyền “ tự đồng bộ “
- Từ 2 kiểu truyền dữ liệu cơ bản trên,người ta dưa ra nhiều giao thức truyền khác nhau như : SPI (đồng bộ ), USRT (đồng bộ ), UART ( bất đồng bộ )
- Sơ đồ khói bộ USART được chia làm ba phần chính
khối tạo xung
Bộ truyền
Bộ nhận
Bộ tạo xung clock : có chức năng thiết lập tốc đọ Baud. Bộ truyền bao gồm 1 thanh ghi đệm và một thanh ghi dịch, việc ghi dữ liệu vào bộ đếm cho phép quá trình truyền lien tục mà khong có độ trẽ giữa các khung. Bộ nhận có cấu tạo phức tạpnó bao gồm việc kiểm tra chẵn lẻ, điều khiển logic, thanh ghi dich, đồng thới nó có 2 cấp độ trong bộ đếm nhận . Ngoài việc đinh dạng khung như bộ truyền thì bộ nhận có khả năng phát hiện lỗi khung, lỗi chẵn lẻ, lỗi tràn dữ liệu
Đơn vị tạo xung clock
Txclk : xung đồng hồ bộ truyền
Rxclk : xung đồng hồ bộ nhận
Xcki : tín hiệu vào từ chân XCK, sử dụng cho truyền đồng bộ Master
XCKO : tín hiệu cung clock ngõ ra tới chân XCK, sử dụng cho hoạt động truyền đồng bộ slave
Fose: tần số tử chân XTAL
Định dạng khung: Trong ché độ truyền không đồng bộ, khung dữ liệu truyền đi không có 1tín hiệu clock để đồng bộ hoá dữ liêu ( vì thế mà gọi là không đồng bộ) , quá trình đông bộ hoá giữa bộ thu và bộ phát được thực hiện nhờ các bit đồng bộ là start bit và stop bit . Một khung nối tiếp bao giờ cũng được đinh dạn theo thứ tự 1 start bit , các bit giữ liệu (data bit ) 1 bit pairty tuỳ chọn phục vụ lỗi kiếm lỗi và kết thúc bằng 1 hoặc 2 stop bit
St : bit start ( mức thấp )
(n) : bit dữ liệu ( 0 đến 8 )
P: bit chẵn lẻ
Sp: bit stop ( mức cao )
IDLE : không có dữ liệu truyền ( mức cao trong suốt thời gian idle )
USART chấp nhận các định dạng khung sau:1 start bit (luôn có mức logic thấp, gọi là space) .5, 6, 7, 8 hoặc 9 data bits.Không có, hoặc 1 bit parity chẵn/lẻ.1 hoặc 2 stop bit (luôn có mức lôgic cao, gọi là mark). - Quá trình truyền USART:Việc truyền dữ liệu nối tiếp ra ngoài thông qua chân TxD.Một quá trình truyền dữ liệu từ MCU đi được khởi tạo bằng việc viết dữ liệu vào thanh ghi đệm dữ liệu UDR, sau đó dữ liệu được chuyển tới thanh ghi dịch bộ phát khi thanh ghi dịch đã sẵn sàng truyền một byte mới. Các bit start và stop được bổ sung vào khung dữ liệu trong thanh ghi này với thiết đặt từ thanh ghi điều khiển bộ phát. Cũng như vậy bit thứ 9 (nếu có) có thể được thêm vào TXB8 trong thanh ghi UCSRB trước khi byte thấp của ký tự được viết vào UDR. Khi thanh ghi dịch dịch hết dữ liệu (đã được điều chế) ra thế giới bên ngoài thông qua chân TxD, nó sẽ sẵn sàng nhận dữ liệu mới nếu nó đang ở trạng thái rỗi hoặc ngay lập tức sau khi bit stop cuối cùng của khung trước đó được truyền đi. Lưu ý rằng dữ liệu được dịch ra ngoài với bit LSB trước, cuối cùng là MSB. - Quá trình nhận USART:Phần mềm cho phép thanh ghi dịch nhận dữ liệu nối tiếp từ thế giới bên ngoài thông qua chân RxD (PD0). Bộ thu bắt đầu tiếp nhận dữ liệu khi dò được một bit Start. Sau khi dò được bit Stop đầu tiên (end of the frame), dữ liệu được chuyển đến thanh ghi UDR (bộ đệm dữ liệu bộ thu) không có các Start và Stop bits theo dạng song song để vào CPU.- USART có 5 thanh ghi
Thanh ghi vào/ra dữ liệu (UDR). Các thanh ghi đệm dữ liệu của bộ thu và bộ phát của USART cùng chia sẻ vùng địa chỉ I/O được tham chiếu là thanh ghi dữ liệu UDR. Khi viết vào UDR thì nó thể hiện như là một bộ đệm truyền, còn khi đọc dữ liệu từ UDR thì nó lại thể hiện như một bộ đệm nhận. Đối với các bit 5,6 và 7, các bit không dùng sẽ bị bỏ qua bởi bộ đệm truyền và được đọc là 0 bởi bộ đệm nhận.Bộ đệm truyền chỉ có thể được viết khi cờ UDRE trong thanh ghi UCSRA được set. Dữ liệu viết vào UDR khi cờ UDRE không được set sẽ bị bỏ qua. Khi dữ liệu được viết vào bộ đệm truyền và bộ đệm truyền được enable thì nó sẽ tải dữ liệu vào thanh ghi dịch truyền nếu nó rỗng.Bộ đệm thu gồm hai mức FIFO. Hai thanh ghi đệm hoạt động như một bộ đệm vòng FIFO. FIFO sẽ thay đổi trạng thái của nó bất cứ khi nào bộ đệm nhận được truy cập. Quan trọng là các cờ lỗi (FE và DOR), và bit dữ liệu thứ 9 (RXB8) được đệm cùng với dữ liệu trong bộ đệm nhận. Vì vậy các bit trạng thái luôn phải được đọc trước khi thanh ghi UDR được đọc.b. Thanh ghi điều khiển và trạng thái A (UCSRA).• Bit 7 – RXC: USART Receive Complete. Bit này được set khi có dữ liệu không đọc được vào bộ đệm nhận, hay bộ đệm nhận đ• đầy và nó bị xoá khi bộ đệm nhận là rỗng. Cờ RXC có thể sử dụng để phát ra một ngắt báo Receive Complete.• Bit 6 – TXC: USART Transmit Complete: Bit này được set nếu quá trình truyền hoàn thành, đó là tại lúc kết thúc một khung gửi đi. Cờ TXC có thể dùng phát ra một ngắt Transmit Complete.• Bit 5 – UDRE: USART Data Register Empty. Bit này được set nếu thanh ghi dữ liệu phát (bộ đệm truyền) là rỗng và sẵn sàng nhận dữ liệu mới. Cờ này cũng có thể dùng để phát ra một ngắt.
c. Thanh ghi điều khiển và trạng thái B (UCSRB).
d. Thanh ghi điều khiển và trạng thái C (UCSRC). • Bit 7 – URSEL: Register Select. Bit này chọn việc truy nhập vào UCSRC hoặc UBRRH. Nếu URSEL = 1 thì sẽ chọn làm việc với UCSRC, URSEL phải được viết là 1 khi thực hiện viết UCSRC. • Bit 6 – UMSEL: USART Mode Select. Bít này dùng để chọn giữa chế độ hoạt động đồng bộ (UMSEL = 1) hay không đồng bộ (UMSEL= 0).
e. Thanh ghi tốc độ Baud (UBRRL và UBLLH).: • Bit 15 – URSEL: Register Select . Làm việc với UBRRH.àURSEL = 0 • Bit 14:12 – Reserved Bits. Các bit này dành cho các ứng dụng tương lai. • Bit 11:0 – UBRR11:0: USART Baud Rate Register. Đây là thanh ghi 12 bit chứa tốc độ baud của USART, UBRRH chứa 4 bit cao nhất và UBBRRL chứa 8 bit thấp còn lại
PHẦN 2. Tìm hiểu phần mềm lập trình giao diện máy tính
Giới thiệu phần mềm ViSual Basic
-Visual Basic là gì ? Phần “ Visual “đề cập đến phương pháp được sử dụng để chế tạo giao diện đồ hoạ người dung ( Graphical User Interface hay viết tắt là GUI ). Có sẵn những bộ phận hình ảnh gọi là control, bạn tha hồ sắp đặt vị trí và quyết định cá đặc tính của chúng trên một khung màn hình, gọi là From
Phần “ Basic “đề cập đến ngôn ngữ BASIC , một ngôn ngữ lập trình đơn giản, dễ học được chế ra cho các khoa học giả dung
Visual Basic đã được ra từ MSBasic, do Bill Gate viết từ thời dung cho máy tính 8 bit 8080 hay Z80. Hiện nay nó chứa đến hang trăm câu lệnh ( command), àhm ( function ) và từ khoá ( keyword ). Khả năng ngôn ngữ này cho phếp những người chuyên nghiệp hoàn thành bất kỳ điều gì nhờ sử dụng ngôn ngữ lập trình MSWindow nào khác
Visual Basic còn có 2 dạng khác : Visual Basic for Application ( VBA ) và VBScript.
Visual basic 6.0 ( VB6) là một phiên bản của bộ công cụ lập trình Visual Basic , cho phếp người dung tiếp cận nhanh cách thức lập trình trên môi trường Window. Những ai đã từng quen thuộc với VB thì tìm thấy ở VB những tính năng trợ giúp mới và các công cụ lập trình hiệu quả. Người mới quen với VB cung có thể làm chủ VB6 một cách dễ dàng. Với VB6 , chúng ta có thể:
khai thác thé mạnh của các điều khiển mở rộng.
làm việc với các thanh điều khiển mới ( ngày tháng với điều khiển Month View và Data timePicker, các thanh công cụ có thể di chuyển được CoolBar, sử dụng đò hoạ với Image Combo, thanh cuộn FlatScrollBar,… )
Làm việc với các tính năng ngôn ngữ mới
Làm việc với DHTML
Làm việc với cơ sở dữ liệu
Các bổ xung về lập trình hướng đối tượng
B .
Các file đính kèm theo tài liệu này:
- BC1011.doc