MCS51 là họ IC vi điều khiển do hãng INTEL sản xuất. Các IC tiêu biểu cho họ là 8031, 8051, 8951… Những đặc điểm chính và nguyên tắc hoạt động của các bộ vi điều khiển này khác nhau không nhiều. Khi đã sử dụng thành thạo một vi điều khiển thì ta có thể nhanh chóng vận dụng kinh nghiệm để làm quen và làm chủ các ứng dụng của bộ vi điều khiển khác. Vì vậy để có những hiểu biết cụ thể về các bộ vi điều khiển cũng như để phục vụ cho đề tài này ta bắt đầu tìm hiểu một bộ vi điều khiển thông dụng nhất, đó là họ MCS51 1.2. Sơ đồ khối, sơ đồ chân, chức năng các chân: MCS51 là họ IC vi điều khiển do hãng INTEL sản xuất. Các IC tiêu biểu cho họ là 8031, 8051, 8951… Những đặc điểm chính và nguyên tắc hoạt động của các bộ vi điều khiển này khác nhau không nhiều. Khi đã sử dụng thành thạo một vi điều khiển thì ta có thể nhanh chóng vận dụng kinh nghiệm để làm quen và làm chủ các ứng dụng của bộ vi điều khiển khác. Vì vậy để có những hiểu biết cụ thể về các bộ vi điều khiển cũng như để phục vụ cho đề tài này ta bắt đầu tìm hiểu một bộ vi điều khiển thông dụng nhất, đó là họ MCS51 1.2. Sơ đồ khối, sơ đồ chân, chức năng các chân:
Trang 1CHƯƠNG 1:
CẤU TẠO VI XỬ LÝ 89V51RB21.1 Tóm tắt phần cứng
MCS-51 là họ IC vi điều khiển do hãng INTEL sản xuất Các IC tiêu biểucho họ là 8031, 8051, 8951… Những đặc điểm chính và nguyên tắc hoạt độngcủa các bộ vi điều khiển này khác nhau không nhiều Khi đã sử dụng thành thạomột vi điều khiển thì ta có thể nhanh chóng vận dụng kinh nghiệm để làm quen
và làm chủ các ứng dụng của bộ vi điều khiển khác Vì vậy để có những hiểu biết
cụ thể về các bộ vi điều khiển cũng như để phục vụ cho đề tài này ta bắt đầu tìmhiểu một bộ vi điều khiển thông dụng nhất, đó là họ MCS-51
1.2 Sơ đồ khối, sơ đồ chân, chức năng các chân:
1.2.1 Sơ đồ khối:
1.2.2 Sơ đồ chân:
Trang 21.2.3.Chức năng các chân:
89V51RB2 có 40 chân trong đó 32 chân có công dụng xuất/ nhập Trong
32 chân đó có 24 chân có tác dụng kép (nghĩa là 1 chân có 2 chức năng), mỗi mộtđường có thể hoạt động xuất/ nhập, hoạt động như một đường điều khiển hoặchoạt động như một đường địa chỉ/ dữ liệu của bus địa chỉ/ dữ liệu đa hợp
- Port 3 có chức năng xuất nhập dữ liệu (P3.0 – P3.7) khi không sử dụng
bộ nhớ ngoài hoặc các chức năng đặc biệt
- Port 3 có chức năng là các tín hiệu điều khiển khi sử dụng bộ nhớ ngoàihoặc các chức năng đặc biệt
- Chức năng của các chân port 3:
P3.0 RxD B0H Chân nhận dữ liệu của port nối tiếpP3.1 TxD B1H Chân phát dữ liệu của port nối tiếp
P3.4 T0 B4H Ngõ vào của bộ định thời/ đếm 0
Trang 3P3.7 \RD B7H Điều khiển đọc từ RAM ngoài
Bảng tóm tắt chức năng các chân của Port 3
1.2.5 Các chân tín hiệu điều khiển.
- ALE (Address Latch Enable): cho phép chốt địa chỉ, chân số 30
- Chân ALE có chức năng là tín hiệu cho phép chốt địa chỉ để thực hiệnviệc giải đa hợp cho bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7).Ngoài ra chân ALE còn là tín hiệu xuất, tích cực mức cao
- Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp
và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống ChânALE được dùng làm ngõ vào xung lập trình (PGM\)
Chân EA\:
- EA ( External Access): truy xuất ngoài, chân số 31
- Tín hiệu vào EA\ thường được mắc lên mức 1 hoặc mức 0 Nếu ở mức
1, 89V51RB2 thi hành chương trình từ ROM nội Nếu ở mức 0, 89V51RB2 thihành chương trình từ ROM ngoài
- Khi lập trình cho ROM trong chip thì chân EA đóng vai trò là ngõ vàocủa điện áp lập trình (Vpp = 12V – 12,5V cho 89V51RB2)
Chân RST:
- RST (Reset): thiết lập lại, chân số 9
- Khi ngõ vào RST đưa lên cao ít nhất 2 chu kỳ máy, 89V51RB2 thiết lậplại trạng thái ban đầu Khi ngõ vào RST ở mức thấp IC hoạt động bình thuờng
Chân XTAL1, XTAL2:
- XTAL (Crystal): tinh thể thạch anh, chân số 18 – 19
Trang 4- XTAL1: ngõ vào mạch tạo xung clock trong chip.
- XTAL2: ngõ ra mạch tạo xung clock trong chip
- Bộ dao động được tích hợp bên trong 89V51RB2, khi sử dụng89V51RB2 người thiết kế chỉ cần nối thêm thạch anh (tần số thạch anh thường sửdụng là 12MHZ) và tụ
Bộ nhớ chương trình (mã) FFFFH
0000H
Bộ nhớ
dữ liệu
Bộ nhớ ngoài chip
Trang 5Bảng tóm tắt bộ nhớ dữ liệu trên chip 89V51 ( Special Function Register: Thanh ghi chức năng đặc biệt )
1.3.1 Bộ nhớ trong:
Bộ nhớ trong 89V51RB2 bao gồm ROM và RAM RAM trong89V51RB2 bao gồm nhiều thành phần: RAM đa chức năng, RAM định địa chỉbit và các dãy thanh ghi
1.3.1.1 Bộ nhớ ROM ( Bộ nhớ chương trình):
Bộ nhớ chương trình dùng để lưu trữ chương trình điều khiển cho chiphoạt động
1.3.1.2 Bộ nhớ RAM (Bộ nhớ dữ liệu):
Trang 6Bộ nhớ dữ liệu dùng để lưu trữ các dữ liệu và tham số.
1.3.1.3 RAM đa chức năng:
- Trên hình vẽ cho thấy 80 byte RAM đa chức năng chiếm địa chỉ từ 30Hđến 7FH
- Mọi địa chỉ trong vùng RAM đa chức năng đều có thể truy xuất tự dodùng kiểu định địa chỉ trực tiếp hoặc gián tiếp
1.3.1.4 RAM định địa chỉ bit:
- RAM định địa chỉ bit gồm 128 bit được định địa chỉ chứa các byte cóđịa chỉ từ 20H đến 2FH
- RAM định địa chỉ bit có 3 kiểu truy xuất dữ liệu: trực tiếp, gián tiếphoặc theo từng bit
1.3.1.5 Các dãy thanh ghi:
- 32 vị trí thấp của bộ nhớ nội chứa các dãy thanh ghi Các lệnh của89V51RB2 hỗ trợ 8 thanh ghi từ R0 – R7 thuộc dãy 0 và theo mặc định sau khiReset hệ thống các thanh ghi này ở các địa chỉ từ 00H đến 07H
- Các lệnh dùng các thanh ghi R0 đến R7 sẽ ngắn hơn và nhanh hơn sovới các lệnh có chức năng tương ứng dùng kiểu địa chỉ trực tiếp Các dữ liệuđược dùng thường xuyên nên dùng một trong các thanh ghi này
- Do có 4 dãy thanh ghi nên tại một thời điểm chỉ có một dãy thanh ghitích cực Dãy thanh ghi tích cực có thể được thay đổi bằng cách thay đổi bit chọndãy trong từ trạng thái chương trình PSW
1.3.1.6 Các thanh ghi chức năng đặc biệt:
- Các thanh ghi nội của hầu hết các bộ vi xử lý đều được truy xuất rõràng bởi một tập lệnh
- Các thanh ghi nội của 89V51RB2 được cấu hình thành một phần củaRAM trên chip, vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộđếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác độngtrực tiếp) Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năngđặc biệt (SFR: Special Function Register) chiếm phần trên của RAM nội từ địachỉ 80H đến FFH
Trang 7- Ngoại trừ thanh ghi A có thể được truy xuất rõ ràng còn lại hầu hết cácthanh ghi chức năng đặc biệt được truy xuất bằng kiểu định địa chỉ trực tiếp.
Thanh ghi từ PSW ( Program Status Word ):
00 = dãy 0: địa chỉ từ 00H đến 07H
01 = dãy 1: địa chỉ từ 08H đến 0FH
10 = dãy 2: địa chỉ từ 10H đến 17H
11 = dãy 2: địa chỉ từ 18H đến 1FH
- Thanh ghi A có địa chỉ byte là E0H và địa chỉ bit từ E0H – E7H
Trang 8 Thanh ghi SP:
- Con trỏ ngăn xếp (SP: Stack Pointer) là một thanh ghi 8 bit ở địa chỉbyte là 81H, dùng để lưu trữ tạm thời các dữ liệu Đây là thanh ghi không địnhđịa chỉ bit Thanh ghi này chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh ngănxếp Các lệnh trên ngăn xếp bao gồm lệnh cất dữ liệu vào ngăn xếp (PUSH) vàlệnh lấy dữ liệu ra khỏi ngăn xếp (POP) Lệnh cất dữ liệu vào ngăn xếp sẽ làmtăng SP trước khi ghi dữ liệu và lệnh lấy ra khỏi ngăn xếp sẽ làm giảm SP Đốivới chip 8051 thì vùng nhớ được dùng để làm ngăn xếp được lưu giữ trong RAMnội
- Để sử dụng ngăn xếp thì ta phải khởi động thanh ghi SP (nghĩa là nạpgiá trị cho thanh ghi SP) => vùng nhớ của ngăn xếp có địa chỉ bắt đầu là (SP) +1
và địa chỉ kết thúc là 7FH
- Sau khi reset IC, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên
sẽ được cất vào ô nhớ ngăn xếp có địa chỉ 08H Nếu phần mềm ứng dụng khôngkhởi động SP một giá trị mới thì dãy thanh ghi 1, có thể cả 2 và 3 sẽ không dùngđược vì vùng RAM này đã được dùng làm ngăn xếp Ngăn xếp được truy xuấttrực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặctruy xuất ngầm bằng lệnh gọi chương trình con (ACALL, LCALL) và các lệnhtrở về (RET, RETI) để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thựchiện chương trình con và lấy lại khi kết thúc chương trình con
Thanh ghi port xuất nhập:
- Các Port của 89V51RB2 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ90H, Port 2 ở địa chỉ A0H, Port 3 ở địa chỉ B0H Tất cả các Port này đều có thểtruy xuất từng bit nên rất thuận tiện trong khả năng giao tiếp
Thanh ghi port nối tiếp:
Trang 9- 89V51RB2 chứa một port nối tiếp cho việc trao đổi thông tin với cácthiết bị nối tiếp như máy tính hoặc giao tiếp nối tiếp với các IC khác Một thanhghi đệm dữ liệu nối tiếp (SBUF: Serial Buffer) ở địa chỉ 99H sẽ giữ cả dữ liệutruyền và dữ liệu nhận Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thìđọc SBUF Ngoài ra còn có thanh ghi điều khiển port nối tiếp (SCON: SerialControl) có địa chỉ byte 98H dùng để báo trạng thái và điều khiển quá trình hoạtđộng của port nối tiếp.
Thanh ghi định thời:
- 89V51RB2 có chứa hai bộ định thời/ bộ đếm 16 bit được dùng cho việcđịnh thời hoặc đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH(TH0: byte cao) Timer 1 ở địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: bytecao) Việc khởi động Timer được SET bởi Timer Mode (TMOD) ở địa chỉ 89H
và thanh ghi điều khiển Timer (TCON) ở địa chỉ 88H Chỉ có TCON được địa chỉhoá từng bit
Thanh ghi ngắt:
- Thanh ghi IE (Interrupt Enable: cho phép ngắt) có địa chỉ byte A8H vàđịa chỉ bit A8H – AFH có công dụng cho phép hoặc không cho phép các ngắthoạt động (có thể từng ngắt riêng rẽ hoặc tất cả các ngắt)
- Thanh ghi IP (Interrup Priority: ưu tiên ngắt) có địa chỉ byte B8H vàđịa chỉ bit B8H – BCH có công dụng thiết lập mức ưu tiên cho các ngắt (ưu tiênthấp hoặc ưu tiên cao)
Thanh ghi điều khiển nguồn:
- Thanh ghi PCON (Power Control: điều khiển nguồn) không có bit định
vị Nó ở địa chỉ 87H chứa nhiều bit điều khiển Thanh ghi PCON được tóm tắtnhư sau:
• Bit 7 (SMOD) => cho phép tăng gấp đôi tốc độ truyền
dữ liệu nối tiếp (tốc độ baud) khi SMOD = 1
• Bit 6, 5, 4 => không có địa chỉ
• Bit 3, 2 (GF1, GF0) => cho phép người lập trình dùngvới mục đích riêng
• Bit 1 (PD) => dùng để quy định chế độ nguồn giảm
Trang 10• Bit 0 (IDL) => dùng để quy định chế độ nghỉ.
Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cảcác IC họ MCS – 51 nhưng chỉ được thi hành trong sự biên dịch của CMOD
Kết nối và truy xuất bộ nhớ dữ liệu ngoài:
Sơ đồ kết nối và truy xuất bộ nhớ dữ liệu ngoài
Bộ nhớ dữ liệu ngoài là bộ nhớ đọc/ ghi được cho phép bởi các tín hiệuRD\ và WR\ ở các chân P3.7 và P3.6 Lệnh dùng để truy xuất bộ nhớ dữ liệungoài là MOVX, sử dụng con trỏ dữ liệu 16 bit DPTR hoặc R0, R1 làm thanh ghichứa địa chỉ
Giải mã địa chỉ:
Nếu trường hợp ROM và RAM được kết hợp từ nhiều bộ nhớ có dunglượng nhỏ hoặc cả hai giao tiếp với chip 89V51 thì cần phải giải mã địa chỉ Việcgiải mã này cần cho hầu hết các bộ vi xử lý
D0 – D7
A0 – A7 CS\
A8– A15
OE\
RAM 64KB
WR\
D Q G
A8 –
A15 RD\
8951
WR\
Trang 11Ví dụ nếu các ROM và RAM có dung lượng 8KB được sử dụng thì tầmđịa chỉ mà chip 89V51 quản lý (0000H – FFFFH) cần phải được giải mã thànhtừng đoạn 8KB để chip có thể chọn từng IC nhớ trên các giới hạn 8KB tươngứng: IC1: 0000H – 1FFFH, IC2: 2000H – 3FFFH,…
IC chuyên dùng cho việc tạo tín hiệu giải mã là 74HC138, các ngõ racủa IC này lần lượt nối với các ngõ vào chọn chip CS\ tương ứng của các IC nhớ
để cho các IC nhớ hoạt động (tại một thời điểm chỉ có một IC nhớ được phéphoạt động) Cần lưu ý là do các đường cho phép IC nhớ hoạt động riêng lẻ chotừng loại (PSEN\ cho bộ nhớ chương trình, RD\ và WR\ cho bộ nhớ dữ liệu) nên89V51 có thể quản lý không gian nhớ lên đến 64KB cho ROM và 64KB choRAM
Các không gian nhớ chương trình và dữ liệu gối nhau:
Vì bộ nhớ chương trình là bộ nhớ chỉ đọc, một tình huống khó xử đượcphát sinh trong quá trình phát triển phần mềm cho 8951 Làm thế nào phần mềmđược viết cho một hệ thống đích để gỡ rối nếu phần mềm chỉ có thể được thực thi
từ không gian bộ nhớ chương trình chỉ đọc
Giải pháp tổng quát là cho các bộ nhớ chương trình và dữ liệu ngoài gốilên nhau Vì PSEN\ được dùng để đọc chương trình và RD\ được dùng để đọc bộnhớ dữ liệu, một RAM có thể chiếm không gian nhớ chương trình và dữ liệubằng cách nối chân OE\ tới ngõ ra cổng AND có các ngõ vào là PSEN\ và RD\
1.3.3 Hoạt động Reset:
89V51RB2 có ngõ vào Reset tác động ở mức cao trong khoảng thời gian
2 chu kỳ xung máy, sau đó xuống mức thấp để 89V51RB2 bắt đầu làm việc RST
có thể kích bằng tay bởi một nút nhấn thường hở hoặc RST khi cấp nguồn, sơ đồmạch Reset tổng hợp như sau:
Trang 12Trạng thái của các thanh ghi sau khi Reset hệ thống:
Các thanh ghi định thời 00H
Thanh ghi SCON 00H
Thanh ghi SBUF 00H
Thanh ghi PCON (HMOS) 0xxxxxxxB
Thanh ghi PCON (CMOS) 0xxx0000B
MUL AB : (A) ← LOW [(A) x (B)]; có ảnh hưởng cờ OV
: (B) ← HIGH [(A) x (B)]; cờ Carry được xoá
DIV AB : (A) ← Integer result of [(A) / (B)]; cờ OV
: (B) ← Remainder of [(A) / (B)]; cờ Carry xoá
1.3.5 Các lệnh logic
Tất cả các lệnh logic sử dụng thanh ghi A như là một trong những toán hạngthực thi một chu kì máy, ngoài A mất 2 chu kì máy Những hoạt động logic có thểđược thực hiện trên bất kì byte nào trong vị trí nhớ dữ liệu nội mà không thôngqua thanh ghi A
Các hoạt động logic được tóm tắt như sau:
ANL <dest-byte>,<src-byte>
Trang 13ORL <dest-byte><src-byte>
XRL <dest-byte>,<src-byte>
RL A : Quay thanh ghi A qua trái 1 bit
RLC A : Quay vòng thanh ghi A qua trái 1 bit có cờ Carry
RR A : Quay thanh A ghi sang phải 1 bit
1.3.6 Các lệnh rẽ nhánh
JC Rel : Nhảy đến “Rel” nếu cờ carry C =1
JNC Rel : Nhảy đến “Rel” nếu cờ Carry C =0
JB bit,rel : Nhảy đến “Rel” nếu (bit) =1
JNB bit,rel : Nhảy đến “rel” nếu (bit) =0
JBC bit, rel : Nhảy đến “rel” nếu (bit) =1 và xoá bit
ACALL addr 11 : Lệnh gọi tuyệt đối trong Page 2K
LCAL Addr 16 :Lệnh gọi dài chương trình con trong 64 K
RET : Kết thúc chương trình con trở về chương trình chính
RETI : Kết thúc thủ tục phục vụ ngắt quay về chương trình chính
AJMP addr11: Nhảy tuyệt đối không điều kiện trong 2 K
LJMP addr16 : Nhảy dài không điều kiện trong 64 K
SJMP rel : Nhảy ngắn không điều kiện trong (-128÷127) byte
CJNE A, direct, rel : so sánh và nhảy đến A nếu A ≠direct
DJNE Rn,rel : Giảm Rn và nhảy nếu Rn≠0
DJNZ direct, rel : Giảm và nhảy nếu direct ≠0
1.3.7 Các lệnh dịch chuyển dữ liệu
Các lệnh dịch chuyển dữ liệu trong những vùng nhớ nội thực thi 1 hoặc 2 chu
kỳ máy Mẫu lệnh MOV <destination>, <source> cho phép di chuyển dữ liệu bất
kỳ 2 vùng nhớ nào của RAM nội hoặc các vùng nhớ của các thanh ghi chức năngđặc biệt mà không thông qua thanh ghi A Vùng Stack của 8051 chỉ chứa 128byte RAM nội, nếu con trỏ Stack SP được tăng quá địa chỉ 7FH thì các byte đượcPUSH vào sẽ mất đi vào các byte POP ra thì không biết rõ
Các lệnh dịch chuyển bộ nhớ nội và bộ nhớ ngoại dùng sự định vị gián tiếp.Địa chỉ gián tiếp có thể dùng địa chỉ 1 byte (@ Ri) hoặc địa chỉ 2 byte (@
Trang 14DPTR) Tất cả các lệnh dịch chuyển hoạt động trên toàn bộ nhớ ngoài thực thitrong 2 chu kỳ máy và dùng thanh ghi A làm toán hạng DESTINATION.
Việc đọc và ghi RAM ngoài (RD và WR) chỉ tích cực trong suốt quá trìnhthực thi của lệnh MOVX, còn bình thường RD và WR không tích cực (mức 1)
1.3.8.Các lệnh luận lý
CLR C : Xoá cờ Carry xuống 0 Có ảnh hưởng cờ Carry
CLR BIT : Xoá bit xuống 0 Không ảnh hưởng cờ Carry.
SET C : Set cờ Carry lên 1 Có ảnh hưởng cờ Carry
SET BIT : Set bit lên 1 Không ảnh hưởng cờ Carry.
CPL C : Đảo bit cờ Carry Có ảnh hưởng cờ Carry
CPL BIT : Đảo bit Không ảnh hưởng cờ Carry.
ANL C, BIT : Có ảnh hưởng cờ Carry.
ANL C, BIT: Không ảnh hưởng cờ Carry
ORL C, BIT : Tác động cờ Carry
ORL C, : Tác động cờ Carry
MOV C, BIT : Cờ Carry bị tác động
MOV BIT, C : Không ảnh hưởng cờ Carry.
1.4 Hoạt động của các Port nối tiếp.
Phần cứng truy xuất tới Port nối tiếp qua các chân TxD (P3.1) và RxD(P3.0) Port nối tiếp tham dự hoạt động đầy đủ (sự phát và thu cùng lúc), và thuvào bộ đệm mà nó cho phép 1 ký tự nhận vào và được cất ở bộ đệm trong khi ký
tự thứ hai được nhận vào Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ haiđược nhận vào hoàn toàn thì dữ liệu không bị mất
Hai thanh ghi chức năng đặc biệt cung cấp cho phần mềm truy xuất đếnPort nối tiếp là SBUF và SCON Sự đệm Port nối tiếp (SBUF) ở địa chỉ 99H là 2
sự đệm thật sự: Ghi lên SBUF (nạp dữ liệu phát) và đọc SBUF (truy xuất dữ liệu
đã nhận) Đây là hai thanh ghi riêng biệt và rõ rệt, và thanh ghi phát chỉ ghi cònthanh ghi thu chỉ đọc
1.4.1 Thanh ghi điều khiển Port nối tiếp SCON
Trang 15Mode hoạt động của Port nối tiếp được set bởi việc ghi lên thanh ghi modecủa Port nối tiếp SCON ở địa chỉ 99H Bảng tóm tắt thanh ghi điều khiển Portnối tiếp SCON như sau:
0 0 0 Thanh ghi dịch (Cố định (tần số dao động/12
0 1 1 UART 8 bit ( Thay đổi (thiết lập bởi bộ định thời
1 0 2 UART 9 bit ( Cố định (tần số dao động /12 hoặc /64
1 1 3 UART 9 bit ( Thay đổi (thiết lập bởi bộ định thời
Trước khi dùng Port nối tiếp, SCON phải được định đúng chế độ VD: Đểkhởi tạo Port nối tiếp chế độ 1 (SM0/SM1 = 0/1), cho phép thu (REN = 1), và set
cờ ngắt của việc phát sẵn sàng hoạt động (TI = 1), ta dùng lệnh sau :
MOV SCON, #01010010H
Port nối tiếp của 8051 có 4 mode hoạt động tùy thuộc theo trạng thái củaSM0/SM1
SCON.7 SM0 9FH Bit 0 của mode Port nối tiếp
SCON.6 SM1 9EH Bit 1 của mode Port nối tiếp
SCON.5 SM2 9DH Bit 2 của mode Port nối tiếp cho phép sự
truyền của bộ xử lý đa kênh ở mode 2 và 3; RI
sẽ không tích cực nếu bit thứ 9 đã thu vào là 0
SCON.4 REN 9CH REN = 1 sẽ cho phép thu ký tự
SCON.3 TB8 9BH Phát bit 8 Bit 9 phát trong mode 2 và 3, được
set và xóa bởi phần mềmSCON.2 RB8 9AH Thu bit 8 Bit thứ 9 nhận được
SCON.1 TI 99H Cờ ngắt phát Cờ này được set ngay khi kết
thúc việc phát một ký tự; được xóa bởi phần
mềmSCON.0 RI 98H Cờ ngắt thu Cờ này được set ngay khi kết thúc
việc thu một ký tự; được xóa bởi phần mềm
Bảng Chức năng của thanh ghi SCON
Các chế độ hoạt động của port nối tiếp
Trang 16Ba trong 4 mode cho phép truyền động bộ với mỗi ký tự thu hoặc phát sẽđược bố trí bởi bit Start hoặc bit Stop.
1.4.2 Khởi động và truy xuất các thanh ghi Port nối tiếp
1.4.2.1 Cho phép thu
Bit cho phép thu REN trong thanh ghi SCON phải được set bởi phần mềm
để cho phép sự thu các ký tự Điều này thường được dùng làm ở đầu chươngtrình khi các Port nối tiếp và các timer được khởi động
Ta có thể tác động bằng lệnh:
SETB REN hoặc:
MOV SCON, # xxx1xxxxB
1.4.2.2 Dùng timer tạo tốc độ Baud cho port nối tiếp
Muốn tạo ra tốc độ Baud, ta khởi tạo TMOD ở chế độ tự nạp lại 8 bit (mode 2của timer) và đặt trước giá trị nạp lại đúng vào byte cao của thanh ghi timer 1(TH1) để tạo ra tốc độ tràn chính xác Có những tốc độ Baud rất chậm ta dùngchế độ 16 bit là chế độ 1 của timer, nhưng ta phải khởi tạo lại sau mỗi lần tràncho TL1/TH1
Hoạt động khác được đếm giờ bởi việc dùng timer 1 ngoài là T1 (P3.5) Công thức chung để xác định tốc độ Baud trong mode 1 và mode 3 là:
Ví dụ một hoạt động 1200 Baud đòi hỏi một tốc độ tràn là 1200/32 = 38,4KHz Nếu thạch anh 12MHz lái dao động trên Chip, thì timer 1 được đếm giờ ởtốc độ của tần số 1 MHz Bởi vì timer phải tràn ở tốc độ tần số 38,4 KHz vàTimer đếm giờ ở tốc độ của tần số 1 MHz, nên một sự tràn được yêu cầu với1000/38,4 = 26,04 clock (làm tròn 26) Bởi vì các timer đếm lên và tràn khi có sựchuyển đổi từ FFH 00H của bộ đếm, nên 26 là giá trị cần nạp cho TH1 (giátrị đúng là -26) Ta dùng lệnh: MOV TH1, #26
Ví dụ sau khi khởi động Port nối tiếp hoạt động giống như một UART 8 bit
ở tốc độ 2400 Baud, dùng timer 1 để cung cấp tốc độ Baud:
MOV SCON, #01010010B ; Port nối tiêp mode 1BAUD RATE = TIMER 1 OVERFLOW RATE ÷32
Trang 17MOV TMOD, #20 ; Timer 1 mode 2MOV TH1, #-13 ; Nạp vào bộ đếm tốc độ
2400Baud
Trong SCON có SM0/SM1 để vào mode UART 8 bit, REN = 1 cho phépPort nối tiếp thu các ký tự và TI = 1 cho phép phát ký tự đầu tiên bởi việc chobiết thanh ghi đếm rỗng TMOD có M1/M0 = 1/0 để đặt timer 1 vào mode tựđộng nạp lại 8 bit Việc set bit TR1 để mở máy chạy timer Tốc độ Baud 2400 sẽcho ta tốc độ tràn timer 1 là 2400/32 = 76,8 KHz (ứng với thạch anh 12 MHz) sẽcho số xung clock sau mỗi sự tràn là 1000/76,8 = 13,02 (lấy tròn là 13) Vậy -13
là giá trị cần nạp vào TH1 để có tốc độ Baud là 2400 Baud
1.5 Hoạt động ngắt của 89V51RB2
Trong nhiều ứng dụng đòi hỏi ta phải dùng ngắt (Interrupt) mà không dùngtimer bởi vì nếu dùng timer ta phải mất thời gian để chờ cờ tràn timer TFx setmới xử lý tiếp chương trình Do đó ta không có thời gian để làm các việc khác
mà ứng dụng đòi hỏi Đây là chương trình rất quan trọng của 8051 nói riêng và
họ MSC – 51 nói chung
Ngắt là một sự cố có điều kiện mà nó gây ra sự ngưng lại tạm thời củachương trình để phục vụ một chương trình khác Các ngắt đóng vai trò quantrọng trong việc thiết kế và hiện thực các ứng dụng của bộ vi điều khiển các ngắtcho phép hệ thống đáp ứng một sự kiện theo cách không đồng bộ và xử lý sựkiện trong khi một chương trình khác đang thực thi Một hệ thống được điềukhiển bởi ngắt cho ta ảo tưởng đang làm nhiều công việc đồng thời Tất nhiênCPU không thể thực thi nhiều lệnh tại một thời điểm, nhưng nó có thể tạm thờitreo việc thực thi của chương trình chính để thực thi chương trình khác và sau đóquay lại chương trình chính
Khi chương trình chính đang thực thi mà có một sự ngắt xảy đến thì chươngtrình chính ngưng thực thi và rẽ nhánh đến thủ tục phục vụ ngắt ISP (InterruptService Routine) ISR thực thi để thực hiện hoạt động và kết thúc với lệnh RETI:chương trình tiếp tục nơi mà nó dừng lại