Kiến trúc 8051 và giới thiệu về ngôn ngữ lập trình Assembly Microcontroller Chapter 2 Ngo Nhu Khoa Department of Computer Engineering ThaiNguyen University of Technology
Các vấn đề chính Kiến trúc bên trong của 8051 Tập các thanh ghi Tập lệnh Bản đồ bộ nhớ Giới thiệu về ngăn xếp, SFRs Ngôn ngữ lập trình Assembly 10/1/2005 2
1. Kiến trúccủa 8051 Quan niệm của người lậptrình Tập thanh ghi Tập lệnh Bản đồ bộ nhớ Quan niệm của người thiếtkế phầncứng Sơ đồchân ra Các đặc trưng về định thời Các yêu cầuvề dòng/áp 10/1/2005 3
2. Tập thanh ghi Các thanh ghi: A, B, R0 đến R7 là các thanh ghi 8 bit DPTR : [DPH:DPL] là thanh ghi 16 bit PC : Con đếm chương trình (con trỏ lệnh -Instruction Ptr) là thanh ghi 16bit 4 tập dãy thanh ghi R0-R7 Thanh ghi con trỏ ngăn xếp SP PSW : Thanh ghi từ trạng thái (các cờ) SFR : Các thanh ghi chức năng đặc biệt Điều khiển các thiết bị ngoại vi trên board 10/1/2005 4
2.1. Các khái niệm cơ bản Định dạng của 1 lệnh Assembly Operation destination source ; comment Các giá trị được đặt trước bởi 1 dấu # VD: #55, #32, Các giá trị hệ 16 được kýhiệu thêm chữ cái H vào cuối. VD: #55H, #32H Nếu kýtựđầutiên của giátrị 16 là 1 chữ cái, thì thêm vào trước nókýtự số 0. VD: #0FFH, #0C1H, #0D2H 10/1/2005 5
2.2. Accumulator A, ACC Thường được sử dụng cho việc dịch chuyển dữ liệu, thực hiện các phép toán số học và logic trên dữ liệu 8 bit. Ví dụ: mov A, R0 push ACC mov A, #10 ;A 10 mov B, A mov A, 10 mov A, 0xFF mov A, 0FFH ;như trên24 ;copy nội dung của R0 vào A ;Cất A vàongăn xếp ;B A ;A mem(10) ;A 0xFF 10/1/2005 6
2.3. B Register Thường được sử dụng như là 1 thanh ghi nháp, có thể xem như thanh ghi thứ 9 trong tập thanh ghi R Được sử dụng trong 2 mã lệnh: mul AB, div AB Thanh ghi B lưu toán hạng thứ 2 và sẽ lưu giữ 1 phần kết quả: 8bits cao của kết quả sau phép nhân Phần dư của phép chia 10/1/2005 7
2.4. R0 to R7 Tập 8 thanh ghi R0, R1, R7, mỗi thanh ghi có độ rộng 8 bit Được sử dụng rộng rãi như là các thanh ghi nháp Có mặt ở cả 4 dãy (effectively 4x8 registers) Mỗi dãy được chọn nhờ thiết lập các bit RS1:RS0 trong thanh ghi từ trangh thái PSW Dãy ngầm định (khi bật nguồn) là dãy 0 (bank0) Ví dụ: mov R0, A ;R0 A mov A, R0 ;A R0 mov R1, #45 ;R1 45 10/1/2005 8
2.5. DPTR Thanh ghi 16 bit, được gọi là con trỏ dữ liệu Được sử dụng bởi cáclệnh truy xuất đến bộ nhớ ngoài Có thể đượcsử dụng để lưu trữ các giá trị 16 bit mov DPTR, #data16 ; setup DPTR with 16bit ext address movx A, @DPTR ; copy mem[dptr] to A Thanh ghi DPTR rất hữu dụng đối với các thao tác trên chuỗi, trên các bảng tra 10/1/2005 9
2.6. PC PC là 1 con đếm chương trình Được xemnhư là con trỏ (IP) trong các bộ vi xử lý khác. PC luôn trỏ đếnlệnh kế tiếp trongchương trình. Sau khi lấy 1 lệnh (1 hoặc nhiều byte), PC tự động được tăng lên để trỏ đếnlệnh kế tiếp 10/1/2005 10
2.7. SP SP là con trỏ ngăn xếp, nó luôn trỏ đến đỉnh của ngăn xếp Lệnh push: làm tăng SP và sau đó copy dữ liệu vào ngăn xếp. Lệnh pop: copy dữ liệu từđỉnh ngăn xếp, sau đó giảm SP Trong 8051, ngăn xếp cóhướng phát triển lên trên (từ vùng thấp đến vùngcaocủa bộ nhớ) và chỉ có thể được đặt trong bộ nhớ RAM nội. Khi bật nguồn, SP có giá trị là 07H Các dãy thanh ghi 2,3 và 4 (08H to 1FH) là vùng ngăn xếp ngầm định. Ngăn xếp cóthểđượccấp phát lại bằng cách thiết lập SP trỏ đến vùng nhớ cao hơn (trong vùng từ 30H đến 7FH): mov SP, #32H 10/1/2005 11
2.8. PSW Thanh ghi từ trạng thái là 1 thanh ghi 8 bit, có thể địa chỉ hoá bit bit addressable, mà các bit của nólàcác cờ. CY - Cờ nhớ (Carry Flag) Được lập khicó1 số nhớ trong phép toán số học AC - Cờ nhớ phụ (Aux. Carry Flag): nhớ từ bit D3 sang bit D4; được sử dụng cho phép toán BCD. P - Cờ chẵn lẻ (Parity Flag): P=1 nếu A có số bit 1 là lẻ. OV - Cờ tràn (Overflow Flag): lập nếu bất kỳ phép toán số học nào gây ra 1 kết quả tràn. 10/1/2005 12
Flags - Illustration Ví dụ phép cộng: mov A, #38h add A, #2Fh 38h 0011 1000 + 2Fh 0010 1111 --------- --------------- 67 0110 0111 --------- --------------- CY = 0 AC = 1 P = 1 10/1/2005 13
2.9. SFRs Điều khiển sự vận hành của các thiết bị ngoại vi trên board Các thanh ghi chức năng đặc biệt ởđịa chỉ trực tiếp 80H đến FFH Các dòng 8051 có thể có thêm các thanh ghi chức năng đặc biệt khác. Tất cả các thanh ghi đều có1 địa chỉ 10/1/2005 14
3. Lược đồ bộ nhớ của 8051 Tách biệt bộ nhớ mã lệnh và dữ liệu Bộ nhớ mã lệnh Lên tới 64K (some maybe onboard) (0x0000 to 0xFFFF) PSEN là tín hiệu điều khiển Chỉ có thể dùng để lưu trữ chương trình (Read only) Bộ nhớ dữ liệu Lên tới 64K (0x0000 to 0xFFFF) RD/WR là các tín hiệu điều khiển Chỉ có thể dùng để lưu trữ dữ liệu (Read and Write) Bộ nhớ RAM nội 128 bytes 0x00 to 0x7F (includes register banks) SFRs 0x80 to 0xFF (not all available) 10/1/2005 15
3. Lược đồ bộ nhớ của 8051( ) 10/1/2005 16
3. Lược đồ bộ nhớ của 8051( ) Memory Type Start End Signal Instruction RAM 0x00 0x7F mov A, xxh mov A, @Ri Data 0x0000 0xFFFF RD, WR movx A, @DPTR Code 0x0000 0xFFFF PSEN movc A,@A+DPTR SFRs 0x80 0xFF mov A, xxh Internal ROM is vendor dependant On power-up PC starts at 0000H in ROM space Clones may have internal memory that may be used as both Code+Data 10/1/2005 17
4. Tập lệnh của 8051 Dịch chuyển dữ liệu - Move/Copy dữ liệu từ vùng này đến vùng khác mov, movc, movx, push, pop, xch, xchd Các lệnh logic thực hiện các phép toán logic trên dữ liệu anl, orl, xrl, clr, cpl, rl, rlc, rr, rrc, swap Các lệnh số học -thực hiện các phép toán số học trên dữ liệu add, addc, subb, inc, dec, mul, div Điều khiển chương trình - điều khiển luồng thực hiện của chương trình (jumps, subroutine calls) jmp, ajmp, ljmp, sjmp, jc, jnc, jb, jnb, jbc, jz, jnz, acall, lcall, cjne, djnz, ret, reti NOP 10/1/2005 18
4. Tập lệnh của 8051 ( ) Đọc qua toàn bộ tập lệnh Không phải nhớ tất cả các lệnh Không phải nhớ tất cả các trường hợp Nhớ các loại lệnh Khi viết chương trình Viết ra các thao tác cần thực hiện (bằng tiếng anh) Tìm kiếm trong tập lệnh để tìm lệnh tương ứng thực hiện các công việc đó 10/1/2005 19
Assembly Opcode Mỗi lệnh assembly dịch thành 1 mã lệnh nhị phân duy nhất Có thể dài 1, 2 hoặc 3 bytes Danh sách các lệnh thường có trong tài liệu hướng dẫn lập trình. Ví dụ 1: mov A, #data 2 bytes, 1 cycles 0111 0100 data8 mov A, 0xAA 0111 0100 1010 1010 74 AA Ví dụ 2: acall address11 a10 a9 a8 1 0001 a7 a6 a5 a4 a3 a2 a1 a0 acall 0x557 1011 0001 0101 0111 B1 57 10/1/2005 20
Những định hướng Assembler Cấu trúc lệnh Assembly: [Nhãn:] mã lệnh [các toán hạng] [; chú thích] [label:] opcode [operands] [;comment] Ví dụ: start: mov A, #D0H ;code starts here Những định hướng chương trình dịch chỉ thỉ cho assembler thực hiện 1 nhiệm vụ riêng biệt ORG xxxxh : origin, bắt đầu chương trình tại xxxxh EQU : định nghĩa 1 hằng Ví dụ: count EQU 25 DB : define byte, định nghĩa cấp phát cho việc lưu trữ DATA1: DB 28 DATA2: DB hello world END : end of assembly file 10/1/2005 21
Assembly Example #1 Target 8051 dev system Std 8051 device 2K on-chip ROM running a monitor program 32K external RAM at address 0x0000 to 0x7FFF This RAM is both code and data First 0x30 locations in external RAM is dedicated for the Interrupt Vector Table (IVT) ORG 0x30 ;skip the IVT area Start: mov R0, #10 mov R1, #0A5H mov R2, #1 mov R3, #0x20 cleara: mov A, #0 ;now A = 0 Addup: add A, R0 ;now A = A + R0 add A, R1 add A, R2 add A, R3 mov R4, A ;store sum in R4 mov DPTR, #7FFF movx @DPTR, A ;store in ext. mem Done: sjmp done ;loop here forever END 10/1/2005 22
Chương 2. Ôn tập What are the different views/models of a up? What are the registers available in the 8051? What are the functions of the 8051 registers? What is stack, PC, SFR, PSW/Flags? What is an instruction set? What is a memory map? Why is it needed? What is an assembly language program? How does it look? 10/1/2005 23