Các lệnh chương trình con... Block DiagramCPU On-chip RAM On-chip ROM for program code 4 I/O Ports Timer 0 Serial Port OSC TxD RxD P0 P1 P2 P3 Address/Data Counter Inputs... Cấu trú
Trang 1• Phần 1
Microprocessors course
Phạm Thế Duy
(ptduy@yahoo.com)
Trang 2Nội dung:
Giới Thiệu Chung
Sơ đồ khối và mô tả các tín hiệu của 8051
Các thanh ghi
Các lệnh cơ bản của 8051.
Cấu trúc ngôn ngữ Assembly và chạy các chương trình 8051.
Bản đồ bộ nhớ của 8051.
Các bit cờ và thanh ghi PSW của 8051.
Các chế độ địa chỉ của 8051.
Các phép tính số học và BCD 16 bit.
Ngăn xếp của 8051
Các lệnh LOOP và JUMP.
Các lệnh chương trình con.
Lập trình cho các cổng vào ra.
Trang 3Giới thiệu
CPU
Bộ vi xử lý
Port Timer
Serial COM Port Data Bus
Address Bus Hệ thống vi xử lý đa dụng
• CPU thực hiện các lệnh điều khiển hoạt động của toàn bộ hệ thống.
• Không có các bộ nhớ RAM, ROM, và các vào ra trong CPU.
• Bộ nhớ và vào ra là các chip riêng biệt.
• Ví dụ : Intel’s x86, Motorola’s 680x0
Nhiều chip kết nối với nhau
Hệ thống vi xử lý đa dụng
Control Bus
Trang 4Bộ vi điều khiển
• Là một hệ thống vi xử lý nhỏ được kết nối sẵn trong một IC
• CPU, RAM, ROM, I/O cùng nằm trong một CHIP
• Ví dụ : Motorola’s 6811, Intel’s 8051, Zilog’s Z8 and PIC 16X
Một Chip
Bộ vi điều khiển :
ROM
I/O Port Timer Serial Port CPU
Power Monitoring
Trang 5Vi Xử Lý
• CPU, ROM, RAM và các
vào ra là các IC riêng
• Người thiết kế có thể quyết
định dung lượng ROM,
RAM và cổng vào ra.
• Giá thành cao.
• Có thể sử dụng cho nhiều
ứng dụng khác nhau.
Vi Điều Khiển
• CPU, RAM, ROM, I/O và
timer nằm trên cùng một chip
• Dung lượng ROM, RAM và số lượng vào ra là cố định
• Thường sử dụng cho các ứng dụng có giá thành hạ, tiêu thụ công suất ít và chiếm diện tích nhỏ
• Thường sử dụng cho các ứng dụng đơn giản
So sánh giữa Vi Xử Lý và Vi Điều Khiển
Trang 6• Hệ thống nhúng là hệ thống vi xử lý được nhúng vào các ứng dụng cụ thể.
• Một hệ thống nhúng sử dụng các bộ vi xử lý hoặc vi điều khiển nhưng chỉ thực hiện một nhiệm vụ duy nhất
• Trong các hệ thống nhúng thông thường chỉ có một phần mềm ứng dụng duy nhất, thông thường được nạp vào ROM
• Ví dụ : Máy in, bàn phím, card trò chơi
Hệ thống nhúng
Trang 71 Phối hợp giữa ba yếu tố: hiệu suất tính toán, hiệu quả thực hiện
nhiệm vụ và giá thành hệ thống
• Tốc độ, dung lượng ROM và RAM, số lượng cổng vào ra, các
loại cổng vào ra, số lượng Timer, kích thước, kiểu chân IC, công suất tiêu thụ
• Dễ dàng nâng cấp khi cần
• Giá thành mỗi IC.
2 Các công cụ phần mềm sẵn có
• Các phần mềm hợp dịch (Assemblers), Các phần mềm gỡi
rối (debuggers), Các phần mềm biên dịch C (C compilers), Phần mềm chạy thử (emulator), Phần mềm mô phỏng
(simulator), hỗ trợ kỹ thuật (technical support)
3 Có sẵn trên thị trường và có nguồn cung cấp tin cậy
Ba yếu tố để lựa chọn một bộ vi điều khiển.
Trang 8Block Diagram
CPU
On-chip RAM
On-chip ROM for program code
4 I/O Ports
Timer 0
Serial Port OSC
TxD RxD
P0 P1 P2 P3
Address/Data
Counter Inputs
Trang 9Đặc tính 8051 8052 8031
ROM (program space in bytes) 4K 8K 0K RAM (bytes) 128 256 128
Timers 2 3 2
I/O pins 32 32 32
Serial port 1 1 1
Interrupt sources 6 8 6
So sánh các vi điều khiển trong họ 8051
Trang 11Các tín hiệu của 8051
PDIP/Cerdip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1
(T0)P3.4 (T1)P3.5
XTAL2 XTAL1 GND
(INT0)P3.2 (INT1)P3.3
(RD)P3.7 (WR)P3.6
Vcc P0.0(AD0 )P0.1(AD1) P0.2(AD2 )P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) EA/VPP ALE/PROG PSEN
P2.7(A15) P2.6(A14 )P2.5(A13 )P2.4(A12 )P2.3(A11 )P2.2(A10) P2.1(A9) P2.0(A8)
8051 (8031)
Trang 12Pins of 8051 ( 1/4 )
• Vcc ( pin 40 ):
– Vcc cung cấp nguồn cho hoạt động của 8051
– Nguồn cần cung cấp là +5V
• GND ( pin 20 ): ground
• XTAL1 và XTAL2 ( pins 19,18 ):
– Là 2 chân nối linh kiện cung cấp nguồn Clock bên ngoài.– Cách 1 : sử dụng bộ dao động thạch anh
– Cách 2 : Sử dụng các bộ tạo dao động TTL
– Ví dụ 7-1 cho thấy quan hệ giữ XTAL và chu kỳ máy của vi điều khiển
Trang 13Pins of 8051 ( 2/4 )
• RST ( pin 9 ): reset
– Là ngõ vào tác động mức cao ( bình thường mức thấp )
• Tín hiệu này cần phải ở mức cao trong ít nhất 2 chu kỳ máy.– Reset khi bật nguồn
• Khi cung cấp xung mức cao tới chân RST, bộ vi điều khiển sẽ được Reset giá trị trong RAM và các thanh ghi sẽ bị mất
• Giá trị của các thanh ghi 8051 sau khi reset
– Cách 1 : Dùng mạch Power – on reset
– Way 2 : Dùng mạch Power-on reset và nút reset
Trang 14Pins of 8051 ( 3/4 )
• /EA ( pin 31 ): External Access (truy cập bộ nhớ ngoài)
– Các vi điều khiển 8031 và 8032 không có ROM nội
– /EA nối tới GND chỉ thị chương trình được chứa trong bộ nhớ ngoài
– /PSEN & ALE sử dụng cho việc truy cập bộ nhớ ROM ngoài.– Với 8051, /EA thường được nối tới Vcc
– “/” nghĩa là tác động mức thấp
• /PSEN ( pin 29 ): program store enable (Cho phép bộ nhớ chương trình)
– Tín hiệu ra này dùng nối tời chân OE của bộ nhớ ROM
– Xem thêm về giao tiếp bộ nhớ ngoài 14
Trang 15Pins of 8051 ( 4/4 )
• ALE ( pin 30 ): address latch enable (cho phép cài địa chỉ)
– Là tín hiệu ra tác động mức cao
– Port 0 của 8051 sử dụng cho cả dữ liệu và địa chỉ
– ALE sử dụng để de-multiplexing địa chỉ và dữ liệu bằng cách nối tới chân G của bộ cài (ví dụ 74LS373)
• Các chân vào ra song song
– Có 4 cổng song song P0, P1, P2, và P3
– Mỗi cổng có 8 chân
– Tất cả các chân vào ra song song đều hai chiều
Trang 16Hình 7-2 (a) Nối thạch anh cho 8051
• Sử dụng bộ dao động thạnh anh.
• Có thể quan sát được dao động trên chân XTAL2.
Trang 17Hình 7-2 (b) Sử dụng nguồn tạo dao động bên ngoài
N C
EXTERNAL OSCILLATOR SIGNAL
XTAL2
XTAL1 GND
• Sử dụng bộ tạo dao động TTL
• XTAL2 bỏ trống.
Trang 19Giá trị các thanh ghi 8051 sau khi RESET:
0000 DPTR
0007 SP
0000 PSW
0000 B
0000 ACC
0000 PC
Giá trị sau Reset Các thanh ghi
Tất cả các ô nhớ RAM bằng 0
Trang 20Hình 7-3 (a) Mạch Power-On RESET
30 pF
30 pF 8.2 K
X2 RST
31 19
18 9
Trang 21Hình 7-3 (b) Power-On RESET có nút Reset
EA/VPP X1
X2 RST
Trang 22Tín hiệu các cổng song song
• 8051 có 4 cổng vào ra song song
• Ví dụ : P0.0 là bit 0 ( LSB ) của P0
• Ví dụ : P0.7 là bit 7 ( MSB ) của P0
• 8 bits tạo thành 1 byte
• Mỗi cổng có thể sử dụng làm ngõ ra hoặc vào (bi-direction)
Trang 23Các thanh ghi
Các thanh ghi 16 bit của 8051
Các thanh ghi 8 bit của
8051
Trang 24Một số lệnh cơ bản của 8051
MOV A,#72H ;A=72H
MOV A,#72H ≠ MOV A,72H
Sau lệnh “MOV A,72H ” nội dung ô nhớ 72 của RAM sẽ chép vào thanh chứa
MOV AL,72H MOV A,#72H
MOV AL,’r’ MOV A,#’r’
Trang 25ADD A, Source ;A=A+SOURCE
ADD A,#6 ;A=A+6
ADD A,R6 ;A=A+R6
ADD A,6 ;A=A+[6] or A=A+R6
ADD A,0F3H ;A=A+[0F3H]
Trang 26SETB bit ; bit=1
SETB P0.0 ;bit 0 của P0 =1
SETB P3.7 ;bit 7 của P3 =1
SETB ACC.2 ;bit 2 của ACCUMULATOR =1
SETB 05 ;lập bit D5 của RAM tại địa chỉ 20h
Trang 27Tuesday, August 27, 20
8051
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.2 P1.0
Trang 28SUBB A,source ;A=A-source-CY
SETB C ;CY=1
SUBB A,R5 ;A=A-R5-1
ADC A,source ;A=A+source+CY
ADC A,R5 ;A=A+R5+1
Trang 29DEC byte ;byte=byte-1
NOP & RET & RETI
Giống như các lệnh 8086.
CALL
Trang 31Cấu trúc chương trình hợp ngữ
và quá trình dịch hợp ngữ
ASSEMBLER PROGRAM
LINKER PROGRAM
OH PROGRAM
Trang 32Bản đồ bộ nhớ của 8051
• Bản đồ bộ nhớ ROM
Trang 33• Định vị không gian bộ nhớ RAM của 8051
Trang 34Các bit cờ trong thanh ghi PSW
Parity flag Set/Reset odd/even parity
RS1 RS0 Register Bank Địa chỉ
Trang 35Các lệnh ảnh hưởng tới các cờ trạng thái:
Note: X can be 0 or 1
Trang 369C 10011100 +64 +01100100 -
100 00000000 CY=1 AC=1 P=0
Trang 37Các chế độ địa chỉ
• Immediate (Tức thời)
• Register (Thanh ghi)
• Direct (Trực tiếp)
• Register Indirect (Gián tiếp thanh ghi)
• Indexed (Chỉ số)
Trang 38Immediate Addressing Mode
Trang 39Register Addressing Mode
Trang 40Direct Addressing Mode
Mặc dù tất cả 128 byte RAM đều có thể truy cập bằng chế độ địa chỉ trực tiếp, Tuy nhiên, để tránh nhầm lẫn chế độ địa chỉ này chỉ sử dụng cho các địa chỉ 30 – 7FH.
Các thanh ghi SFR và địa chỉ của chúng.
MOV 0F0H, R2; ≡ MOV B, R2
Bit Addressable Page 359,360
Trang 41Register Indirect Addressing Mode
• Trong chế độ này thanh ghi được sử dụng như một con trỏ dữ liệu
MOV A,@Ri ; chép nội dung bộ nhớ RAM có địa chỉ chứa trong Ri vào A
MOV R0,#37h ; Con trỏ nguồn
MOV R1,#59h ; con trỏ đích
MOV R2,#10 ; Số đếm
Trang 42Indexed Addressing Mode And On-Chip
ROM Access
• Chế độ địa chỉ này được sử dụng để truy cập một
phần tử dữ liệu trong bảng dữ liệu chứa trong bộ nhớ chương trình (ROM) của 8051.
Trang 43Chú ý: Ký tự kết thúc “NULL” = 0 được sử dụng để xác định kết thúc chuỗi dữ liệu cần chuyển, lệnh JZ sử dụng điều kiện kết thúc chuỗi để kết thúc vòng lặp.
Trang 44MOV P1,A L01:
MOV A,P1 MOVC A,@A+DPTR
Trang 45Các phép tính số học, BCD và các phép tính 16 bit của 8051
Bài tập:
Viết chương trình cộng n số 16 bit Với n được lấy từ P1 Gửi kết quả tới LCD.
a) Theo số Hex
b) Theo số thập phân.
Viết chương trình trừ giá trị P1 đi giá trị P0, giử kết quả tới LCD
(Giả sử lệnh “ACAL DISP” hiển thị giá trị trong
A lên LCD ).
Trang 46MUL & DIV
Trang 47Ngăn xếp của 8051
• Thanh ghi địa chỉ sử
dụng để truy cập ngăn
xếp được gọi là con trỏ
ngăn xếp SP (stack
pointer).
• Thanh ghi SP của 8051
có 8 bit, nghĩa là giá trị
của nó từ 00 tới FFH
Khi bật nguồn SP = 7.
7FH
30H 2FH
20H 1FH
17H 10H 0FH 07H 08H 18H
( Stack )
Register
Bank 1 Register Bank 2 Register Bank 3 Bit-Addressable RAM Scratch pad RAM
Trang 48Ví dụ:
MOV R6,#25H MOV R1,#12H MOV R4,#0F3H PUSH 6
PUSH 1 PUSH 4
Trang 49Các lệnh LOOP và JUMP
AGAIN: ADD A,#03
DJNZ R2,AGAIN ;lặp lại cho đến khi R2=0 (10 lần)
MOV R5,A
Trang 50• Các lệnh nhảy khác
Trang 51SJMP và LJMP:
LJMP(long jump) -Nhảy xa
LJMP là một lệnh nhảy không điều kiện Nó là lệnh nhảy 3 byte, byte đầu là opcode, hai byte kế tiếp là địa chỉ 16 bit của vị trí mà điều khiển chương trình sẽ chuyển tới sau lệnh nhảy Hai byte này cho phép điều khiển chương trình được chuyển trong khoảng từ 0000 tới FFFFH.
SJMP(short jump) – Nhảy gần
Đây là một lệnh hai byte Byte đầu là opcode và byte thứ 2 là khoảng cách từ lệnh nhảy tới vị trí cần chuyển tới Byte
khoảng các có giá trị từ 00-FFH, nên vị trí cần chuyển tới sẽ cách lệnh nhảy trong khoảng -128 to +127 bytes.
Trang 52CJNE , JNC
Bài tập:
Viết chương trình so sánh giá trị trong hai thanh ghi R0,R1.
Nếu R0>R1 thì gởi 1 tới P2,
Nếu R0<R1 thì gởi 0FFh tới P2,
else (R0=R1) gởi 0 tới P2.
Trang 53Các lệnh CALL
Các lệnh CALL là các lệnh điều khiển chương trình sử dụng cho việc gọi chương trình con.
• LCALL(long call)- Gọi xa.
Đây là một lệnh 3-byte, byte đầu tiên là
opcode, 2 byte còn lại là địa chỉ của chương trình con cần chuyển tới Do đó lệnh LCALL có thể gọi chương trình con ở bất cứ vị trí nào trong vùng nhớ 64KB của 8051.
Trang 54• ACALL (absolute call) – Gọi tuyệt
đối.
ACALL là một lệnh 2 byte trong đó 11 bit sử dụng chỉ thị địa chỉ đích cần chuyển tới Như vậy khác với lệnh LCALL, lệnh
ACALL chỉ chuyển tới được vị trí nằm
trong khoảng 2KB.
Trang 55Lập trình cổng vào ra song song
– P1 sử dụng là cổng ra (CPU ghi dữ liệu tới các
chân bên ngoài)
– P1 sử dụng làm cổng vào (CPU đọc dữ liệu từ các chân bên ngoài vào)
Trang 56Cấu tạo 1 chân của cổng 1
8051 IC
D Q Clk Q
Vcc
Load(L1) Read latch
TB1
TB2
P0.x
Trang 57Hardware Structure of I/O Pin
• Mỗi chân của cổng vào ra song song bao gồm:
– Bên trong CPU : Nối tới BUS dữ liệu của CPU.
– Một bộ cài D chứa giá trị của chân.
• Bộ cài được điều khiển bằng “Write to latch”
– Write to latch = 1 : dữ liệu được ghi tới bộ cài – 2 Hai bộ đệm 3 trạng thái :
• TB1: điều khiển bằng “Read pin”
– Read pin = 1 : đọc giá trị đang có ở chân vào ra.
• TB2: điều khiển bằng “Read latch”
– Read latch = 1 : Đọc trạng thái cổng cài bên trong – Một transistor M1 điều khiển bằng gate.
• Gate=0: Transistor không dẫn.
• Gate=1: Transistor dẫn.
Trang 58Tri-state Buffer
Tri-state control (active high)
Highimpedance (open-circuit)
H H
Trang 59Ghi “1” Tới chân ra P1.X
D Q Clk Q
Vcc
Load(L1) Read latch
Trang 60Ghi “0” tới chân ra P1.X
D Q Clk Q
Vcc
Load(L1) Read latch
8051 IC
2 output pin is ground
1 write a 0 to the pin
0
TB1 TB2
Trang 61Sử dụng Port 1 làm ngõ ra ( Ghi dữ
liệu tới Port )
• Gửi dữ liệu tới Port 1 :
MOV A,#55H ;01010101B BACK: MOV P1,A
ACALL DELAY CPL A
Trang 62Đọc chân ngõ vào và đọc cổng cài
• Khi đọc cổng sẽ có 2 khả năng xảy ra :
– Đọc trạng thái của chân vào ( Giá trị từ chân bên ngoài )
• MOV A, PX
• JNB P2.1, TARGET ; Nhảy nếu P2.1 không set (bằng 0)
• JB P2.1, TARGET ; Nhảy nếu P2.1 =1
• Hình C-11, C-12 – Đọc từ bộ cài bên trong của cổng ra.
Trang 63Đọc mức cao từ một chân vào
D Q Clk Q
Vcc
Load(L1) Read latch
8051 IC
2 MOV A,P1 external pin=High
1 write a 1 to the pin MOV
Trang 64Đọc mức thấp từ một chân vào
D Q Clk Q
Vcc
Load(L1) Read latch
8051 IC
2 MOV A,P1 external pin=Low
1 write a 1 to the pin
Trang 65Khởi động cổng 1 là ngõ vào- đọc dữ
liệu từ cổng
• Để khởi động P1 là ngõ vào cần phải lập trình ghi bit 1 tới tất cả các bit.
MOV A,#0FFH ;A=11111111B MOV P1,A ;Khởi động cổng 1 là ngõ vào BACK: MOV A,P1 ;lấy dữ liệu từ cổng 1
MOV P2,A ;gởi dữ liệu tới P2 SJMP BACK
– Các cổng khác cũng được khởi động tương tư.
Trang 66Các lệnh đọc từ chân bên ngoài cổng
MOV A,PX MOV A,P2 Bring into A the data at P2 pins
JNB PX.Y, JNB P2.1,TARGET Jump if pin P2.1 is low
JB PX.Y, JB P1.3,TARGET Jump if pin P1.3 is high
MOV C,PX.Y MOV C,P2.4 Copy status of pin P2.4 to CY
Trang 67Đọc bộ cài của cổng
• Thực hiện logic OR giá trị Port 1 :
2 CPU thực hiện phép toán ORL.
• Dữ liệu đọc từ bộ cài sẽ được OR với giá trị #0F0H
Các bit OR với 1 sẽ bằng 1.
3 Giá trị trong bộ cài sẽ được thay đổi ( modified)
• Bộ cài của P1.7 – P1.4 có giá trị bằng 1.
4 Ghi (Write) kết quả tới chân bên ngoài.
• Các chân bên ngoài P1 (P1.7 – P1.4) có giá trị bằng 1.
Trang 68Đọc dữ liệu từ bộ cài
D Q Clk Q
Vcc
Load(L1) Read latch
1 Read pin=0 Read latch=1 Write to
latch=0 (Assume P1.X=0 initially)
1
TB1
TB2
3 write result to latch Read
pin=0 Read latch=0
Write to latch=1
1 0
Trang 69Đặc tính Read-modify-write
• Các lệnh Read-modify-write
– Bảng C-6
• Đặc tính này kết hợp 03 công việc trong cùng một lệnh :
1 CPU đọc dữ liệu từ bộ cài của cổng.
2 CPU thực hiện lệnh với dữ liệu vừa đọc.
3 Thay đổi dữ liệu của bộ cài.
4 Ghi tới chân bên ngoài.