1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Thiết kế mạch thí nghiệm vi xử lý tích hợp 89c51 và PIC 16f877a phần vi điều khiển 89c51

87 22 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 87
Dung lượng 4,79 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Mạch giao tiếp nối tiếp  Không gian nhớ chương trình mã ngoài 64K  Không gian nhớ dữ liệu ngoài 64K  Bộ xử lý bit thao tác trên các bít riêng rẽ  210 vị trí nhớ được định địa chỉ,

Trang 1

i

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM

Trang 2

Em xin chân thành cảm ơn quý Thầy Cô trong khoa đã tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong những năm học vừa qua

Xin chân thành cảm ơn các anh chị và bạn bè đã ủng hộ, giúp đỡ và động viên trong suốt thời gian học tập và nghiên cứu

Mặc dù em đã cố gắng hoàn thành luận văn trong phạm vi và khả năng cho phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót

Rất mọng nhận được sự cảm thông và tận tình chỉ bảo của quý Thầy Cô và các bạn Sinh viên thực hiện

Hồ Huyền Lệ Quyên

Trang 3

iii

LỜI CAM ĐOAN

Tôi xin cam đoan rằng, số liệu và kết quả trong luận văn này là trung thực và chưa được sử dụng Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy Phạm Xuân Trung

Tôi xin cam đoan rằng, mọi sự giúp đỡ trong việc thực hiện luận văn này đã được cảm ơn và các thông tin trích dẫn trong luận văn đều đã được chỉ rõ nguồn gốc

Đà Nẵng, ngày tháng năm

Sinh viên thực hiện

Hồ Huyền Lệ Quyên

Trang 4

iv

MỤC LỤC

LỜI CẢM ƠN……… i

LỜI CAM ĐOAN……… ii

MỤC LỤC ………iii

DANH SÁCH HÌNH………vi

DANH SÁCH BẢNG BIỂU……… viii

TỪ VIẾT TẮT……… ix

LỜI NÓI ĐẦU………x

CHƯƠNG 1:TỔNG QUAN VI ĐIỀU KHIỂN 89C51……… 1

1.1Cấu trúc phần cứng 89C51 1

1.1.1 Đơn vị xử lý trung tâm 2

1.1.2 Chức năng chân 89C51 5

1.1.3 Cấu trúc PORT xuất nhập 8

1.1.4 Tổ chức bộ nhớ 9

1.1.5 Các thanh ghi chức năng đặc biệt( SFR) 10

1.2Hoạt động RESET 14

1.3Tóm tắt lệnh 16

1.3.1 Các toán hạng sử dụng trong lệnh 16

1.3.2 Các nhóm lệnh 16

CHƯƠNG 2:TỔNG QUAN VI XỬ LÝ PIC16F877A……….18

2.1Giới thiệu vi điều khiển PIC 18

2.1.1 Kiến trúc của PIC 18

2.1.2 RICS và CISC 19

2.1.3 PIPELINING 20

Trang 5

v

2.2Một vài thông số về vi điều khiển PIC 16F877A 21

2.2.1 Tổ chức bộ nhớ 22

2.2.2 Thanh ghi của PIC……… ……….25

2.3STACK 28

2.4Các cổng xuất nhập của PIC16F877A 28

2.4.1 PORTA 29

2.4.2 PORTB 30

2.4.3 PORTC 30

2.4.4 PORTD 31

2.4.5 PORTE 32

2.5Tập lệnh của PIC16F877A 32

2.5.1 Nhóm lệnh di chuyển 32

2.5.2 Nhóm lệnh số học 32

2.5.3 Nhóm lệnh logic 33

2.5.4 Nhóm lệnh rẽ nhánh 33

2.5.5 Nhóm lệnh điều khiển bit 33

2.5.6 Nhóm lệnh đặc biệt 33

CHƯƠNG 3: THIẾT KẾ MẠCH THÍ NGHIỆM………34

3.1Thiết kế các board mạch thí nghiệm 34

3.2 LED đơn 41

3.3 LED 7 đoạn 42

3.4 LCD đơn sắc 16x2 45

3.4 LCD đơn sắc 16x2 45

3.4.1 Giới thiệu Text LCD 45

3.4.2 Sơ đồ chân 46

Trang 6

vi

3.4.3 Các chân điều khiển LCD 46

3.4.4 Tập lệnh LCD 48

3.4.5 Giao tiếp 4 bit 48

3.4.6 Vi điều khiển và Text LCD 49

3.5 Bàn phím ma trận 50

3.6 Ma trận LED 8x8 51

3.6.1 IC 74595 51

3.6.2 ULN 2803 52

3.6.3 Ma trận LED 8x8 53

3.7 Cổng COM và IC MAX 232 54

3.7.1 Cổng COM 54

3.7.2 IC MAX 232 56

CHƯƠNG 4: THIẾT KẾ CÁC BÀI THÍ NGHIỆM 89C51……… 57

4.1 Bài thí nghiệm 1: Lập trình điều khiển LED đơn và LED 7 đoạn 57

4.1.1 Dụng cụ thí nghiệm 57

4.1.2 Mục đích thí nghiệm 57

4.1.3 Chương trình ví dụ viết bằng ngôn ngữ ASM 57

4.1.4 Kiểm tra thực tế 60

4.2 Bài thí nghiệm 2: 89C51 giao tiếp với LCD 16x2 Error! Bookmark not defined 4.2 1 Dụng cụ thí nghiệm Error! Bookmark not defined 4.2 2 Mục đích thí nghiệm Error! Bookmark not defined 4.2 3 Chương trình ví dụ 63

4.2 4 Kiểm tra thực tế 65

4.3 Bài thí nghiệm 3: Sử dụng giao tiếp 89C51 với bàn phím ma trận 66

4.3.1 Dụng cụ thí nghiệm 66

Trang 7

vii

4.3.2 Mục đích thí nghiệm 66

4.3.3 Chương trình ví dụ 66

4.3.4 Kiểm tra thực tế 70

4.4 Bài thí nghiệm 4: Giao tiếp 89C51 với cổng COM UART 71

4.4.1 Dụng cụ thí nghiệm 71

4.4.2 Mục đích thí nghiệm 71

4.4.3 Chương trình ví dụ 71

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 73

TÀI LIỆU THAM KHẢO 74

Trang 8

viii

DANH SÁCH HÌNH

Hình 1.1: Sơ đồ khối chip của 89C51

Hình 1.2: Sơ đồ chân của 89C51

Hình 1.3: Đơn vị xử lý trung tâm CPU

Hình 1.4: Hoạt động của bus cho chu kỳ tìm nạp lệnh

Hình 1.5: 89C51 ghép với mạch dao động TTL bên ngoài

Hình 1.6: Mạch bên trong của các Port xuất nhập

Hình 1.7: Tóm tắt các không gian nhớ của chip 89C51

Hình 1.8: Hai mạch dùng reset hệ thống (a) reset bằng tay (b) reset khi cấp nguồn Hình 2.1: Kiến trúc Von Neuman và kiến trúc Havard

Hình 2.2: Sơ đồ chân của PIC16F877A

Hình 2.11: Sơ đồ khối của cổng E

Hình 3.1: Sơ đồ schematic toàn mạch

Hình 3.2: Sơ đồ mạch in toàn mạch

Hình 3.3: Mạch thực tế toàn mạch

Hình 3.4: Sơ đồ schematic board trung tâm 89C51

Hình 3.5: Sơ đồ mạch in board trung tâm 89C51

Hình 3.6: Mạch thực tế board trung tâm 89C51

Hình 3.7: Sơ đồ schematic board trung tâm PIC16F877A

Hình 3.8: Sơ đồ mạch in board trung tâm PIC16F877A

Hình 3.9: Mạch thực tế board trung tâm PIC16F877A

Hình 3.10: Sơ đồ nguyên lý LED đơn

Trang 9

Hình 3.15: Hoạt động của chân RS

Hình 3.16: Trình giao tiếp với Text LCD

Trang 10

Bảng 1.4: Bảng thanh ghi PCON

Bảng 1.5: Bảng giá trị của các thanh ghi sau khi reset hệ thống

Bảng 1.6: Bảng liệt kê các lệnh trong 89C51

Trang 11

xi

TỪ VIẾT TẮT

PCON : Power Control Register

TMOD : Timer Mode Register

TCON : Timer Control Register

SCON : Serial Port Control Register

Trang 12

xii

LỜI NÓI ĐẦU

Ngày nay cũng với sự phát triển của khoa học kỹ thuật, công nghệ điện tử cũng đang có những bước phát triển vượt bật trong những năm gần đây Trong đó công nghệ vi điện tử đã có bước phát triển nổi trội Vào năm 1971 bộ vi xử lý đầu tiên đã ra đời và kể từ đó đã không ngừng được cải thiện về mặt kiến trúc, chức năng,… và hiệu năng sử dụng Vì vậy, công việc của chúng ta là phải tìm cách khai thác triệt để các tính năng của vi xử lý để góp phần vào công cuộc phát triển công nghệ hiện nay

Và trong khóa luận tốt nghiệp nhóm em đã quyết định chọn đề tài “THIẾT KẾ

MẠCH THÍ NGHIỆM VI XỬ LÝ TÍCH HỢP 89C51 VÀ PIC16F877A- PHẦN

VI ĐIỀU KHIỂN 89C51” Nội dung chính của đề tài gồm 4 chương:

Chương 1: Tổng quan về vi điều khiển 89C51

Chương 2: Tổng quan về vi xử lý PIC16F877A

Chương 3: Thiết kế mạch thí nghiệm

Chương 4: Thiết kế các bài thí nghiệm

Trong thời gian ngắn thực hiện đề tài cộng với kiến thức còn nhiều hạn chế, nên trong khóa luận này không tránh khỏi thiếu sót, em rất mong được sự đóng góp ý kiến của thầy cô và các bạn

Sinh viên thực hiện

Hồ Huyền Lệ Quyên

Trang 13

 Mạch giao tiếp nối tiếp

 Không gian nhớ chương trình( mã) ngoài 64K

 Không gian nhớ dữ liệu ngoài 64K

 Bộ xử lý bit( thao tác trên các bít riêng rẽ)

 210 vị trí nhớ được định địa chỉ, mỗi vị trí một bit

 Nhân/chia trong 4µs

Các thành viên khác của học MCS-51 có các tổ hợp ROM(EPROM), RAM trên chip khác nhau hoặc có thêm bộ định thời thứ ba( xem bảng) Mỗi một IC của họ MCS-51 cũng có phiên bản CMOS công suất thấp

Trang 14

2

Hình 1.1: Sơ đồ khối chip của 89C51

Thuật ngữ “89C51” được dùng để chỉ rộng rãi các chip của học MCS-51 Khi việc thảo luận tập trung vào một cải tiến được chỉ ra rõ ràng Các đặc trưng vừa nêu trên được trình bày trong sơ đồ khối

Hình 1.2: Sơ đồ chân của 89C51 1.1.1 Đơn vị xử lý trung tâm

CPU, trái tim của hệ máy tính, quản lý tất cả các hoạt động của hệ và thực hiện tất cả các thao tác trên dữ liệu Hầu hết các CPU chỉ bao gồm một tập các mạch logic thực hiện liên tục hai thao tác: tìm nạp lệnh và thực thi lệnh CPU có khả năng hiểu và

Trang 15

3

thực thi các lệnh dựa trên một tập các mã nhị phân, mỗi mã nhị phân biểu thị một thao tác đơn giản Các lệnh này thường là các lệnh số học( như cộng, trừ, nhân, chia), các lệnh logic( như AND, OR, NOT,…), các lệnh di chuyển dữ liệu hoặc các lệnh rẽ nhánh, được biểu thị bởi một tập các mã nhị phân và được gọi là tập lệnh( instruction set)

Hình ảnh đơn giản bên trong của CPU: trình bày một tập các thanh ghi( register) có nhiệm vụ lưu trữ tạm thời các thông tin, một đơn vị số học logic ALU có nhiệm vụ thực hiện các thao tác trên các thông tin này, một đơn vị giải mã lệnh và điều khiển có nhiệm vụ xác định các thao tác cần thực hiện và thiết lập các hoạt động cần thiết để thực hiện thao tác CPU còn có hai thanh ghi nữa: thanh ghi lệnh IR lưu trữ mã nhị phân của lệnh để được thực thi và bộ đếm chương trình PC lưu trữ địa chỉ của lệnh

kế tiếp trong bộ nhớ cần được thực thi

Hình 1.3: Đơn vị xử lý trung tâm CPU

Việc tìm nạp một lệnh từ RAM hệ thống là một trong các thao tác cơ bản nhất

mà CPU thực hiện Việc tìm nạp lệnh được thực hiện theo các bước sau:

 Nội dung của PC được đặt lên bus địa chỉ

 Tín hiệu điều khiển READ được xác lập( chuyển sang trạng thái tích cực)

Giải mã lệnh

và điều khiển

Bộ số học và logic

CPU

Thanh ghi lệnh( IR) Bộ đếm chương trình( PC)

Thanh ghi

Trang 16

4

 Dữ liệu( opcode của lệnh) được đọc từ RAM và đưa lên bus dữ liệu

 Opcode được chốt vào thanh ghi lệnh bên trong CPU

 PC được tăng để chuẩn bị tìm nạp lệnh kế từ bộ nhớ

Hình 1.4: Hoạt động của bus cho chu kỳ tìm nạp lệnh

Giai đoạn thực thi lệnh bao gồm việc giải mã opcode và tạo ra các tín hiệu điều khiển, các tín hiệu này điều khiển việc xuất nhập giũa các thanh ghi nội với ALU và thông báo để ALU thực hiện thao tác đã được xác định Do các thao tác có tầm thay đổi rộng, phạm vi dành cho các giải thích bị nêu trên có phần nào bị giới hạn, chỉ áp dụng được cho các tháo tác đơn giản như tăng nội dung của một thanh ghi Các lệnh phức tạp hơn đòi hỏi thêm nhiều bước nữa, chẳng hạn như đọc byte dữ liệu thứ hai và byte dữ liệu thứ ba để thực hiện thao tác

Một chuỗi các lệnh được kết hợp để thực hiện một công việc có ý nghĩa được gọi là một chương trình( program) hay phần mềm( software) Mức độ mà những công việc được thực hiện đúng và có hiệu quả phàn lớn xác định bởi chất lượng của phần mềm, không phải bởi sự phức tạp của CPU Vậy thì các chương trình” điều khiển”

RAM

N+ 2 N+ 1

N N- 1

Trang 17

32 chân trên hình thành 4 port 8-bit Với các thiết kế yêu cầu một mức tối thiểu

bộ nhớ ngoài khác, ta có thể sử dụng các port này làm nhiệm vụ xuất/nhập 8 đường cho mỗi port có thể được xử lí như 1 đơn vị giao tiếp với các thiết bị song song như máy in, bộ biến đổi D-A… hoặc mỗi đường có thể hoạt động độc lập giao tiếp với một thiết bị đơn bit như chuyển mạch, LED, BJT, FET cuộn dây, động cơ, loa…

a) PORT0

PORT0 ( các chân từ 32 đến 39 trên 8051) có 2 công dụng Trong các thiết bị

có tối thiểu thành phần, PORT0 được sử dụng làm nhiệm vụ xuất/nhập Trong các thiết bị lớn hơn có bộ nhớ ngoài, PORT0 trở thành bus địa chỉ và bus dữ liệu đa hợp [byte thấp của bus địa chỉ nếu là địa chỉ]

Trang 18

6

d) PORT3

PORT3 (các chân từ 10 đến 17 của 89C51) có 2 công dụng Khi không hoạt động hoạt động xuất nhập, các chân của PORT3 có nhiều chức năng riêng (mỗi chân

có chức năng riêng liên quan đến các đặc trung cụ thể của 8051)

Bảng dưới đây cho ta chức năng của các chân của PORT3 và 2 chân P1.0, P1.1 của PORT1

Bảng 1.2: Chức năng các chân Port3 và hai chân P1.0 và P1.1 của Port1

e) Chân cho phép bộ nhớ chương trình

89C51 cung cấp cho ta 4 tín hiệu điều khiển bus Tín hiệu cho phép bộ nhớ

cho truy xuất bộ nhớ chương trình ngoài Chân này thường nối với chân cho phép OE của EPROM (hoặc PROM) để cho phép đọc các byle lệnh

chương trình hay opcode (mã thao tác) được đọc từ EPROM, qua bus dữ liệu và được chốt vào thânh ghi lệnh IR của 89C51 để được giải mã

PSEN

Trang 19

7

89C51 sử dụng chân 30, chân xuất tín hiệu cho phép chốt địa chỉ ALE để giải

đa hợp (demultiplexing) bus dữ liệu và bus địa chỉ Khi port 0 được sử dụng làm bus địa chỉ/dữ liệu đa hợp, chân ALE xuất tín hiệu để chotts địa chỉ (byte thấp nhất của địa chỉ 16-bit) vàp 1 thanh ghi ngoài trong suốt ½ đầu của chu kì bộ nhớ (memory cycle) Sau khi điều này đã được thực hiện, các chân của port 0 sẽ xuất/nhập dữ liệu hợp lệ trong suốt ½ thứ 2 của chu kì bộ nhớ

Tín hiệu ALE có tần số bằng 1/6 tần số của mạch dao động bên trong chip vi điều khiển và có thể được dùng làm xung clock cho phần còn lại của hệ thống Nếu mạch giao động có tần số 12MHz, tín hiệu ALE có tần số 2MHz Ngoại lệ duy nhất là trong thời gian thực thi lệnh MOVX, 1 xung ALE sẽ bị bỏ qua Chân ALE còn được dùng để nhận xung ngõ vào lập trình cho EPROM trên chip đối với các phiên bản của 89C51 có EPROM này

g) Chân truy xuất ngoài

Ngõ vào này (chân31) có thể được nối với 5V (logic 1) hoặc với GND (logic 0) Nếu chân này nối lên 5V, 8051/8052 thực thi chương trình trong ROM nội (chương trình nhỏ hơn 4K/8K) Nếu chân này nối với GND chương trình cần thực thi chứa ở bộ

áp cấp điện 21V cho việc lập trình EPROM nội (nạp EPROM)

h) Chân RESET (RST)

Ngõ vào RST (chân9) là ngõ vào xóa chính (master reset) của 89C51 dùng để thiết lập lại trạng thái ban đầucho hệ thống hay gọi tắt là reset hệ thống Khi ngõ vào này được treo ở logic 1 tối thiểu 2 chu kì máy, các thanh ghi bên trong của 89C51 được nạp các giá trị thích hợp cho việc khởi động lại hệ thống

i) Các chân XTAL1 và XTAL2

Mạch dao động bên trong chip 89C51 được ghép với thạch anh bên ngoài ở 2 chân XTAL1 và XTAL2 (chân 18 và chân 19) Các tụ ổn định cũng được yêu cầu như trên hình này Tân số danh định của thạch anh là 12MHz cho hầu hết các chip Ở hình

có 1 nguồn xung clock TTL có thể được nối với các chân XTAL1 và XTAL2

EA

EA

Trang 20

Lưu ý là điện trở kéo lên (Pull up) sẽ không có ở PORT0 (trừ khi port này làm nhiệm vụ của bus địa chỉ- dữ liệu đa hợp), do vậy 1 điển trở kéo lên bên ngoài phải được cần đến

Giá trị của điện trở này phụ thuộc vào đặc tính ngõ vào của thành phần ghép nối với chân của PORT

Hình 1.6: Mạch bên trong của các PORT xuất nhập

29 30

31 40 1

2 3 4 5 6 7 8

21 22 23 24 25 26 27 28

10 11 12 13 14 15 16 17

39 38 37 36 35 34 33 32

RST XTAL2 XTAL1

PSEN ALE/PROG

VPP VC

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15

P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD

P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7

C1

CAP NP

Y1 CRYSTAL

Bus nội của 89C51

Bộ chốt của Port

Chân Port

Đọc chốt

VCC

Ghi vào bộ chốt

Kéo lên bên trong

Trang 21

9

Ở đây ta thấy có 2 khả năng: “ đọc bộ chốt “ và “ đọc chân PORT “ Các lệnh yêu cầu thao tác đọc - sửa - ghi (như lệnh CPL P1.5) đọc bộ chốt để tránh sự hiểu nhầm mức điện áp do sự kiện dòng tải tăng Các lệnh nhập 1-bit của PORT đọc chân PORT Trong trường hợp này bộ chốt của PORT phải chứa 1 nếu không FET sẽ được kích bảo hòa và điều này kéo ngõ ra xuống mức thấp Việc reset hệ thống sẽ set tất cả các bộ chốt PORT, do vậy các chân PORT có thể được dùng làm các ngõ nhập mà không cần phải set các bộ chốt PORT 1 cách tường minh Tuy nhiên nếu 1 bộ chốt PORT bị xóa, chân PORT không thể làm nhiệm vụ tiếp theo là ngõ nhập trừ khi trước tiên ta phải set bộ chốt

1.1.4 Tổ chức bộ nhớ

Hầu hết các CPU đều có không gian nhớ chung cho dữ liệu 1 chương trình Điều này cũng hợp lí vì các chương trình thường được lưu trên đĩa và được nạp vào RAM để thực thi, vậy thì cả 2 dữ liệu và chương trình đều lưu trú trong RAM

Các chip vi điều khiển hiếm khi được sử dụng giống như các CPU trong các hệ máy tính, thay vào đó chúng được dùng làm thành phần trung tâm trong các thiết kế hướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ đĩa và hệ điều hành Chương trình điều khiển phải thường trú trong ROM

Do lí do trên, 89C51 có không gian bộ nhớ riêng cho chương trình và dữ liệu

Cả 2 bộ nhớ chương trình và dữ liệu đều đặt bên trong chip, tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng cách sử dụng các chip nhớ bên ngoài

có dung lượng tối đa là 60K cho bộ nhớ chương trình (hay bộ nhớ mã) và 60K cho bộ nhớ dữ liệu

Bộ nhớ nội chip bao gồm ROM (chỉ có ở 8051-8052) và RAM RAM trên chip

ba gồm vùng RAM đa chức năng, vùng RAM với từng bit được định địa chỉ, các bank thanh ghi và các thanh ghi chức năng đặc biệt SFR 2 đặc tính đáng lưu ý là:

(a) Các thanh ghi và các port xuất/nhập được định địa chỉ theo kiểu ánh xạ bộ nhớ và được truy xuất như 1 vị trí nhớ trong bộ nhớ

(b) Dùng stack thường trú trong RAM trên chip (RAM nội) vì ở trong RAM ngoài như đối với các bộ vi xử lí

Trang 22

Các thanh ghi nội của 89C51 được cấu hình thành một phần của RAM trên chip, do vậy mỗi một thanh ghi cũng có một địa chỉ Điều này hợp lý với 89C51 vì chip này có rất nhiều thanh ghi Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của RAM nội từ địa chỉ 80H đến FFH

Lưu ý là không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa

Bộ nhớ dữ liệu được cho phép bởi và

Bộ nhớ chương trình được cho phép bởi

Bộ nhớ trên chip

Trang 23

00= bank 0: địa chỉ từ 00H đến 07H 01= bank 1: địa chỉ từ 08H đến 0FH 10= bank 2: địa chỉ từ 10H đến 17H 11= bank 3: địa chỉ từ 18H đến 1FH

Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư số cất trong thanh ghi B Thanh ghi B còn được xử lí như 1 thanh ghi nháp Các bit được định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H

c) Con trỏ stack

Con trỏ stack SP là 1 thanh ghi 8-bit ở địa chỉ 81H SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack Các lệnh liên quan đến stack bao gồm lệnh cẩ dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack Việc cất vào stack làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm SP Vùng stack của 89C51 được giữ trong RAM nội và được giới hạnh đến các địa chỉ truy xuất được bởi kiểu định địa chỉ gián tiếp

d) Con trỏ dữ liệu DPTR: Con trỏ dữ liệu DPTRđược dùng để truy xuất bộ nhớ

chương trình ngoài hoặ bố nhớ dữ liệu ngoài DPTR là 1 thanh ghi 16-bit có địa chỉ là

82H( DPL, byte thấp) và 83H( DPH, byte cao)

Trang 24

12

e) Các thanh ghi PORT

Các PORT xuất nhập của 89C51 bao gồm PORT0 tại địa chỉ 80H, PORT1 tại địa chỉ 90H, PORT2 tại địa chỉ A0H và PORT3 tại địa chỉ B0H Các PORT0, 2 và 3 không được dùng để xuất nhập nếu ta sử dụng thêm bộ nhớ ngoài hoặc nếu có 1 số đặc tính đặc biệt của 89C51 được sử dụng( ngắt, port nối tiếp…) P1.2 đến P1.7, ngược lại, luôn luôn là các đường xuất nhập đa mục đích hợp lệ Tất cả các PORT đều được định địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh

f) Các thanh ghi định thời

89C51 có 2 bộ đếm/định thời( Timer/ Couter) 16-bit để định các khoảng thời gian hoặc để đếm các sự kiện Bộ định thời 0 có địa chỉ 8AH( TL0, byte thấp) và 8CH( TH0, byte cao), bộ định thời 1 có địa chỉ 8BH( TL1, byte thấp) và 8DH( TH1, byte cao)

Hoạt động của bộ định thời được thiết lập bởi thanh ghi ở chế độ định thời TMOD ở địa chỉ 89H Và thanh ghi điều khiểm định thời TCON ở địa chỉ 88H Chỉ có TCON được định địa chỉ từng bit

g) Các thanh ghi của PORT nối tiếp

Bên trong 89C51 có 1 PORT nối tiếp để truyền thông với các thiết bị nối tiếp như các thiết bị đầu cuối hoặc modem, hoặc để giao tiếp với các IC khác có mạch giao tiếp nối tiếp( như các thanh ghi dịch chẳng hạn) Một thanh ghi được gọi là bộ đệm dữ liệu nối tiếp SBUF ở địa chỉ 99H lưu giữ dữ liệu truyền đi và dữ liệu nhận về Việc ghi lên SBUF sẽ nạp dữ liệu để truyền và việc đọc SBUF sẽ lấy dữ liệ đã nhận được Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghi điều khiển PORT nối tiếp SCON ở địa chỉ 98H, thanh ghi này được định địa chỉ từng bit

h) Các thanh ghi ngắt

89C51 có 1 cấu trúc ngắt với 2 mức ưu tiên và 5 nguyên nhân ngắt (5 source, 2 priority level interrupt structure) Các ngắt bị vô hiệu hóa sau khi reset hệ thống và sau

đó được cho phép bằng cách ghi vào thanh ghi cho phép ngắt IEở địa chỉ A8H Mức

ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP ở địa chỉ B8H Cả 2 thanh ghi này đều được định địa chỉ từng bước

Trang 25

13

i) Thanh ghi điều khiển nguồn

Thanh ghi điều khiển nguồn PCON có địa chỉ 87H chứa các bit điều khiển được tóm tắt trong bản

Bit SMOD tăng gấp đôi tốc độ baud của port nối tiếp khi port này hoạt động ở chết độ 1,2 hoặc 3 Các bit 4,5 và 6 của PCON không được định nghĩa Các bit 2 và 3

là các bit cờ đa mục đích dành cho các ứng dụng của người sử dụng

Các bit điều khiển nguồn, nguồn giảm PD và nghỉ IDL, hợp lệ trong tất cả các chip thuộc họ MCS-51, nhưng chỉ được thực hiện trong các phiên bản CMOS của MCS-51 PCON không được định địa chỉ bit

Chế độ nguồn giảm

Lệnh thiết lập bit PD bằng 1 sẽ là lệnh sau cùng được thực thi trước khi đi vào chế độ nguồn giảm Ở chế đọ nguồn giảm:

(1) Mạch giao động trên chip ngừng hoạt động

(2) Mọi chức năng ngừng hoạt động

(3) Nội dung của RAM trên chip được duy trì

(4) Các chân port duy trì mức logic của chúng

hệ thống

5V tối thiểu 10 chu kì dao động trước khi chân RST đạt mức thấp lần nữa

Trang 26

14

Bảng 1.4: Bảng thanh ghi PCON

cho tốc độ baul tăng ở các chế độ 1,2 và 3 của port nối tiếp

giảm, chỉ ra khỏi chế độ bằng reset

Các chân port cũng được duy trì các mức logic của chúng ALE và PSEN được giữ ở mức cao.Chế độ nghỉ kết thúc bằng cách cho phép ngắt hoặc bằng cách reset hệ thống

Cả 2 cách vừa nêu đều xóa bit IDL

1.2 Hoạt động RESET

89C51 được RESET bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy

và sau đó chuyển về mức thấp RST có thể được tác động bằng tay hoặc được tác động khi cấp nguồn bằng cách dùng một mạch RC như trình bày ở hình Trạng thái của tất

cả các thanh ghi sau khi reset hệ thống được tóm tắt trong bảng

Quan trọng nhất trong các thanh ghi này có lẽ là thanh ghi PC (bộ đếm chương trình), được nạp 0000H Khi RST trở lại mức thấp nhất, việc thực thi chương trình

Trang 27

R2 8,2k

R5 100

5V

RST

5V

C1 10uF S1

C3 10uF

RST

R6 8.2K

Trang 28

16

1.3 Tóm tắt lệnh

1.3.1 Các toán hạng sử dụng trong lệnh

trong( 0-127) hoặc các thanh ghi chức năng đặc biệt

thanh ghi R0 hoặc R1

#data16 :hằng 16 bit chứa trong câu lệnh

Addr16 :16 bit địa chỉ đích được dùng trong câu lệnh LCALL và LJMP

Addr11 :11bit địa chỉ đích được dùng trong câu lệnh LCALL và AJMP

nhảy có điều kiện

chức năng đặc biệt

1.3.2 Các nhóm lệnh

Các lệnh trong 89C51 được chia thành 5 nhóm lệnh: nhóm lệnh số hoc, nhóm lệnh logic, nhóm lệnh chuyển dữ liệu, nhóm lệnh thao tác trên bit, nhóm lệnh rẽ nhánh

Trang 29

Lệnh rẽ nhánh

A,source

ANL direct,A

ADDC

A,#data

ANL direct,#data

MOV dest,source

SUBB

A,source

ORL A,source

direct,#data

MOVC A,@A+PC

@A+DPTR

A,source

Trang 30

18

2.1 Giới thiệu vi điều khiển PIC

2.1.1 Kiến trúc của PIC

Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc : Kiến trúc Von Neuman và kiến trúc Havard

Hình 2.1: Kiến trúc Von Neuman và kiến trúc Havard

Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard Điểm khác biệt giữa kiến trúc Havard và kiến trúc Von- Neuman là cấu trúc bộ nhớ dữ liệu và bộ nhớ chương trình

Đối với kiến trúc Von- Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương trình và bộ nhớ dữ liệu Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí của CPU phải rất cao, vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình Như vậy có thể nói kiến trúc Von-Neuman không thích hợp với cấu trúc với cấu trúc của một vi điều khiển

Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành hai bộ nhớ riêng biệt Do đó trong cùng một thời điểm CPU có thể tương tác với cả hai

bộ nhớ, như vậy tốc độ xử lí của vi điều khiển được cải thiện đáng kể

Một điểm của chú ý nữa là tập lệnh trong cấu trúc Havard có thể được tối ưu tùy theo yêu cầu kiến trúc của vi điều khiển mà không phụ thuộc vào cấu trúc dữ liệu

Ví dụ, đối với vi điều khiển dòng 16F, đồ dài tập lệnh 14bit( trong khi dữ liệu được tổ chức thành từng byte), còn đối với kiến trúc Von_Neuman, độ dài lệnh luôn là bội số của 1 byte( do dữ liệu được tổ chức thành từng byte) Đặc điểm này được minh họa cụ thể trong hình 2.1

Havard

Data

Program memory

Non-Neuman

CPU

Program data memory

Trang 31

cố định( ví dụ đối với họ 16Fxxxx chiều dài mã lệnh luôn là 14 bit) và cho phép thực thi lệnh trong một chu kì của xung clock( ngoại trừ một số trường hợp đặc biệt như lệnh nhảy, lệnh gọi chương trình con … cần hai chu kì xung đồng hồ) Điều này có nghĩa tập lệnh của vi điều khiển thuộc cấu trúc Havard sẽ ít lệnh hơn, ngắn hơn, đơn giản hơn để đáp yêu cầu mã hóa lệnh bằng một số lượng bit nhất định

Vi điều khiển được tổ chức theo kiến trúc Havard còn được gọi là vi điều khiển RISChay vi điều khiển có tập lệnh rút gọn Vi điều khiển được thiết kế theo kiến trúc Von- Neuman còn được gọi là vi điều khiển CISC hay vi điều khiển có tập lệnh phức tạp vì mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit( 1byte)

Trang 32

20

2.1.3 PIPELINING

Pipelining là một kĩ thuật thực hiên lệnh trong đó các lệnh được thực hiện theo

kiểu gối đầu nhằm tận dụng những khoảng thời gian rỗi giữa các công đoạn, qua đó

làm tăng tốc độ thực hiện lệnh của vi xử lí

Đây chính là cơ chế của các vi điều khiển PIC Một chu kì lệnh của vi điều

khiển sẽ bao gồm 4 xung clock Ví dụ ta sử dụng oscillator có tấn số 4 MHZ, thì xung

lệnh sẽ có tần số 1 MHz( chu kì lệnh sễ là 1us) Giả sử có một đoạn chương trình như

5 Instruction @ address SUB_1

Ở đây ta chỉ bàn đến quy trình vi điều khiển xử lí đoạn chương trình trên thông

qua từng chu kì lệnh Quá trình trên sẽ được thực thi như sau:

FetchSUB_

1

Trang 33

21

2.2 Một vài thông số về vi điều khiển PIC 16F877A

Đây là vi điều khiển thuộc họ PIC16Fxxxx với tập lệnh gồm 35 lệnh có độ dài

14 bit Mỗi lệnh đều được thực thi trong một chu kì xung clock Tốc độ hoạt động tối

đa cho phép là 20MHz với một chu kì lệnh là 2000ns Bộ nhớ chương trình 8Kx14 bit,

bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256x8 byte Số PORT I/O là 5 với 33 pin I/O

Các đặc tính ngoại vi bao gồm các khối chức năng sau:

- Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit

- Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep

- Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler

Hai bộ Capture/ So sánh/ Điều chế độ rộng xung

Các chuẩn giao tiếp nối tiếp SSP, SPI và 12C

Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ

Cổng giao tiếp song song PSP với các chân điều khiển RD, WR, CS ở bên ngoài Các đặc tính Analog:

- 8 kênh chuyển đổi ADC 10 bit

- Hai bộ so sánh

Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:

- Bộ nhớ flash với khả năng ghi xóa được 100.000 lần

- Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần

- Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm

- Khả năng tự nạp chương trình với sự điều khiển của phần mềm

- Nạp được chương trình ngay trên mạch điện ICSP thông qua 2 chân

- Watchdog Timer với bộ dao động trong

- Chức năng bảo mật mã chương trình

- Chế độ sleep

- Có thể hoạt động với nhiều dạng Oscillator khác nhau

Trang 34

Để mã hóa được địa chỉ của 8 Kword bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit (PC<12:0>)

Trang 35

23

Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector) Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrup vector)

Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình Bộ nhớ stack sẽ được đề cập cụ thể trong phần sau

0004h

07FFh 0FFFh

PC<12:0>

Stack Level 1 Stack Level 2

Bộ nhớ chương trình trên chip

0000h

0005h 0800h 1000h 1800h 1FFFh

13 CALL, RETURN,

RETFFIB, RETLW

Trang 36

24

ở tất cả các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt bệnh của chương trình Sơ đồ cụ thể của bộ nhớ dữ liệu PIC 16F877A như sau:

Indirect addr 00h

01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h

7Fh

Indirect addr 80h

81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h

EFh F0h FFh

Indirect addr 100h

101h 102h 103h 104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch 10Dh 10Eh 10Fh 110h 111h 112h 113h 114h 115h 116h 117h 118h 119h 11Ah 11Bh 11Ch 11Dh 11Eh 11Fh 120h

16Fh 170h 17Fh

Indirect addr 180h

181h 182h 183h 184h 185h 186h 187h 188h 189h 18Ah 18Bh 18Ch 18Dh 18Eh 18Fh 190h 191h 192h 193h 194h 195h 196h 197h 198h 199h 19Ah 19Bh 19Ch 19Dh 19Eh 19Fh 1A0h

1EFh 1F0h 1FFh

T1CON

General Purpose Register

16 Bytes

General Purpose Register

80 Bytes

General Purpose Register

80 Bytes

General Purpose Register

80 Bytes Accesses

70h-7Fh

Accesses 70h-7Fh

Accesses 70h-7Fh

Hình 2.6: Sơ đồ bộ nhớ dữ liệu PIC 16F877A

Trang 37

25

2.2.2 Thanh ghi của PIC 16F877A

2.2.2.1 Thanh ghi chức năng đặc biệt SFR

Đây là thanh ghi được sử dụng bởi CPU hoặc dùng để thiết lập và điều khiển các khối chức năng được tích hợp bên trong vi điều khiển Có thể nhận thanh ghi SRF làm hai loại: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và thanh ghi SRF dùng để thiết lập và điều khiển các khối chức năng bên ngoài( ví dụ như ADC, PWM,…) Phần này sẽ đề cập đến các thanh ghi liên quan đến các chức năng bên trong Các thanh ghi dùng để thiết lập và điều khiển các khối chức năng đó

a) Thanh ghi STATUS

Thanh ghi STATUS là một thanh ghi 8 bit, có thể tác động đến từng bit Thanh ghi này có mặt ở cả 4 bank bộ nhớ với địa chỉ tương đối là 03h Đặc điểm của vi xử lý PIC16F877A là phải chọn bank thanh ghi trước khi sử dụng các thanh ghi thuộc một bank bất kỳ, mà thanh ghi STATUS có 3 bit sử dụng trong việc chọn bank thanh ghi cho cả chế độ địa chỉ gián tiếp và trực tiếp, nên thanh ghi này có mặt trong cả 4 bank thanh ghi tạo sự tiện lợi khi lập trình

Bit 7 IRP: Bit lựa chọn bank thanh ghi( Sử dụng cho địa chỉ gián tiếp)

Mỗi bank là 128 byte

Bit 4 TO : Bit báo hiệu hoạt động của WDT

1: Lệnh xóa WDT hoặc Sleep xảy ra

Trang 38

26

0: WDT hoạt động

Bit 3 PD : Bit báo công suất thấp( Power down bit)

1: Sau khi nguồn tăng hoặc có lệnh xóa WDT

0: Thực thi lệnh Sleep

Bit 2 Z: Bit Zero

1: Khi kết quả của một phép toán bằng 0

0: Khi kết quả của một phép toán khác 0

Bit 1 DC: Digit Carry

1: Có một số nhớ sinh ra bởi phép cộng hoặc trừ 4 bit thấp

0: Không có số nhớ sinh ra

Bit 0: Cờ nhớ( Cary Flag)/Borrow

1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ 4 bit cao

0: Không có số nhớ sinh ra

b) Thanh ghi OPTION_REG (81,181h):

Thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0

c) Thanh ghi INTCON( 1Bh, 8Bh, 10Bh, 18Bh ):

Thanh ghi cho phép đọc và ghi, chứa các bit điều khiển và các bit cờ hiệu khi Timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrput-on-change tại các chân của PORTB

d) Thanh ghi PIE1( 8Ch):

Chứa các bịt điều khiển chi tiết các ngắt của các khối chức năng ngoại vi

Trang 39

27

e) Thanh ghi PIR1( 0Ch):

Chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1

f) Thanh ghi PIE2 (8Dh):

Chứa các bit điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM

g) Thanh ghi PIR2(0Dh):

Chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được phép bởi các bit điều khiển chứa trong thanh ghi PIE2

h) Thanh ghi PCON( 8Eh):

Chứa các cờ hiệu cho biết trạng thái các chế độ reset của vi điều khiển

2.2.2.2 Thanh ghi mục đích chung GPR

Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSG Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình

Trang 40

28

Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là vùng nhớ đặc biệt không cho phép đọc hay ghi Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được

vi điều khiển cất vào trong stack Khi một trong các lệnh RETURN, RETLW hay RETFIE được thực thi, giá trị PC sẽ tự động được lấy ra từ trong stack, vi điều khiển

sẽ thực hiện tiếp chương trình theo đúng qui trình định trước

Bộ nhớ Stack trong vi điều khiển PIC họ 16F877A có khả năng chứ được 8 địa chỉ và hoạt động theo cơ chế xoay vòng Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9

sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10

sẽ ghi đè lên giá trị cất vào Stack lần thứ 2

Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó không biết được khi nào stack tràn Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không

có lệnh POP hay PUSH, các thao tác với bộ nhớ stak sẽ hoàn toàn được điều khiển bới CPU

2.4 Các cổng xuất nhập của PIC16F877A

Cổng xuất nhập( I/O) chính là phương tiện mà vi điều khiển dùng để tương tác với thế giới bên ngoài Sự tương tác này rất đa dạng và thông qua quá trình tương tác

đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng

Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân( I/O pin), tùy theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân trong mỗi cổng có thể khác nhau Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự tác động của đặc tính ngoại vi nên trên đối với thế giới bên ngoài Chức năng của từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó

Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD và PORTE Cấu trúc và chức năng của từng cổng xuất nhập sẽ đề cập cụ thể trong phần sau

Ngày đăng: 09/05/2021, 17:02

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w