Điều này có nghĩa là trong thời gian một xung clock, đơn vị số học ALU Arithmetic Logic Unit sẽ thực thi một lệnh, kết quả được lưu ngược lại vào các thanh ghi.. Dữ liệu trong thanh ghi
Trang 16
VI XỬ LÝ
AVR AT90S2313
6.1 GIỚI THIỆU CHUNG VỀ HỌ VI XỬ LÝ AVR
AVR là vi xử lý chuẩn CMOS 8bit tiêu thụ ít năng lượng, được chế tạo dựa
trên cấu trúc AVR RISC (Reduced Instruct Set Computers), đây là cấu trúc có
tốc độ xử lý cao hơn nhiều so với các vi xử lý được chế tạo dựa trên cấu trúc
CISC (Complex Instruct Set Computers) Bởi vì mỗi một chu kỳ máy của AVR
bằng với tần số hoạt động của thạch anh, trong khi với vi xử lý họ 8051 thì mỗi
chu kỳ máy bằng tần số của thạch anh chia cho 12
6.1.1 Đặc tính kỹ thuật của AVR-AT90S2313
- Tập lệnh gồm 118 lệnh Hầu hết mỗi lệnh được thực hiện trong một chu
kỳ máy
- 32×8 thanh ghi (R0→R31)
- 2Kb flash ROM để chứa chương trình, cho phép xóa nạp 1000 lần
- 128 bytes SRAM
- 128 bytes EEPROM, cho phép ghi xóa 100000 lần
- Cho phép cấm truy cập nội dung Flash ROM va EEPROM
- Một bộ định thời và bộ đếm 8bit
- Một bộ định thời và bộ đếm 16bit, bộ phát xung PWM 8,9 hoặc 10 bit
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 2- Bộ so áp
- Watchdog timer có thể lập trình được
- Lập trình trực tiếp thông qua chuẩn giao tiếp SPI
- Hỗ trợ tốc độ BAUD cao
- Chế độ tiết kiệm năng lượng
- 15 chân xuất nhập
- Điện áp hoạt động 4,0– 6,0V
6.1.2 Sơ đồ chân
+ Mô tả các chân:
- VCC: Chân cấp điện (5V)
- GND: Chân nối đất (0V)
- PORTB (PB7 PB0):
Port B là port xuất nhập hai chiều 8-bit với các điện trở kéo lên bên trong PB0 và PB1 cũng là các ngõ vào dương (AIN0) và âm (AIN1) của bộ so áp Bộ đệm xuất của Port B có thể kéo dòng đến 20mA Port B sẽ ở trạng thái high-Z khi bị Reset hoặc ngay cả khi ngắt xung clock
- PORT D (PD6 PD0):
Port D cũng tương tự như Port B nhưng chỉ có 7 pin xuất nhập hai chiều
- RESET:
Ngõ vào Reset Mức thấp ở chân này trong hơn 50ns sẽ reset chip
- XTAL1:
Ngõ vào khuếch đại đảo của mạch dao động
- XTAL2:
Ngõ ra khuếch đại đảo của mạch dao động
6.2 CẤU TRÚC CỦA AVR
Vi xử lý AVR-AT90S2313 có kiến trúc kiểu RISC Tập thanh ghi truy xuất nhanh của nó bao gồm 32 x 8 bit thanh ghi với thời gian truy xuất bằng một xung GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 3clock Điều này có nghĩa là trong thời gian một xung clock, đơn vị số học ALU (Arithmetic Logic Unit) sẽ thực thi một lệnh, kết quả được lưu ngược lại vào các thanh ghi ALU hỗ trợ các phép tính số học và logic giữa các thanh ghi hay giữa một hằng số với một thanh ghi Các lệnh trên một thanh ghi đơn cũng có thể được thực thi trong ALU
Sáu trong số 32 thanh ghi đó được dùng như là 3 thanh ghi con trỏ địa chỉ 16-bit, điều này sẽ được nói rõ hơn ở phần sau
Bộ nhớ xuất nhập bao gồm 64 địa chỉ cho CPU kết nối với các thiết bị ngoại vi: thanh ghi điều khiển, bộ định thời/bộ đếm, bộ chuyển đổi A/D, và một số chức năng xuất nhập khác Bộ nhớ xuất nhập có thể được truy xuất trực tiếp Họ AVR cũng có kiến trúc Harvard: tách rời vùng nhớ và các bus cho chương trình và dữ liệu
Hình 6.1 Không gian vùng nhớ của AVR – AT90S2313
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 4Hình 6.2 Cấu trúc của AVR AT90S2313
6.2.1 Thanh ghi (register)
Về cấu trúc thì AVR AT90S2313 có 32 thanh ghi 8bit được truy cập trong một chu kỳ máy Có 6 trong 32 thanh ghi được sử dụng như 3 thanh ghi con trỏ
16 bit để định địa chỉ dữ liệu (X,Y,Z) Và một trong 3 thanh ghi này còn được sử dụng làm con trỏ trỏ đến một bảng dữ liệu trong hàm tìm kiếm (look up)
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 5Hình 6.3 Địa chỉ thanh ghi
Hầu hết trong tập lệnh của AVR đều cho phép dùng toàn bộ thanh ghi Chỉ trừ các lệnh sau SBCI, SUBI, CPI, ANDI, ORI, LDI là các lệnh thao tác trên một thanh ghi với một hằng số, chỉ cho phép dùng các thanh ghi từ R16-R31
6.2.2 Bộ định thời (timer)
AT90S2313 cung cấp 2 timer, một timer 8-bit và một timer 16-bit, đều có khả năng thay đổi tốc độ tràn bằng cách lấy tần số thạch anh chia cho 8, 64, 256,
1024
Hình 6.4 Sơ đồ khối Timer
6.2.3 UART
Một số đặc tính về bộ thu phát không đồng bộ của AT90S2313
• Hộ trợ rất nhiều tốc độ BAUD
• Cho tốc độ BAUD cao ngay cả với tần số thạch anh thấp
• Khung truyền 8 hoặc 9 bit
• Chế độ lọc nhiễu
• Cờ kiểm tra nếu dữ liệu trong bộ đệm bị ghi đè
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 6• Cờ kiểm tra lỗi khung truyền
• Cờ kiểm tra lỗi Start bit
• Hỗ trợ ba ngắt riêng biệt: ngắt khi truyền xong, ngắt khi bộ đệm dữ liệu rỗng, ngắt khi nhận xong
6.2.3.1 Bộ truyền dữ liệu
Hình 6.5 Sơ đồ khối của bộ truyền UART
Dữ liệu cần truyền được cất vào trong thanh ghi dữ liệu UDR Dữ liệu trong thanh ghi này được chuyển tới thanh ghi dịch để truyền đi trên chân TxD
Nếu bộ đệm truyền rỗng thì cờ UDRE trong thanh ghi USR được set Khi truyền xong thì cờ TXC trong thanh ghi USR được set
Cờ TXEN trong thanh ghi UCR là cờ cho phép truyền Khi cờ này được reset thì chân PD1 (TxD) có thể được sử dụng như một chân xuất nhập bình thường Và khi cờ này được set, thì bộ truyền sẽ được nối với chân PD1 để trở thành chân TxD
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 76.2.3.2 Bộ nhận dữ liệu
Hình 6.6 Sơ đồ khối bộ nhận UART
Bộ nhận lấy mẫu trên chân RxD ở tần số gấp 16 lần tốc độ BAUD Điều này có nghĩa là trong thời gian của 1 bit dữ liệu thì bộ nhận sẽ lấy mẫu 16 lần Trong khi đường truyền rảnh, mẫu lấy ở mức logic 0 thì được hiểu là cạnh xuống của start-bit, và chu trình kiểm tra start-bit được bắt đầu
Ta chọn mẫu lần thứ 1 biểu thị cho mẫu 0 Ta xét mẫu thứ 8, 9 và 10, nếu hơn hai trong ba mẫu này ở mức logic 1 thì startbit được coi như là một nhiễu và bộ nhận sẽ chờ một start-bit mới
Nếu một start-bit được kiểm tra là đúng, thì quá trình lấy mẫu tương tự được tiếp tục với từng bit dữ liệu kế theo
Hình 6.7 Khung truyền dữ liệu UART
Khi stop-bit đến bộ nhận, phải có ít nhất 2 trong 3 mẫu ở logic 1 thì bit đó mới được hiểu là stopbit Nếu có hơn 2 mẫu là logic 0 thì cờ FE (Framing Error) GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 8trong thanh ghi USR được set Vì vậy trước khi đọc thanh ghi UDR, người sử dụng nên kiểm tra cờ FE
Dữ liệu vẫn được chuyển vào thanh ghi UDR và cờ RXC trong thanh ghi USR được set cho dù việc kiểm tra stop-bit có lỗi hay không Thật ra, UDR được chia thành 2 thanh ghi riêng biệt: một cho bộ nhận và một cho bộ truyền
Và nếu trong khi đang nhận về một ký tự mà thanh ghi UDR không được đọc về từ lần nhận trước thì cờ OR (OverRun) trong UCR sẽ được set Điều này có nghĩa là dữ liệu trong lần nhận trước đã được dịch vào trong thanh ghi dịch đã không được chuyển vào UDR và bị mất Cờ OR được cập nhật khi mà dữ liệu trong UDR được đọc Vì thế, người sử dụng nên kiểm tra cờ này sau khi đọc UDR để chắc rằng dữ liệu không bị ghi đè do tốc độ BAUD quá cao hay CPU quá tải
Khi mà cờ RXEN trong thanh ghi UCR được reset, thì bộ nhận bị vô hiệu hóa Tức là chân PD0 (RxD) có thể dùng như là một chân xuất nhập bình thường Khi cờ này được set, bộ nhận sẽ được nối với chân PD0 và chân này trở thành chân RxD
6.2.4.3 Các thanh ghi liên quan
• Thanh ghi dữ liệu UDR (The UART I/O Data Register)
Thanh ghi UDR thật ra có 2 thanh ghi riêng biệt cùng có chung một địa chỉ I/O Khi ghi lên thanh ghi này, thì UDR là thanh ghi dữ liệu của bộ truyền Khi đọc từ UDR, thì lúc này UDR lại là thanh ghi dữ liệu của bộ nhận
• Thanh ghi trạng thái USR (UART Status Register)
Thanh ghi USR là một thanh ghi chỉ đọc, nó cung cấp thông tin trạng thái UART
Bit 7 – RXC (UART Receive Complete) Bit này được set khi một ký tự được chuyển từ thanh ghi dịch vào UDR RXC được xóa khi UDR được đọc
Bit 6 – TXC (UART Transmit Complete) Bit này được set khi mà toàn bộ ký tự (bao gồm cả stop-bit) trong thanh ghi dịch được đẩy ra và không có dữ liệu mới nào được ghi vào trong UDR
Bit 5 – UDRE (UART Data Register Empty) GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 9Bit này được set khi một ký tự trong UDR được chuyển vào thanh ghi dịch Việc set cờ này báo hiệu rằng bộ truyền đã rỗng và đã sẵn sàng để phát ký tự tiếp theo
UDRE được set trong suốt quá trình reset
Bit 4 – FE (Framing Error) Bit này được set nếu một lỗi khung truyền được tìm thấy; ví dụ như: stop-bit của ký tự đang nhận là 0
Bit này sẽ được xóa khi mà stopbit của dữ liệu nhận được là 1
Bit 3 – OR (Overrun) Bit này được set nếu một lỗi ghi đè dữ liệu được phát hiện Ví dụ như: khi một ký tự đang ở trong UDR không được đọc trước khi một ký tự khác được dịch vào thanh ghi dịch của bộ nhận
Cờ OR được xóa khi dữ liệu được nhận và chuyển tới UDR
• Thanh ghi điều khiển UCR (UART Control Register)
bit 7 – RXCIE: Cho phép ngắt nhận khi hoàn tất
Nếu bit này được set thì khi bit RXC trong thanh ghi RXC lên một thì chương trình phục ngắt sẽ được thực hiện
bit 6 – TXCIE: Cho phép ngắt truyền khi hoàn tất
Nếu bit này được set thì khi bit TXC trong thanh ghi USR lên một thì chương trình phục vụ ngắt sẽ được thực hiện
bit 5 – UDRIE: Cho phép ngắt khi bộ đệm rỗng
Nếu bit này được set thì khi bit UDRE trong thanh ghi USR lên một thì chương trình phục vụ ngắt sẽ được thực hiện
bit 4 – RXEN: Cho phép nhận
Bit này cho phép bộ nhận hoạt động khi được set Khi bit này đang ở mức 0, thì các cờ trạng thái TXC, OR, FE không thể được set Nếu các cờ này được set, thì việc reset RXEN không làm cho các cờ này bị xóa
bit 3 – TXEN: Cho phép truyền Bit này cho phép bộ truyền hoạt động khi được set Trong khi đang truyền một ký tự mà bit cho phép truyền bị reset, thì bộ truyền vẫn tiếp tục truyền cho đến hết ký tự đang truyền GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 10bit 2 – CHR9: Khung dữ liệu 9 bit Khi bit này được set thì khung dữ liệu sẽ là 9 bit kể cả start bit và stop-bit Bit thứ 9 sẽ được đọc và ghi bằng cách sử dụng bit RXB8 và TXB8 tương ứng trong thanh ghi UCR Bit thứ 9 này có thể coi như một stop-bit mở rộng hoặc bit kiểm tra parity
bit 1 - RXB8: Receive Data Bit 8 RXB8 là bit thứ 9 của ký tự nhận được khi CHR9 được set bit 0 – TXB8: Transmit Data Bit 8
TXB8 là bit thứ 9 của ký tự nhận được khi CHR9 được set
6.2.4.4 Cách định tốc độ BAUD
Tốc độ BAUD được xác định theo công thức sau:
) 1 UBRR ( 16
f BAUD CK
+
=
BAUD: tốc độ BAUD
fCK : tần số thạch anh sử dụng
UBRR: thanh ghi chứa giá trị xác định tốc độ BAUD (0-255)
Với một số thạch anh chuẩn, các tốc độ BAUD thông thường được cho trong bảng sau, chú ý rằng với các tốc độ BAUD có phần trăm sai số hơn 1% không nên sử dụng:
Bảng 6.1 Bảng các tốc độ BAUD thông dụng
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 11• Thanh ghi tốc độ BAUD – UBRR
Thanh ghi UBRR là thanh ghi 8 bit qui định tốc độ BAUD
6.3 CÁC LỆNH CỦA AT90S2313 SỬ DỤNG TRONG LUẬN VĂN
ADC – Cộng với cờ Carry
Cộng hai thanh ghi với cờ C, sau đó kết quả được lưu vào thanh ghi đích Rd
Số byte 2
Số chu kỳ 1
Mã đối tượng 0001 11rd dddd rrrr
Cú pháp
ADC Rd, Rr (0 ≤ d ≤ 31, 0 ≤ r ≤ 31) Hoạt động
Rd ← Rd+Rr+C Các cờ ảnh hưởng Z, C, N, V, H
ADIW – Cộng trực tiếp 1 thanh ghi 16bit với một số
Cộng một cặp thanh ghi với một số từ 0-63, kết quả lưu vào cặp thanh ghi Lệnh này dùng cho 4 cặp thanh ghi cao nhất
Số byte 2
Số chu kỳ 2
Mã đối tượng 1001 0110 KKdd KKKK
Cú pháp
ADIW Rd+1:Rd, K (d ∈ {24,26,28,30}, 0≤ K ≤ 63) Hoạt động
Rd+1:Rd ← Rd+1:Rd + K Các cờ ảnh hưởng Z, C, N, V, S
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 12AND – And logic
Thực hiện phép and logic nội dung giữa hai thanh ghi Rd và Rr, kết quả lưu vào thanh ghi Rd
Số byte 2
Số chu kỳ 1
Mã đối tượng 0010 00rd dddd rrrr
Cú pháp
AND Rd, Rr (0 ≤ d ≤ 31, 0 ≤ r ≤ 31) Hoạt động
Rd ← Rd * Rr Các cờ ảnh hưởng Z, N, V
BREQ – Nhảy nếu bằng
Lệnh này sẽ thực hiện nếu cờ Z được set
Số byte 2
Số chu kỳ 1/2
Mã đối tượng 1111 00kk kkkk k001
Cú pháp
BREQ k (-64 ≤ k ≤ 63) Hoạt động
If Rd=Rr (Z=1) then PC← PC+k+1, else PC ← PC+1
BRNE – Nhảy nếu không bằng
Lệnh này sẽ được thực hiện nếu cờ Z được reset
Số byte 2
Số chu kỳ 1/2
Mã đối tượng 1111 01kk kkkk k001
Cú pháp
BRNE k (-64 ≤ k ≤ 63) Hoạt động
If Rd≠Rr (Z=0) then PC← PC+k+1, else PC ← PC+1
BRCS – Nhảy nếu cờ Carry được set
Lệnh này sẽ thực hiện khi cờ Carry được set
Số byte 2
Số chu kỳ 1/2
Mã đối tượng 1111 00kk kkkk k000
Cú pháp
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 13BRCS k (-64 ≤ k ≤ 63) Hoạt động
If C=1 then PC← PC+k+1, else PC ← PC+1
CP – So sánh
So sánh nội dung thanh ghi Rd và Rr Lệnh này không làm thay đổi nội dung thanh ghi
Số byte 2
Số chu kỳ 1
Mã đối tượng 0001 01rd dddd rrrr
Cú pháp
CP Rd, Rr (0 ≤ d ≤ 31, 0 ≤ r ≤ 31) Hoạt động
Rd - Rr Các cờ ảnh hưởng Z, C, N, V, H
CPI – So sánh
So sánh nội dung thanh ghi Rd với một hằng số K Lệnh này không làm thay đổi nội dung thanh ghi
Số byte 2
Số chu kỳ 1
Mã đối tượng 0011 KKKK dddd KKKK
Cú pháp
CPI Rd, K (16 ≤ d ≤ 31, 0 ≤ K ≤ 255) Hoạt động
Rd - K Các cờ ảnh hưởng Z, C, N, V, H
CPSE – So sánh và bỏ qua nếu bằng
So sánh nội dung thanh ghi Rd và Rr, và bỏ qua lệnh kế tiếp nếu Rd=Rr Lệnh này không làm thay đổi nội dung thanh ghi
Số byte 2
Số chu kỳ 1/2
Mã đối tượng 0001 00rd dddd rrrr
Cú pháp
CPSE Rd, Rr (0 ≤ d ≤ 31, 0 ≤ r ≤ 31) Hoạt động
If Rd = Rr then PC ← PC + 2 (hoặc 3), else PC ← PC + 1
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 14IN – Lưu giá trị của một vị trí I/O vào thanh ghi
Lưu dữ liệu từ một thiết bị xuất nhập (như Port, Timer…) vào thanh ghi Rd
Số byte 2
Số chu kỳ 1
Mã đối tượng 1011 0AAd dddd AAAA
Cú pháp
IN Rd,A (0 ≤ d ≤ 31, 0 ≤ A ≤ 63) Hoạt động
Rd ← I/O(A)
LD – Nạp gián tiếp nội dung vào thanh ghi thông qua thanh ghi con trỏ (X, Y, Z)
Nội dung các thanh ghi con trỏ X, Y, Z có thể không đổi hoặc có thể tăng hoặc giảm một đơn vị sau khi lệnh được thực thi Chú ý rằng chỉ có nội byte thấp của thanh ghi được cập nhật, còn byte cao thì không
Số byte 2
Số chu kỳ 2
Mã đối tượng
Khi sử dụng thanh ghi con trỏ X
Khi sử dụng thanh ghi con trỏ Y
Khi sử dụng thanh ghi con trỏ Z
Cú pháp
(1) LD Rd, X ( 0 ≤ d ≤ 31)
(2) LD Rd, X+ ( 0 ≤ d ≤ 31)
(3) LD Rd, -X ( 0 ≤ d ≤ 31)
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 15(4) LD Rd, Y ( 0 ≤ d ≤ 31)
(5) LD Rd, Y+ ( 0 ≤ d ≤ 31)
(6) LD Rd, -Y ( 0 ≤ d ≤ 31)
(7) LD Rd, Z ( 0 ≤ d ≤ 31)
(8) LD Rd, Z+ ( 0 ≤ d ≤ 31)
(9) LD Rd, -Z ( 0 ≤ d ≤ 31)
Hoạt động
(1) Rd ← (X) (2) Rd ← (X) X ← X+1 (3) X ← X-1 Rd ← (X)
Cơ chế hoạt động tương tự với Y và Z
LDI – Nạp giá trị trực tiếp
Nạp một hằng số 8-bit trực tiếp vào thanh ghi từ 16 đến 31
Số byte 2
Số chu kỳ 1
Mã đối tượng 1110 KKKK dddd KKKK
Cú pháp
LDI Rd, K (16 ≤ d ≤ 31, 0 ≤ K ≤ 255) Hoạt động
Rd ← K
MOV – Sao chép thanh ghi
Lệnh này sao chép nội dung của thanh ghi Rr vào thanh ghi Rd Thanh ghi Rr không thay đổi trong khi thanh ghi Rd được lưu giá trị của thanh ghi Rr
Số byte 2
Số chu kỳ 1
Mã đối tượng 0010 11rd dddd rrrr
Cú pháp
MOV Rd,Rr (0 ≤ d ≤ 31, 0 ≤ r ≤ 31) Hoạt động
Rd ← Rr
ORI – Or với một hằng số
Thực hiện phép OR logic giữa một thanh ghi Rd và một hằng số, kết quả lưu vào thanh ghi Rd
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng