intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Vi xử lý: Chương 3 - Nguyễn Lý Thiên Trường

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:28

1
lượt xem
0
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Vi xử lý" Chương 3 - Tập lệnh AVR, được biên soạn gồm các nội dung chính sau:Giới thiệu; Các phương pháp định vị địa chỉ; Các nhóm lệnh;...Mời các bạn cùng tham khảo!

Chủ đề:
Lưu

Nội dung Text: Bài giảng Vi xử lý: Chương 3 - Nguyễn Lý Thiên Trường

  1. Chương 3 Tài liệu tham khảo: Tập lệnh AVR 1. Chương 3: Tập lệnh AVR (Giáo trình VXL) 2. AVR Instruction Set 3. Muhammad Ali Mazidi, AVR Microcontroller and Embedded Systems: Using Assembly and C, Pearson New International Edition, 2014. 4. Datasheet ATmega324P 5. https://nicerland.com/avr/ 6. http://www.hocavr.com/ 7. https://www.youtube.com/watch?v=Fr2K9pzec8g&list=PLgwJf8NK- 2e55CdbY_WnY6pejPHoojCkJ Nguyễn Lý Thiên Trường 1
  2. 3.1 Giới thiệu 3.2 Các phương pháp định vị địa chỉ 3.3 Các nhóm lệnh Nguyễn Lý Thiên Trường 2
  3. 3.1 Giới thiệu ▪ Các lệnh của vi điều khiển AVR được truy xuất theo từ (word). ▪ Mỗi word (2 byte) mã máy được cất trong bộ nhớ chương trình (Flash ROM) theo kiểu Little endian (tức là byte cao được lưu ở địa chỉ cao, byte thấp được lưu ở địa chỉ thấp). ▪ Đa số các lệnh có mã máy dài 2 byte, một số lệnh dài 4 byte. ▪ Thời gian thực thi cho mỗi lệnh đa số là 1, 2 chu kỳ máy (MC) và một số lệnh 3, 4 chu kỳ máy. ▪ Với mỗi chip vi điều khiển khác nhau thuộc họ AVR sẽ có một chút khác biệt có thể là về phần cứng cũng như tập lệnh đi kèm, do đó khi sử dụng một chip cụ thể nào chúng ta cần phải tham khảo datasheet tương ứng. Nguyễn Lý Thiên Trường 3
  4. 3.1 Giới thiệu ▪ Little endian và Big endian. Nguyễn Lý Thiên Trường 4
  5. 3.2 Các phương pháp định vị địa chỉ ▪ Tổng cộng có 15 phương pháp định địa chỉ khác nhau. Có thể chia thành 8 nhóm như sau: • Định địa chỉ thanh ghi đơn. • Định địa chỉ thanh ghi (cả 2 toán hạng đều là thanh ghi). • Định địa chỉ trực tiếp bộ nhớ SRAM. • Định địa chỉ gián tiếp bộ nhớ SRAM (qua thanh ghi con trỏ). • Định địa chỉ trực tiếp bộ nhớ FLASH. • Định địa chỉ gián tiếp bộ nhớ FLASH (qua thanh ghi con trỏ). • Định địa chỉ tương đối. • Định địa chỉ bit. Nguyễn Lý Thiên Trường 5
  6. 3.2 Các phương pháp định vị địa chỉ ▪ Các ký hiệu dùng trong phương pháp định địa chỉ và tập lệnh: Thanh ghi trạng thái SREG và các bit trong thanh ghi Các thanh ghi và toán hạng trong lệnh SREG: thanh ghi trạng thái Rd: thanh ghi đích/nguồn trong tập thanh ghi Rr: thanh ghi nguồn trong tập thanh ghi R: kết quả sau khi thực thi lệnh C: Cờ Carry Z: Cờ Zero K: hằng số dữ liệu N: Cờ âm k: hằng số địa chỉ V: Cờ tràn bù 2 S: Cờ dấu (S = N ⊕ V) b: bit trong tập GPRs hoặc I/O REGs (3-bit) H: Cờ nhớ phân nửa s: Bit trong SREG (3-bit) T: bit sao chép sử dụng trong các lệnh BLD và BST I: Cờ cho phép/không cho phép ngắt toàn cục X,Y,Z: Thanh ghi địa chỉ gián tiếp (con trỏ). Hằng số và nội dung ô nhớ X=R27:R26, Y=R29:R28, Z=R31:R30 A: hằng số dữ liệu A hay ô nhớ có địa chỉ là A P: địa chỉ các I/O REGs cơ bản (I/O chuẩn). (A): nội dung ô nhớ có địa chỉ là A q: độ dời hoặc địa chỉ trực tiếp (6-bit) Nguyễn Lý Thiên Trường 6
  7. 3.2.1 Định địa chỉ thanh ghi đơn ▪ Phương pháp này gồm có 2 kiểu tùy theo các toán hạng được sử dụng trong lệnh: toán hạng chỉ là một thanh ghi đơn, hay 1 thanh ghi với 1 giá trị tức thời K. ▪ Đối với phương pháp có toán hạng chỉ là một thanh ghi đơn sẽ dùng 11 bit cho opcode và 5 bit để mã hóa cho vị trí của Rd (0d31). Cấu trúc mã lệnh với toán hạng chỉ là 1 thanh ghi đơn: Ví dụ: INC R2; tăng nội dung thanh ghi R2 lên 1 NEG R16; tính bù 2 nội dung thanh ghi R16 Lưu ý: lệnh CLR Rd Mã máy: có cấu trúc mã máy INC R2; 0x9423 [0b1001 0100 0010 0011] như lệnh EOR Rd,Rd NEG R16; 0x9501 [0b1001 0101 0000 0001] (xem tập lệnh). Nguyễn Lý Thiên Trường 7
  8. Ví dụ: INC R2; tăng nội dung thanh ghi R2 lên 1 Mã máy: 0x9423 [0b1001 0100 0010 0011] ATmega Instruction Set Nguyễn Lý Thiên Trường 8
  9. ATmega Instruction Set Nguyễn Lý Thiên Trường 9
  10. 3.2.1 Định địa chỉ thanh ghi đơn ▪ Phương pháp định địa chỉ thanh ghi đơn với một giá trị tức thời (hằng số 8 bit) sử dụng 4 bit cho opcode, 4 bit cho Rd (16d31) và 8 bit cho dữ liệu K (Nhị phân, thập phân, thập lục phân, mã ASCII). Cấu trúc mã lệnh với toán hạng là 1 thanh ghi với giá trị tức thời: 12 11 Ví dụ: I = Immediate: tức thời Nếu K là Lưu ý: chỉ được phép LDI R16,200; R16 = 200 số âm thì sử dụng với các thanh SUBI R28,0x20; R28  R28 - 20H K ≥ −256 ghi từ R16÷R31 → được Mã máy: mã hóa bằng 4 bit nhị LDI R16,200; 0xEC08 [0b1110 1100 0000 1000] phân có giá trị tương SUBI R28,0x20; 0x52C0 [0b0101 0010 1100 0000] ứng từ 0÷15. Nguyễn Lý Thiên Trường 10
  11. 3.2.2 Định địa chỉ thanh ghi (cả 2 toán hạng) ▪ Phương pháp định địa chỉ thanh ghi sử dụng trong câu lệnh có 2 toán hạng là các thanh ghi Rd và Rr (GPRs). ▪ Thực hiện các thao tác lệnh trên các dữ liệu được đặt trong 2 thanh ghi Rd và Rr, quy ước Rr là toán hạng nguồn, Rd là toán hạng đích, kết quả cất vào Rd. Cấu trúc mã lệnh với cả 2 toán hạng đều là thanh ghi: Ví dụ: MOV R2,R3; R2  R3 ADD R1,R16; R1  R1 + R16 Mã máy: MOV R2,R3; 0x2C23 [0b0010 1100 0010 0011] ADD R1,R16; 0x0E10 [0b0000 1110 0001 0000] Nguyễn Lý Thiên Trường 11
  12. 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM ▪ Dùng để truy xuất trực tiếp đến các thanh ghi I/O và vùng SRAM (Data memory). ▪ Ký hiệu P (0 ≤ P ≤ 63) trong tập lệnh thực hiện trên các toán hạng là các thanh ghi I/O cơ bản, k (0 ≤ k ≤ 8FFH) là địa chỉ các ô nhớ SRAM (toàn bộ bộ nhớ SRAM). ▪ Nếu 60H ≤ k ≤ FFH (thuộc vùng I/O mở rộng): có thể thay bằng tên thanh ghi I/O tương ứng thay vì dùng địa chỉ bộ nhớ (SRAM). ▪ Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn). Thông thường là sử dụng tên thanh ghi I/O thay vì địa chỉ I/O. Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản: Ví dụ: OUT PORTA,R1; PORTA  R1 OUT $02,R1; (02H)  R1 ⇔ PORTA  R1 Mã máy: OUT PORTA,R1; 0xB812 [1011 1000 0001 0010] OUT $02,R1; 0xB812 [1011 1000 0001 0010] Nguyễn Lý Thiên Trường 12
  13. 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM ▪ Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn). Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản: Ví dụ: IN R3,PINB; R3  PINB IN R3,$03; R3  (03H) ⇔ R3  PINB Mã máy: IN R3,PINB; 0xB033 [1011 0000 0011 0011] IN R3,$03; 0xB033 [1011 0000 0011 0011] Nguyễn Lý Thiên Trường 13
  14. 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM ▪ Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng đó là địa chỉ I/O và địa chỉ bộ nhớ (hay địa chỉ mem, địa chỉ dữ liệu). ▪ Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2 phương pháp định địa chỉ khác nhau để thực hiện lệnh (OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã lệnh và thời gian thực thi lệnh khác nhau. Ví dụ: OUT PORTA,R1; PORTA  R1 STS $22,R1; (22H)  R1 Mã máy: OUT PORTA,R1; 0xB812 (2 byte), 1MC STS $22,R1; 0x9210, 0x0022 (4 byte) ; Thời gian thực thi: 2MC Nguyễn Lý Thiên Trường 14
  15. 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM ▪ Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng đó là địa chỉ I/O và địa chỉ dữ liệu (hay địa chỉ bộ nhớ, địa chỉ mem). ▪ Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2 phương pháp định địa chỉ khác nhau để thực hiện lệnh (OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã lệnh và thời gian thực thi lệnh khác nhau. Ví dụ: IN R3,PINB; R3  PINB LDS R3,$23; R3  (23H) Mã máy: IN R3,PINB; 0xB033 (2 byte), 1MC LDS R3,$23; 0x9030, 0x0023 (4 byte), 2MC Nguyễn Lý Thiên Trường 15
  16. 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM ▪ Sử dụng các lệnh STS và LDS để truy cập vùng I/O mở rộng và vùng Data SRAM (2KB). Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O mở rộng và SRAM: Ví dụ: LDS R0,UDR0; R0  UDR0 STS $100,R0; (100H)  R0 Mã máy: LDS R0,UDR0; 0x9000, 0x00C6 STS $100,R0; 0x9200, 0x0100 ➢ Lưu ý: các lệnh STS và LDS dùng để truy cập trực tiếp đến tất cả nội dung SRAM từ 000H đến 8FFH. Nguyễn Lý Thiên Trường 16
  17. 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM ▪ Phương pháp định địa chỉ gián tiếp qua thanh ghi thực hiện trên các lệnh dùng để truy xuất dữ liệu vùng SRAM sử dụng các thanh ghi con trỏ X, Y hoặc Z. ▪ Các thanh ghi X, Y, Z hoạt động như các con trỏ (pointer) và nội dung của các thanh ghi này là địa chỉ của các ô nhớ trong vùng SRAM, nơi mà dữ liệu sẽ được đọc hoặc là ghi. ▪ Phương pháp này được chia ra làm 4 kiểu khác nhau: dữ liệu gián tiếp, dữ liệu gián tiếp với tiền tố trừ (-), dữ liệu gián tiếp với hậu tố cộng (+) và dữ liệu gián tiếp với một độ chuyển dời q (6 bit, 0 ≤ q ≤ 63) thông qua các lệnh LD, LDD, ST, STD. Ví dụ: Để thực hiện việc ghi giá trị 0xCC vào địa chỉ SRAM 0x800 cùng với việc chọn thanh ghi Y làm con trỏ trong phương pháp định địa chỉ này, ta thực hiện các lệnh sau: Bộ nhớ SRAM Gián tiếp: LDI R16,0xCC ;lưu dữ liệu cần ghi vào R16 0x7FF LDI R28,0x00 ;lưu địa chỉ ô nhớ vào Y 0x800 0xCC LDI R29,0X08 ;Y  YH:YL  R29:R28 0x801 ST Y, R16;ghi dữ liệu Trực tiếp? LDI R16,0xCC ;R16 = CCH STS 0x800, R16; (0x800)  R16 Nguyễn Lý Thiên Trường 17
  18. 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi X làm con trỏ. Kết quả lưu vào thanh ghi R7. Bộ nhớ SRAM Gián tiếp: LDI R27,0x08 ;lưu byte cao địa chỉ ô nhớ vào X 0x7FF LDI R26,0x00 ; lưu byte thấp địa chỉ ô nhớ vào X 0x800 0xCC LD R7, X; đọc dữ liệu 0x801 ➢ Lưu ý: Thanh ghi X ≡ XH:XL ≡ R27:R26 LDI XH,0x08 ;lưu byte cao địa chỉ ô nhớ vào X LDI XL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào X LD R7, X; đọc dữ liệu Trực tiếp? LDS R7,0x800; R7  (0x800) Nguyễn Lý Thiên Trường 18
  19. 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM ▪ Phương pháp định địa chỉ gián tiếp với tiền tố trừ (-) thực hiện trong câu lệnh có các toán hạng là các thanh ghi con trỏ với ký hiệu dấu trừ phía trước X, Y, Z (-X, -Y, -Z). ▪ Địa chỉ của các toán hạng được xác định bằng cách lấy nội dung của các con trỏ trừ đi 1 trước khi thực hiện lệnh, và kết quả này sẽ giữ nguyên trong con trỏ sau khi thực hiện xong lệnh. ▪ Lưu ý: hậu tố trừ sau X, Y, Z (X-, Y-, Z-) : sai cú pháp. Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi Z làm con trỏ kết hợp với tiền tố trừ. Kết quả lưu vào thanh ghi R7. Bộ nhớ SRAM Gián tiếp: LDI R31,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z 0x7FF LDI R30,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z 0x800 0xCC LD R7, -Z ;Z  Z - 1, đọc dữ liệu 0x801 ➢ Lưu ý: Thanh ghi Z ≡ ZH:ZL ≡ R31:R30 LDI ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z LDI ZL,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, -Z ;Z  Z - 1, đọc dữ liệu Nguyễn Lý Thiên Trường 19
  20. 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM ▪ Phương pháp định địa chỉ gián tiếp với hậu tố cộng (+) thực hiện trong câu lệnh có các toán hạng là các thanh ghi con trỏ với ký hiệu dấu cộng phía sau X, Y, Z (X+, Y+, Z+). ▪ Phương pháp này thực hiện xong lệnh rồi tăng nội dung con trỏ lên 1. Kết quả này sẽ giữ nguyên trong con trỏ sau khi thực hiện xong lệnh. ▪ Lưu ý: tiền tố cộng trước X, Y, Z (+X, +Y, +Z): sai cú pháp. Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 và 0x801 cùng với việc chọn thanh ghi Z làm con trỏ kết hợp với hậu tố cộng. Kết quả lưu vào thanh ghi R7 và R8 tương ứng. Bộ nhớ SRAM Gián tiếp: 0x7FF 0x2A LDI ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z 0x800 0xCC LDI ZL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, Z+ ;đọc dữ liệu, Z  Z + 1 0x801 0x12 LD R8, Z Nguyễn Lý Thiên Trường 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
19=>1