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 1i
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
Trang 2Em 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 3iii
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 4iv
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 5v
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 6vi
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 7vii
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 8viii
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 9Hì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 10Bả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 11xi
TỪ VIẾT TẮT
PCON : Power Control Register
TMOD : Timer Mode Register
TCON : Timer Control Register
SCON : Serial Port Control Register
Trang 12xii
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 142
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 153
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 164
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 1732 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 186
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 197
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 20Lư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 219
Ở đâ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 22Cá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 2300= 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 2412
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 2513
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 2614
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 27R2 8,2k
R5 100
5V
RST
5V
C1 10uF S1
C3 10uF
RST
R6 8.2K
Trang 2816
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 29Lệ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 3018
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 31cố đị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 3220
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 3321
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 3523
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 3624
ở 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 3725
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 3826
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 3927
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 4028
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