MỤC LỤCCHƯƠNG I: TỔNG QUAN CHUNG1.1 Giới Thiệu Đề Tài1.2 Mục Đích Nghiên Cứu Đề TàiCHƯƠNG II: GIỚI THIỆU CÁC PHẦN TỬ TRONG MẠCH2.1. Giới thiệu về vi điều khiển 89C512.1.1. Giơí thiệu và lịch sử phát triển của các bộ vi điều khiển2.1.1.a. Giơí thiệu2.1.1.b. lịch sử phát triển của các bộ vi điều khiển2.1.2. Khảo sát bộ vi điều khiển 89C512.1.2.a. Hình dạng và chức năng các chân vi điều khiển2.1.2.b. Tổ chức bộ nhớ2.1.2.c. Bộ nhớ ngoài( External Memory)2.1.2.d. Hoạt động Reset2.1.2.e. Hoạt động Timer của 80512.1.3. Khảo sát tập lệnh của 80512.1.3.a. Các chế độ định địa chỉ (ADDRESSING MODE)2.1.3.b. Các nhóm lệnh của 80512.2. Tổng quan về LCD2.2.1. Giơí thiệu về LCD họ HD447802.2.2. Hoạt động của LCD2.2.2.a. Chức năng các chân2.2.2.b. Điều kiện hoạt động của LCD2.2.2.c Sơ đồ khối của HD447802.2.2.d.Tập lệnh của LCD2.2.2.e. Khởi tạo LCD2.3. Động cơ bước2.3.1. Giơí thiệu chung về động cơ bước2.3.2. Nguyên lý hoạt động2.3.3. Phương pháp điều khiển2.3.4. Cấu tạo và phân loại động cơ bước3. TIP122a. Hình dáng và cấu tạob. Về cấu trúcc. Một số đăc tính kĩ thuật của tip 1224. IC Đệm SN74LS245NCHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG MẠCH3.1Sơ Đồ Khối3.1.Lưu Đồ Giải Thuật3.2Sơ Đồ Nguyên Lýa.Khối Nguồnb.Khối Công Suấtc.Khối Hiển Thịd.Khối Bàn Phíme.Khối Xử Lý3.4 Nguyên lý hoạt động của mạch điều khiển động cơ bước dùng vi xử lý3.5 Cách xác định các đầu dây của động cơ bước3.6 Sơ Mạch In3.7 Chương Trinh Điều KhiểnCHƯƠNG 4: KẾT LUẬN VÀ ĐÁNH GIÁ4.1. Kết luận4.2. Tài Liệu Tham KhảoCHƯƠNG I: TỔNG QUAN CHUNG1.1Giới Thiệu Đề Tài. Hiện nay ngành Điện Điện Tử Tự Động Hóa là một trong những ngành rất triển và được đánh giá là triển vọng của ngành kinh tế cũng như khoa học kĩ thuật công nghệ của ngành công nghiệp đất nước Việt Nam nói riêng và cả thế giới nói chung. Việc phát triển, chế tạo các loại chip, các loại IC tích hợp thông dụng, có ứng dụng nhiều trong thực tế, nó đóng góp một vai trò lớn trong quá trình phát triển khoa học kĩ thuật liên quan đến kĩ thuật điện – điện tử tự động hóa. Trong những thiết bị ứng dụng trong công nghiệp cũng như tiêu dùng ngày nay động cơ bước đã và đang được sử dụng một cách rộng rãi . Động cơ bước được ứng dụng nhiều trong ngành tự động hóa, chúng được ứng dụng trong các thiết bị cần điền khiển chính xác. Động cơ bước là một loại động cơ điện nhưng có nguyên lý và ứng dụng khác biệt với đa số các động cơ điện thông thường. Động cơ bước không quay theo cơ chế thông thường, chúng quay theo từng bước nên có độ chính xác rất cao về mặt điều khiển. chúng làm việc nhờ các bộ chuyển mạch điện tử đưa các tín hiệu điều khiển stato theo thứ tự và một tần số nhất định. Tông số góc quay của roto phụ thuộc vào thứ tự chuyển đổi và tần số chuyển đổi. Vì động cơ bước có tầm quan trọng trong sản xuất công nghiệp cũng như trong đời sống, trong nội dung của đồ án 1 này, nhóm em xin trình bày về điều khiển cơ bản về chiều quay của động cơ bước, sử dụng Vi Điều Khiển họ 8051 để lập trình.1.2Mục Đích Nghiên Cứu Đề Tài. Nội dụng của việc nghiên cứu đề tài là nhằm tìm hiểu cách thức giao tiếp của phím nhấn, vi điều khiển và động cơ từ đó có thể phát triển thành một hệ thống điều khiển hoàn chỉnh có khả năng áp dụng vào thực tế. Động cơ bước được ứng dụng nhiều trong ngành tự động hóa, chúng được ứng dụng trong các thiết bị cần điều khiển chính xác. Ví dụ: điều khiển robot, điều khiển lập trình trong các thiết bị gia công cắt gọt, điều khiển trong máy bay, trong ổ đĩa của máy tính, máy in …..CHƯƠNG II: GIỚI THIỆU CÁC PHẦN TỬ TRONG MẠCH2.1. Giới thiệu về vi điều khiển 89C51:2.1.1. Giới thiệu và lịch sử phát triển của các bộ vi điều khiển:2.1.1.a. Giới thiệu:Bộ vi điều khiển viết tắt là Microcontroller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống. Theo các tập lệnh của người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó.Trong các thiết bị điện và điện và điện tử dân dụng, các bộ vi điều khiển, điều khiển hoạt động của TV, máy giặt, đầu đọc laser, điện thoại, lò viba … Trong hệ thống sản xuất tự động, bộ vi điều khiển được sử dụng trong Robot, dây chuyền tự động. Các hệ thống càng “thông minh” thì vai trò của hệ vi điều khiển càng quan trọng.2.1.1.b. lịch sử phát triển của các bộ vi điều khiển:Bộ vi điều khiển thực ra, là một loại vi xử lí trong tập hợp các bộ vi xử lý nói chung. Bộ vi điều khiển được phát triển từ bộ vi xử lí, từ những năm 70 do sự phát triển và hoàn thiện về công nghệ vi điện tử dựa trên kỹ thuật MOS (MetalOxideSemiconductor) , mức độ tích hợp của các linh kiện bán dẫn trong một chip ngày càng cao.Năm 1971 xuất hiện bộ vi xử lí 4 bit loại TMS1000 do công ty texas Instruments vừa là nơi phát minh vừa là nhà sản xuất. Nhìn tổng thể thì bộ vi xử lí chỉ có chứa trên một chip những chức năng cần thiết để xử lí chương trình theo một trình tự, còn tất cả bộ phận phụ trợ khác cần thiết như : bộ nhớ dữ liệu , bộ nhớ chương trình , bộ chuyển đổi AID, khối điều khiển, khối hiển thị, điều khiển máy in, khối đồng hồ và lịch là những linh kiện nằm ở bên ngoài được nối vào bộ vi xử lí.Mãi đến năm 1976 công ty INTEL (InterlligenElictronics). Mới cho ra đời bộ vi điều khiển đơn chip đầu tiên trên thế giới với tên gọi 8048. Bên cạnh bộ xử lí trung tâm 8048 còn chứa bộ nhớ dữ liệu, bộ nhớ chương trình, bộ đếm và phát thời gian các cổng vào và ra Digital trên một chip.Các công ty khác cũng lần lược cho ra đời các bộ vi điều khiển 8bit tương tự như 8048 và hình thành họ vi điều khiển MCS48 (Microcontrollersustem48).Đến năm 1980 công ty INTEL cho ra đời thế hệ thứ hai của bộ vi điều khiển đơn chip với tên gọi 8051. Và sau đó hàng loạt các vi điều khiển cùng loại với 8051 ra đời và hình thành họ vi điều khiển MCS51 .Đến nay họ vi điều khiển 8 bit MCS51 đã có đến 250 thành viên và hầu hết các công ty hàng dẫn hàng đầu thế giới chế tạo. Đứng đầu là công ty INTEL và rất nhiều công ty khác như : AMD, SIEMENS, PHILIPS, DALLAS, OKI …Ngoài ra còn có các công ty khác cũng có những họ vi điều khiển riêng như: Họ 68HCOScủa công ty MotorolaHọ ST62của công ty SGSTHOMSONHọ H8của công ty HitachiHọ piccủa công ty Microchip2.1.2. Khảo sát bộ vi điều khiển 89C51:Đặc điểm và chức năng hoạt động của các IC họ MSC51 hoàn toàn tương tự như nhau. Ở đây giới thiệu IC8951 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất. Các đặc điểm của 8051 được tóm tắt như sau :4 KB EPROM bên trong.128 Byte RAM nội.4 Port xuất nhập IO 8 bit.Giao tiếp nối tiếp.64 KB vùng nhớ mã ngoài64 KB vùng nhớ dữ liệu ngoại.Xử lí Boolean (hoạt động trên bit đơn).210 vị trí nhớ có thể định vị bit.4 s cho hoạt động nhân hoặc chia.Các đặc điểm của 8951 được tóm tắt như sau :8 KB EPROM bên trong.128 Byte RAM nội.4 Port xuất nhập IO 8 bit.Giao tiếp nối tiếp.
Trang 1MỤC LỤC
CHƯƠNG I: TỔNG QUAN CHUNG 3
1.1 Giới Thiệu Đề Tài 3
1.2 Mục Đích Nghiên Cứu Đề Tài 3
CHƯƠNG II: GIỚI THIỆU CÁC PHẦN TỬ TRONG MẠCH 4
2.1 Giới thiệu về vi điều khiển 89C51 4
2.1.1 Giơí thiệu và lịch sử phát triển của các bộ vi điều khiển 4
2.1.1.a Giơí thiệu 4
2.1.1.b lịch sử phát triển của các bộ vi điều khiển 4
2.1.2 Khảo sát bộ vi điều khiển 89C51 5
2.1.2.a Hình dạng và chức năng các chân vi điều khiển 6
2.1.2.b Tổ chức bộ nhớ 10
2.1.2.c Bộ nhớ ngoài( External Memory) 12
2.1.2.d Hoạt động Reset 15
2.1.2.e Hoạt động Timer của 8051 16
2.1.3 Khảo sát tập lệnh của 8051 20
2.1.3.a Các chế độ định địa chỉ (ADDRESSING MODE) 20
2.1.3.b Các nhóm lệnh của 8051 22
2.2 Tổng quan về LCD 27
2.2.1 Giơí thiệu về LCD họ HD44780 27
2.2.2 Hoạt động của LCD 28
2.2.2.a Chức năng các chân 29
2.2.2.b Điều kiện hoạt động của LCD 30
2.2.2.c Sơ đồ khối của HD44780 31
2.2.2.d.Tập lệnh của LCD 34
2.2.2.e Khởi tạo LCD 38
2.3 Động cơ bước 40
2.3.1 Giơí thiệu chung về động cơ bước 40
2.3.2 Nguyên lý hoạt động 42
2.3.3 Phương pháp điều khiển 43
Trang 22.3.4 Cấu tạo và phân loại động cơ bước 46
3 TIP122 48
a Hình dáng và cấu tạo 49
b Về cấu trúc 49
c Một số đăc tính kĩ thuật của tip 122 50
4 IC Đệm SN74LS245N 51
CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG MẠCH 52
3.1Sơ Đồ Khối 53
3.1.Lưu Đồ Giải Thuật 53
3.2Sơ Đồ Nguyên Lý 56
a Khối Nguồn 57
b Khối Công Suất 57
c Khối Hiển Thị 58
d Khối Bàn Phím 58
e Khối Xử Lý 59
3.4 Nguyên lý hoạt động của mạch điều khiển động cơ bước dùng vi xử lý 59
3.5 Cách xác định các đầu dây của động cơ bước 60
3.6 Sơ Mạch In 61
3.7 Chương Trinh Điều Khiển 63
CHƯƠNG 4: KẾT LUẬN VÀ ĐÁNH GIÁ 71
4.1 Kết luận 71
4.2 Tài Liệu Tham Khảo 71
Trang 3CHƯƠNG I: TỔNG QUAN CHUNG
1.1Giới Thiệu Đề Tài.
Hiện nay ngành Điện - Điện Tử - Tự Động Hóa là một trong những ngành rất triển và được đánh giá là triển vọng của ngành kinh tế cũng như khoa học kĩ thuật công nghệ của ngành công nghiệp đất nước Việt Nam nói riêng và cả thế giới nói chung Việc phát triển, chế tạo các loại chip, các loại IC tích hợp thông dụng, có ứng dụng nhiều trong thực tế, nó đóng góp một vai trò lớn trong quá trình phát triển khoa học kĩ thuật liên quan đến kĩ thuật điện – điện tử - tự động hóa
Trong những thiết bị ứng dụng trong công nghiệp cũng như tiêu dùng ngày nay động cơ bước đã và đang được sử dụng một cách rộng rãi Động cơ bước được ứng dụng nhiều trong ngành tự đông hóa, chúng được ứng dụng trong các thiết bị cần điền khiển chính xác Động cơ bước là một loại động cơ điện nhưng có nguyên lý và ứng dụng khác biệt với đa số các động cơ điện thông thường
Động cơ bước không quay theo cơ chế thông thường, chúng quay theo từng bước nên có độ chính xác rất cao về mặt điều khiển chúng làm việc nhờ các bộ chuyển mạch điện tử đưa các tín hiệu điều khiển stato theo thứ tự và một tần số nhất định Tông số góc quay của roto phụ thuộc vào thứ tự chuyển đổi và tần số chuyển đổi
Vì động cơ bước có tầm quan trọng trong sản xuất công nghiệp cũng như trong đời sống, trong nội dung của đồ án 1 này, nhóm em xin trình bày về điều khiển cơ bản về chiều quay của động cơ bước, sử dụng Vi Điều Khiển họ 8051 để lập trình
1.2Mục Đích Nghiên Cứu Đề Tài.
Nội dụng của việc nghiên cứu đề tài là nhằm tìm hiểu cách thức giao tiếp của phím nhấn, vi điều khiển và động cơ từ đó có thể phát triển thành một hệ thống điều khiển hoàn chỉnh có khả năng áp dụng vào thực tế
Động cơ bước được ứng dụng nhiều trong ngành tự động hóa, chúng được ứng dụng trong các thiết bị cần điều khiển chính xác Ví dụ: điều khiển robot, điều khiển lập trình trong các thiết bị gia công cắt gọt, điều khiển trong máy bay, trong ổ đĩa của máy tính, máy in …
Trang 4CHƯƠNG II: GIỚI THIỆU CÁC PHẦN TỬ TRONG
MẠCH
2.1 Giới thiệu về vi điều khiển 89C51:
2.1.1 Giơí thiệu và lịch sử phát triển của các bộ vi điều khiển:
2.1.1.a Giơí thiệu:
Bộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống Theo các tập lệnh của người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó
Trong các thiết bị điện và điện và điện tử dân dụng, các bộ vi điều khiển, điều khiển hoạt động của TV, máy giặt, đầu đọc laser, điện thọai, lò vi-ba … Trong hệ thống sản xuất
tự động, bộ vi điều khiển được sử dụng trong Robot, dây chuyền tự động Các hệ thống càng “thông minh” thì vai trò của hệ vi điều khiển càng quan trọng
2.1.1.b lịch sử phát triển của các bộ vi điều khiển:
Bộ vi điều khiển thực ra, là một loại vi xử lí trong tập hợp các bộ vi xử lý nói chung
Bộ vi điều khiển được phát triển từ bộ vi xử lí, từ những năm 70 do sự phát triển và hoàn thiện về công nghệ vi điện tử dựa trên kỹ thuật MOS (Metal-Oxide-Semiconductor) , mức
độ tích hợp của các linh kiện bán dẫn trong một chip ngày càng cao
Năm 1971 xuất hiện bộ vi xử lí 4 bit loại TMS1000 do công ty texas Instruments vừa
là nơi phát minh vừa là nhà sản xuất Nhìn tổng thể thì bộ vi xử lí chỉ có chứa trên một chip những chức năng cần thiết để xử lí chương trình theo một trình tự, còn tất cả bộ phận phụ
trợ khác cần thiết như : bộ nhớ dữ liệu , bộ nhớ chương trình , bộ chuyển đổi AID, khối
điều khiển, khối hiển thị, điều khiển máy in, khối đồng hồ và lịch là những linh kiện nằm ở bên ngoài được nối vào bộ vi xử lí
Mãi đến năm 1976 công ty INTEL (Interlligen-Elictronics) Mới cho ra đời bộ vi điều khiển đơn chip đầu tiên trên thế giới với tên gọi 8048 Bên cạnh bộ xử lí trung tâm
8048 còn chứa bộ nhớ dữ liệu, bộ nhớ chương trình, bộ đếm và phát thời gian các cổng vào
và ra Digital trên một chip
Các công ty khác cũng lần lược cho ra đời các bộ vi điều khiển 8bit tương tự như 8048 và hình thành họ vi điều khiển MCS-48 (Microcontroller-sustem-48)
Trang 5Đến năm 1980 công ty INTEL cho ra đời thế hệ thứ hai của bộ vi điều khiển đơn chip với tên gọi 8051 Và sau đó hàng loạt các vi điều khiển cùng loại với 8051 ra đời và hình thành
họ vi điều khiển MCS-51
Đến nay họ vi điều khiển 8 bit MCS51 đã có đến 250 thành viên và hầu hết các công ty hàng dẫn hàng đầu thế giới chế tạo Đứng đầu là công ty INTEL và rất nhiều công ty khác như : AMD, SIEMENS, PHILIPS, DALLAS, OKI …
Ngoài ra còn có các công ty khác cũng có những họ vi điều khiển riêng như:
Họ 68HCOS của công ty Motorola
2.1.2 Khảo sát bộ vi điều khiển 89C51:
Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự như nhau Ở đây giới thiệu IC8951 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất
Các đặc điểm của 8051 được tóm tắt như sau :
4 KB EPROM bên trong
128 Byte RAM nội
4 Port xuất /nhập I/O 8 bit
Giao tiếp nối tiếp
64 KB vùng nhớ mã ngoài
64 KB vùng nhớ dữ liệu ngoại
Xử lí Boolean (hoạt động trên bit đơn)
210 vị trí nhớ có thể định vị bit
4 µs cho hoạt động nhân hoặc chia
Các đặc điểm của 8951 được tóm tắt như sau :
8 KB EPROM bên trong
128 Byte RAM nội
4 Port xuất /nhập I/O 8 bit
Giao tiếp nối tiếp
Trang 6Hình 2.1: Sơ đồ khối vi điều khiển 8051
2.1.2.a Hình dạng và chức năng các chân vi điều khiển:
Trang 7Hình 2.2: Sơ đồ chân IC 8051 Hình 2.3: Sơ đồ chân IC 8051
8051 cĩ tất cả 40 chân cĩ chức năng như các đường xuất nhập Trong đĩ cĩ 24 chân
cĩ tác dụng kép (cĩ nghĩa 1 chân cĩ 2 chức năng), mỗi đường cĩ thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ
Port 0 :
Trang 8- Port 0 là port có 2 chức năng ở các chân 32 – 39 của 8051 Trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO Đối với các thiết kế cỡ lớn
có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu
Port 1:
- Port 1 là port IO trên các chân 1-8 Các chân được ký hiệu P1.0, P1.1, P1.2, … có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài
Bit Tên Chức năng chuyển đổi
P3.2P3.3P3.4P3.5P3.6P3.7
INT0\
INT1\
T0T1WR\
RD\
Ngõ vào ngắt cứng thứ 0
Ngõ vào ngắt cứng thứ 1
Ngõ vào của TIMER/COUNTER thứ 0
Ngõ vào của TIMER/COUNTER thứ 1
Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
Tín hiệu đọc bộ nhớ dữ liệu ngoài
Bảng 2.1: Chức năng các chân của port 3 Các ngõ tín hiệu điều khiển:
Ngõ tín hiệu PSEN (Program store enable): PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nói đến chân 0E\ (output enable) của Eprom cho phép đọc các byte mã lệnh
Trang 9- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong
8951 để giải mã lệnh Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic
1
Ngõ tín hiệu điều khiển ALE (Address Latch Enable ) :
- Khi 8051 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt
- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip 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ân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 8951
Ngõ tín hiệu EA\(External Access):
- Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc mức 0 Nếu ở mức
1, 8951 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8 Kbyte Nếu ở mức
0, 8051 sẽ thi hành chương trình từ bộ nhớ mở rộng Chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 8051
Ngõ tín hiệu RST (Reset) :
-Ngõ vào RST ở chân 9 là ngõ vào Reset của 8951 Khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống Khi cấp điện mạch tự động Reset
Các ngõ vào bộ dao động X1, X2:
- Bộ dao động được tích hợp bên trong 8051, khi sử dụng 8051 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ Tần số thạch anh thường sử dụng cho 8051 là 12Mhz
Chân 40 (Vcc) được nối lên nguồn 5V
2.1.2.b Tổ chức bộ nhớ : Bản đồ bộ nhớ Data trên chip như sau:
Trang 107F FF
Trang 11F0 F7 F6 F5 F4 F
3 F2 F1 F0 B
RAM ña duïng
E0 E7 E6 E5 E4 E
3 E2 E1 E0 ACC
D
Trang 12Bảng 2.2: Bộ nhớ dữ liệu trên chíp 8051
- Bộ nhớ trong 8051 bao gồm ROM và RAM RAM trong 8951 bao gồm nhiều
thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt
- 8051 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu Chương trình và dữ liệu có thể chứa bên trong 8051 nhưng 8051 vẫn có thể kết nối với 64K byte bộ nhớ chương trình và 64K byte dữ liệu
RAM bên trong 8051 được Phân chia như sau:
Các bank thanh ghi có địa chỉ từ 00H đến 1FH
RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH
RAM đa dụng từ 30H đến 7FH
Các thanh ghi chức năng đặc biệt từ 80H đến FFH
Trang 13- Mặc dù trên hình vẽ cho thấy 80 byte đa dụng chiếm các địa chỉ từ 30H đến 7FH, 32 byte dưới từ 00H đến 1FH cũng có thể dùng với mục đích tương tự (mặc dù các địa chỉ này
đã có mục đích khác)
- Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểu địa chỉ trực tiếp hoặc gián tiếp
Các bank thanh ghi:
- 32 byte thấp của bộ nhớ nội được dành cho các bank thanh ghi Bộ lệnh 8051 hổ trợ
8 thanh ghi có tên là R0 đến R7 và theo mặc định sau khi reset hệ thống, các thanh ghi này
có các địa chỉ từ 00H đến 07H
- Các lệnh dùng các thanh ghi RO đến R7 sẽ ngắn hơn và nhanh hơn so vớ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 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi RO đến R7 để chuyển đổi việc truy xuất các bank thanh ghi ta phải thay đổi các bit chọn bank trong thanh ghi trạng thái
2.1.2.c Bộ nhớ ngoài( External Memory):
- 8051 có khả năng mở rộng bộ nhớ lên đến 64K byte bộ nhớ chương trình và 64k byte bộ nhớ dữ liệu ngoài Do đó có thể dùng thêm RAM và ROM nếu cần
- Khi dùng bộ nhớ ngoài, Port0 không còn chức năng I/O nữa Nó được kết hợp giữa bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) với tín hiệu ALE để chốt byte của bus địa chỉ khi bắt đầu mỗi chu kỳ bộ nhớ Port được cho là byte cao của bus địa chỉ
Truy xuất bộ nhớ chương trinh ngoài (Accessing External Code Memory) :
- Bộ nhớ chương trình bên ngoài là bộ nhớ ROM được cho phép của tín hiệu PSEN\ Trong một chu kỳ máy tiêu biểu, tín hiệu ALE tích 2 lần Lần thứ nhất cho phép 74HC373
mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thì byte thấp và byte cao của bộ đếm chương trình đều có nhưng EPROM chưa xuất vì PSEN\ chưa tích cực, khi tín hiệu lên một trở lại thì Port 0 đã có dữ liệu là Opcode ALE tích cực lần thứ hai được giải thích tương tự
và byte 2 được đọc từ bộ nhớ chương trình Nếu lệnh đang hiện hành là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ đi
Trang 14Hình 2.4: Truy xuất bộ nhớ chương trình ngoài
Truy xuất bộ nhớ dữ liệu ngoài (Accessing External Data Memory):
- Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được đọc hoặc ghi khi được cho phép của tín hiệu RD\ và WR Hai tín hiệu này nằm ở chân P3.7 (RD) và P3.6 (WR) Lệnh MOVX được dùng để truy xuất bộ nhớ dữ liệu ngoài và dùng một bộ đệm dữ liệu 16 bit (DPTR), R0 hoặc R1 như là một thanh ghi địa chỉ
- Các RAM có thể giao tiếp với 8051 tương tự cách thức như EPROM ngoại trừ chân RD\ của 8051 nối với chân OE\ ( Output Enable) của RAM và chân WR\ của 8051 nối với chân WE\ của RAM Sự nối các bus địa chỉ và dữ liệu tương tự như cách nối của EPROM
Trang 15
Hình 2.5: truy xuất bộ nhớ dữ liệu ngoài
Sự giải mã địa chỉ (Address Decoding):
- Sự giải mã địa chỉ là một yêu cầu tất yếu để chọn EPROM, RAM, 8279, … Sư
giải mã địa chỉ đối với 8051 để chọn các vùng nhớ ngoài như các vi điều khiển Nếu các con EPROM hoặc RAM 8K được dùng thì các bus địa chỉ phải được giải mã để chọn các IC nhớ nằm trong phạm vi giới hạn 8K: 0000H÷1FFFH, 2000H÷3FFFH,…
- Một cách cụ thể, IC giải mã 74HC138 được dùng với những ngõ ra của nó được nối với những ngõ vào chọn Chip CS (Chip Select) trên những IC nhớ EPROM, RAM, … Hình sau đây cho phép kết nối nhiều EPROM và RAM
Trang 16
Hình 2.7: Reset bằng tay
Trang 17Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC được reset tai địa chỉ 0000H Khi ngõ vào RST xuống mức thấp, chương trình luơn bắt đầu tại địa chỉ 0000H của
bộ nhớ chương trình Nội dung của RAM trên chip khơng bị thay đổi bởi tác động của ngõ vào reset
2.1.2.e Hoạt động Timer của 8051:
Các Timer được ứng dụng thực tế cho các hoạt động định hướng 8051 cĩ 2 bộ Timer 16 bit, mỗi Timer cĩ 4 mode hoạt động Các Timer ‚ung để đếm giờ, đếm các sự kiện cần thiết và
sự sinh ra tốc độ của tốc độ Baud bởi sự gắn liền Port nối tiếp
Mỗi sự định thời là một Timer 16 bit, do đĩ tầng cuối cùng là tầng thứ 16 sẽ chia tần số clock vào cho 216 = 65.536
Các Timer của 8051 được truy xuất bởi việc ‚ung 6 thanh ghi chức năng đặc biệt như sau :
Bảng: 2.3: các thanh ghi đặc biệt của Timer
Thanh ghi điều khiển chế độ timer TMODtimer mode register):
Thanh ghi mode gồm hai nhĩm 4 bit là: 4 bit thấp đặt mode hoạt động cho Timer 0 và 4 bit cao đặt mode hoạt động cho Timer 1 8 bit của thanh ghi TMOD được tĩm tắt như sau:
Bit Tên Timer Mơ tả
7 GATE 1 Khi GATE = 1, Timer chỉ làm việc khi INT1=1
6 C/T 1 Bit cho đếm sự kiện hay ghi giờ
Trang 18C/T = 1 : Đếm sự kiện C/T = 0 : Ghi giờ đều đặn
5 M1 1 Bit chọn mode của Timer 1
4 M0 1 Bit chọn mode của Timer 1
3 GATE 0 Bit cổng của Timer 0
2 C/T 0 Bit chọn Counter/Timer của Timer 0
1 M1 0 Bit chọn mode của Timer 0
0 M0 0 Bit chọn mode của Timer 0
Bảng 2.4: thanh ghi điều khiển chế độ TMOD
Hai bit M0 và M1 của TMOD để chọn mode cho Timer 0 hoặc Timer 1
Timer 0 : TL0 là Timer 8 bit được điều khiển bởi các bit của Timer 0 TH0 tương tự nhưng được điều khiển bởi các bit của mode Timer 1
Timer 1 : Được ngừng lại
Bảng 2.5: chọn chế độ Timer
- TMOD không có bit định vị, nó thường được LOAD một lần bởi phần mềm ở đầu chương trình để khởi động mode Timer Sau đó sự định giờ có thể dừng lại, được khởi động lại như thế bởi sự truy xuất các thanh ghi chức năng đặc biệt của Timer khác.
Thanh ghi điều khiển timer TCON (timer control register):
Thanh ghi điều khiển bao gồm các bit trạng thái và các bit điều khiển bởi Timer 0 và Timer
1 Thanh ghi TCON có bit định vị Hoạt động của từng bit được tóm tắt như sau :
Bit Ký hiệu Địa chỉ Mô tả
Trang 19Bit TCON.7 TF1 8FH Cờ tràn Timer 1 được set bởi phần cứng ở sự
tràn, được xóa bởi phần mềm hoặc bởi phần cứng khi các vectơ xử lí đến thủ tục phục vụ ngắt ISR
TCON.6 TR1 8EH Bit điều khiển chạy Timer 1 được set hoặc
xóa bởi phần mềm để chạy hoặc ngưng chạy Timer
TCON.5 TF0 8DH Cờ tràn Timer 0(hoạt động tương tự TF1)
TCON.4 TR0 8CH Bit điều khiển chạy Timer 0 (giống TR1)
TCON.3 IE1 8BH Cờ kiểu ngắt 1 ngoài Khi cạnh xuống xuất
hiện trên INT1 thì IE1 được xóa bởi phần mềm hoặc phần cứng khi CPU định hướng đến thủ tục phục vụ ngắt ngoài
TCON.2 IT1 8AH Cờ kiểu ngắt 1 ngoài được set hoặc xóa bằng
phấn mềm bởi cạnh kích hoạt bởi sự ngắt ngoài
Bảng 2.6: Thanh ghi điều khiển TCON
Khởi tạo Timer:
Bit TRx trong thanh ghi có bit định vị TCON được điều khiển bởi phần mềm để bắt đầu hoặc kết thúc các Timer Để bắt đầu các Timer ta set bit TRx và để kết thúc Timer ta Clear TRx
Các chế độ hoạt động của Timer và cờ tràn:
8051 có 2 Timer là Timer 0 và timer 1 Ta dùng ký hiệu TLx và Thx để chỉ 2 thanh ghi byte thấp và byte cao của Timer 0 hoặc Timer 1
TLx (5 bit) THx (8 bit) TFx
Trang 20Timer Clock
Overflow
- Mode 0 là mode Timer 13 bit, trong đó byte cao của Timer (Thx) được đặt thấp và
5 bit trọng số thấp nhất của byte thấp Timer (TLx) đặt cao để hợp thành Timer 13 bit 3 bit cao của TLx không dùng
TLx (8 bit) THx (8 bit) TFx Timer Clock
- Mode 1 là mode Timer 16 bit, tương tự như mode 0 ngoại trừ Timer này hoạt động như một Timer đầy đủ 16 bit
- Cờ tràn là bit TFx trong thanh ghi TCON mà nó sẽ được đọc hoặc ghi bởi phần mềm
- Các thanh ghi Timer TLx và Thx có thể được đọc hoặc ghi tại bất kỳ thời điểm nào bởi phần mềm
TL x (8 bit) TFx
Trang 21sang 00H, không chỉ cờ tràn được set mà giá trị trong THx cũng được nạp vào TLx : Bộ đếm được tiếp tục từ giá trị này lên đến sự chuyển trạng thái từ FFH sang 00H kế tiếp và cứ thế tiếp tục Mode này thì phù hợp bởi vì các sự tràn xuất hiện cụ thể mà mỗi lúc nghỉ thanh ghi TMOD và THx được khởi động.
TL1 (8 bit) TH1 (8 bit) TL1 (8 bit) TH0 (8 bit) TF0 TF1 Timer Clock
Timer Clock
Timer Clock
- Mode 3 là mode Timer tách ra và là sự khác biệt cho mỗi Timer.
- Timer 0 ở mode 3 được chia là 2 timer 8 bit TL0 và TH0 hoạt động như những Timer riêng lẻ với sự tràn sẽ set các bit TL0 và TF1 tương ứng
- Timer 1 bị dừng lại ở mode 3, nhưng có thể được khởi động bởi việc ngắt nó vào một trong các mode khác Chỉ có nhược điểm là cờ tràn TF1 của Timer 1 không bị ảnh hưởng bởi các sự tràn của Timer 1 bởi vì TF1 được nối với TH0
- Mode 3 cung cấp 1 Timer ngoại 8 bit là Timer thứ ba của 8051 Khi vào Timer 0 ở mode 3, Timer có thể hoạt động hoặc tắt bởi sự ngắt nó ra ngoài và vào trong mode của chính nó hoặc có thể được dùng bởi Port nối tiếp như là một máy phát tốc độ Baud, hoặc nó
có thể dùng trong hướng nào đó mà không sử dụng Interrupt
2.1.3 Khảo sát tập lệnh của 8051:
Overflow
Trang 22Tập lệnh họ MSC-51 được sự kiểm tra của các mode định vị và các lệnh của chúng có các Opcode 8 bit Điều này cung cấp khả năng 28= 256 lệnh được thi hành và một lệnh không được định nghĩa Vài lệnh có 1 hoặc 2 byte bởi dữ liệu hoặc địa chỉ thêm vào Opcode Trong toàn bộ các lệnh có 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte.
2.1.3.a Các chế độ định địa chỉ (ADDRESSING MODE):
Các mode định vị là một bộ phận thống nhất của tập lệnh 8051 có 8 mode định vị được dùng như sau:
Có 4 dãy thanh ghi 32 byte đầu tiên của RAM dữ liệu trên Chip địa chỉ 00H ÷ 1FH, nhưng tại một thời điểm chỉ có một dãy hoạt động các bit PSW3, PSW4 của từng trạng thái chương trình sẽ quyết định dãy nào hoạt động
Sự định địa chỉ trực tiếp có thể truy xuất bất kỳ giá trị nào trên Chip hoặc thanh ghi phần cứng trên Chip Một byte địa chỉ trực tiếp được đưa vào Opcode để định rõ vị trí Tất cả các Port I/O, các thanh ghi chức năng đặc biệt, thanh ghi điều khiển hoặc thanh ghi trạng thái bao giờ cũng được quy định các địa chỉ trong khoảng 128÷255 (80÷FFH) Khi byte địa chỉ trực tiếp nằm trong giới hạn này (ứng với bit 7 = 1) thì thanh ghi chức năng đặc biệt được truy xuất
- Sự định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @ được đặt trước R0, R1 hay DPTR R0 và R1 có thể hoạt động như một thanh ghi con trỏ mà nội dung của nó cho
Trang 23biết một địa chỉ trong RAM nội ở nơi mà dữ liệu được ghi hoặc được đọc Bit có trọng số nhỏ nhất của Opcode lệnh sẽ xác định R0 hay R1 được dùng con trỏ Pointer.
- Sự định địa chỉ tức thời được tượng trưng bởi ký hiệu # được đứng trước một hằng
số, 1 biến ký hiệu hoặc một biểu thức số học được sử dụng bởi các hằng, các ký hiệu, các hoạt động do người điều khiển Trình biên dịch tính toán giá trị và thay thế dữ liệu tức thời
Định địa chỉ tương đối :
Sự định địa chỉ tương đối chỉ sử dụng với những lệnh nhảy nào đó Một địa chỉ tương đối (hoặc Offset) là một giá trị 8 bit mà nó được cộng vào bộ đếm chương trình PC để tạo thành địa chỉ một lệnh tiếp theo được thực thi Phạm vi của sự nhảy nằm trong khoảng -128 ÷ 127 Những nơi nhảy đến thường được chỉ rõ bởi các nhãn và trình biên dịch xác định Offset Relative cho phù hợp
Sự định vị tương đối đem lại thuận lợi cho việc cung cấp mã vị trí độc lập, nhưng bất lợi là chỉ nhảy ngắn trong phạm vi -128÷127 byte
* Định địa chỉ tuyệt đối (ABSOLUTE ADDRESSING):
Sự định địa chỉ tuyệt đối được dùng với các lệnh ACALL và AJMP
Sự định vị tuyệt đối đem lại thuận lợi cho các lệnh ngắn (2 byte), nhưng bất lợi trong việc giới hạn phạm vi nơi gởi đến và cung cấp mã có vị trí độc lập
Sự định vị dài được dùng với lệnh LCALL và LJMP Các lệnh 3 byte này bao gồm một địa chỉ nơi gởi tới 16 bit đầy đủ là 2 byte và 3 byte của lệnh
Ưu điểm của sự định dài là vùng nhớ mã 64K có thể được dùng hết, nhược điểm là các lệnh đó dài 3 byte và vị trí lệ thuộc Sự phụ thuộc vào vị trí sẽ bất lợi bởi chương trình không thể thực thi tại địa chỉ khác
Định địa chỉ theo chỉ số (INDEX ADDRESSING):
Sự định địa chỉ này dùng một thanh ghi cơ bản (cũng như bộ đếm chương trình hoặc bộ đếm dữ liệu) và Offset (thanh ghi A) trong sự hình thành 1 địa chỉ liên quan bởi lệnh JMP
Trang 24hoặc MOVC Trong nhiều ứng dụng , cc bảng nhảy hoặc cc bảng tìm kiếm đuợc tạo ra dễ dàng bằng cách sử dụng kiểu định địa chỉ theo chỉ số.
Chuyển điều khiển
Rn :Thanh ghi R0 đến R7 của bank thanh ghi được chọn
Data : 8 bit địa chỉ vùng dữ liệu bên trong Nó có thể là vùng RAM dữ liệu trong (0-127) hoặc các thanh ghi chức năng đặc biệt
@Ri : 8 bit vùng RAM dữ liệu trong (0-125) được đánh giá địa chỉ gián tiếp qua thanh ghi R0 hoặc R1
#data : Hằng 8 bit chức trong câu lệnh
#data 16 : Hằng 16 bit chứa trong câu lệnh
Addr16 : 16 bit địa chỉ đích được dùng trong lệnh LCALL và LJMP
Addr11 : 11 bit địa chỉ đích được dùng trong lệnh LCALL và AJMP
Rel : Byte offset 8 bit có dấu được dùng trong lệnh SJMP và những lệnh nhảy có điều kiện
Bit : Bit được định địa chỉ trực tiếp trong RAM dữ liệu nội hoặc các thanh ghi chức năng đặc biệt
ADD A,Rn (1byte, 1 chu kỳ máy) : cộng nội dung thanh ghi Rn vào thanh ghi A
ADD A,data (2,1): Cộng trực tiếp 1 byte vào thanh ghi A
ADD A,@Ri (1,1): Cộng gián tiếp nội dung RAM chứa tại địa chỉ được khai báo trong
Ri vào thanh ghi A
ADD A,#data (2,1):Cộng dữ liệu tức thời vào A
ADD A,Rn (1,1): Cộng thanh ghi và cờ nhớ vào A
Trang 25ADD A,data (2,1): Cộng trực tiếp byte dữ liệu và cờ nhớ vào A.
ADDC A,@Ri (1,1): Cộng gián tiếp nội dung RAM và cờ nhớ vào A
ADDC A,#data (2,1): Cộng dữ liệu tức thời và cờ nhớ vào A
SUBB A,Rn (1,1): Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và cờ nhớ.SUBB A,data (2,1): Trừ trực tiếp A cho một số và cờ nhớ
SUBB A,@Ri (1,1): Trừ gián tiếp A cho một số và cờ nhớ
SUBB A,#data (2,1): Trừ nội dung A cho một số tức thời và cờ nhớ
INC A (1,1): Tăng nội dung thanh ghi A lên 1
INC Rn (1,1): Tăng nội dung thanh ghi Rn lên 1
INC data (2,1): Tăng dữ liệu trực tiếp lên 1
INC @Ri (1,1): Tăng gián tiếp nội dung vùng RAM lên 1
DEC A (1,1): Giảm nội dung thanh ghi A xuống 1
DEC Rn (1,1): Giảm nội dung thanh ghi Rn xuống 1
DEC data (2,1): Giảm dữ liệu trực tiếp xuống 1
DEC @Ri (1,1): Giảm gián tiếp nội dung vùng RAM xuống 1
INC DPTR (1,2): Tăng nội dng con trỏ dữ liệu lên 1
MUL AB (1,4): Nhân nội dung thanh ghi A với nội dung thanh ghi B
DIV AB (1,4): Chia nội dung thanh ghi A cho nội dung thanh ghi B
DA A (1,1,): hiệu chỉnh thập phân thanh ghi A
ANL A,Rn (1,1): AND nội dung thanh ghi A với nội dung thanh ghi Rn
ANL A,data (2,1):AND nội dung thanh ghi A với dữ liệu trực tiếp
ANL A,@Ri (1,1): AND nội dung thanh ghi A với dữ liệu gián tiếp trong RAM.ANL A,#data (2,1): AND nội dung thanh ghi với dữ liệu tức thời
ANL data,A (2,1): AND một dữ liệu trực tiếp với A
ANL data,#data (3,2): AND một dữ liệu trực tiếp với A một dữ liệu tức thời.ANL C,bit (2,2):AND cờ nhớ với 1 bit trực tiếp
ANL C,/bit (2,2): AND cờ nhớ với bù 1 bit trực tiếp
ORL A,Rn (1,1): OR thanh ghi A với thanh ghi Rn
Trang 26ORL A,data (2,1): OR thanh ghi A với một dữ liệu trực tiếp.
ORL A,@Ri (1,1): OR thanh ghi A với một dữ liệu gián tiếp
ORL A,#data (2,1):OR thanh ghi A với một dữ liệu tức thời
ORL data,A (2,1): OR một dữ liệu trực tiếp với thanh ghi A
ORL data,#data (3,1):OR một dữ liệu trực tiếp với một dữ liệu tức thời.ORL C,bit (2,2): OR cờ nhớ với một bit trực tiếp
ORL C,/bit (2,2): OR cờ nhớ với bù của một bit trực tiếp
XRL A,Rn (1,1): XOR thanh ghi A với thanh ghi Rn
XRL A,data (2,1): XOR thanh ghi A với mộ dữ liệu trực tiếp
XRL A,@Ri (1,1): XOR thanh ghi A với một dữ liệu gián tiếp
XRL A,#data (2,1): XOR thanh ghi A với mộ dữ liệu tức thời
XRL data,A (2,1): XOR một dữ liệu trực tiếp với thanh ghi A
XRL dara,#data (3,1): XOR một dữ liệu trực tiếp với một dữ liệu tức thời.SETB C (1,1): Đặt cờ nhớ
SETB bit (2,1): Đặt một bit trực tiếp
CLR A (1,1): Xóa thanh ghi A
CLR C (1,1): Xóa cờ nhớ
CPL A (1,1): Bù nội dung thanh ghi A
CPL C (1,1): Bù cờ nhớ
CPL bit (2,1): Bù một bit trực tiếp
RL A (1,1): Quay trái nội dung thanh ghi A
RLC A (1,1): Quay trái nội dung thanh ghi A qua cờ nhớ
RR A (1,1): Quay phải nội dung thanh ghi A
RRC A (1,1): Quay phải nội dung thanh ghi A qua cờ nhớ.SWAP (1,1): Quay trái nội dung thanh ghi A 1 nibble (1/2byte)
Trang 27MOV A,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi A.
MOV Rn,data (2,2): Chuyển dữ liệu trực tiếp vào thanh ghi Rn
MOV Rn,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi Rn
MOV data,A (2,1): Chuyển nội dung A vào một dữ liệu trực tiếp
MOV data,Rn (2,2): Chuyển nội dung Rn vào một dữ liệu trực tiếp
MOV data,data (3,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp
MOV data,@Ri (2,2): Chuyển một dữ liệu gián tiếp vào một dữ liệu gián tiếp
MOV data,#data (3,2): Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp
MOV @Ri,A (1,1): Chuyển nội dung A vào một dữ liệu gián tiếp
MOV @Ri,data (2,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu gián tiếp
MOV @Ri,#data (2,1): Chuyển dữ liệu tức thời vào dữ liệu gián tiếp
MOV DPTR,#datá6 (3,2): Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu
MOV C,bit (2,1): Chuyển một bit trực tiếp vào cờ nhớ
MOV bit,C (2,2): Chuyển cờ nhớ vào một bit trực tiếp
MOV A,@A+DPTR (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là @A+DPRT vào thanh ghi A
MOVC A,@A+PC (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là @A+PC vào thanh ghi A
MOV A,@Ri (1,2): Chuyển dữ liệu ngoài vào thanh ghi A
MOVX A,@DPTR (1,2): Chuyển dữ liệu ngoài (16 bit địa chỉ) vào thanh ghi A
MOVX @Ri,A (1,2): Chuyển nội dung A ra dữ liệu ngoài
MOVX @DPTR,A (1,2): Chuyển nội dung A ra dữ liệu bên ngoài (16 bit địa chỉ)
PUSH data (2,2) : Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP
POP data (2,2) : Chuyển dữ liệu trực tiếp vào ngăn xếp và giảm SP
XCH A,Rn (1,1) : Trao đổi dữ liệu giữa thanh ghi Rn v2 thanh ghi A
XCH A,data (2,1) : Trao đổi giữa thanh ghi A và một dữ liệu trực tiếp
XCH A,@Ri (1,1) : Trao đổi giữa thanh ghi A và một dữ liệu gián tiếp
XCHD A,@R (1,1) : Trao đổi giữa nibble thấp (LSN) của thanh ghi A và LSN của dữ liệu gián tiếp
Trang 28 Nhóm lệnh chuyền điều khiển:
ACALL addr11 (2,2): Gọi chương trình con dùng địa chì tuyệt đối
LCALL addr16 (3,2): Gọi chương trình con dùng địa chỉ dài
RET (1,2): Trở về từ lệnh gọi chương trình con
RETI (1,2): Trở về từ lệnh gọi ngắt
AJMP addr11 (2,2): Nhảy tuyệt đối
LJMP addr16 (3,2): Nhảy dài
SJMP rel (2,2):Nhảy ngắn
JMP @A+DPTR (1,2): Nhảy gián tiếp từ con trỏ dữ liệu
JZ rel (2,2): Nhảy nếu A=0
JNZ rel (2,2): Nhảy nếu A không bằng 0
JC rel (2,2): Nhảy nếu cờ nhớ được đặt
JNC rel (2,2): Nhảy nếu cờ nhớ không được đặt
JB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt
JNB bit,rel (3,2):Nhảy tương đối nếu bit trực tiếp không được đặt
JBC bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt , rồi xóa bit
CJNE A,data,rel (3,2): So sánh dữ liệu trực tiếp với A và nhảy nếu không bằng
CJNE A,#data,rel (3,2): So sánh dữ liệu tức thời với A và nhảy nếu không bằng
CJNE Rn,#data,rel (3,2): So sánh dữ liệu tức thời với nội dung thanh ghi Rn và nhảy nếu không bằng
CJNE @Ri,#data,rel (3,2): So sánh dữ liệu tức thời với dữ liệu gián tiếp và nhảy nếu không bằng
DJNZ Rn,rel (2,2): Giảm thanh ghi Rn và nhảy nếu không bằng
DJNZ data,rel (3,2): Giảm dữ liệu trực tiếp và nhảy nếu không bằng
2.2 Tổng quan về LCD
2.2.1 Giơí thiệu về LCD họ HD44780
Trang 29Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1 là hai loại LCD thông dụng.
Hình 2.7 : Hình dáng của hai loại LCD thông dụng
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết Các chân này được đánh số thứ tự và đặt tên như hình 2 :
Hình 2.8 : Sơ đồ chân của LCD
Trang 30VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC=5V của mạch điều khiển
3 Vee Chân này dùng để điều chỉnh độ tương phản của LCD
4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” -write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ
“đọc” - read)+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
5
R/W Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ
đọc
6 E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (lowto- high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
Trang 31* Ghi chú : Ở chế độ “đọc”, nghĩa là MCU sẽ đọc thông tin từ LCD thông qua các chân DBx
Còn khi ở chế độ “ghi”, nghĩa là MCU xuất thông tin điều khiển cho LCD thông qua các chân DBx
2.2.2.b Điều kiện hoạt động của LCD
- LCD sẽ bị hư hỏng hoặc hoạt động sai lệch nếu vi phạm khoảng đặc tính điện áp sau:
+ Chân cấp nguồn (Vcc –GND) : Min -0,3V , Max +7V
+ Chân ngõ vào DBx : Min -0,3V , Max Vcc+0,3V
+ Nhiệt độ hoạt động : Min -30 độ C , Max +75 độ C
+ Nhiệt độ bảo quản : Min -55 độ C , Max +125 độ C
- Đặc tính điện làm việc điển hình của LCD ( được đo trong điều kiện Vcc= 4,5 đến 5,5
Trang 32Để hiểu rõ hơn chức năng các chân và hoạt động của chúng, ta tìm hiểu sơ qua chíp HD44780 thông qua các khối cơ bản của nó.
Hình 2.9 : Sơ đồ khối của HD44780
Các thanh ghi :
Trang 33Chíp HD44780 có 2 thanh ghi 8 bit quan trọng : Thanh ghi lệnh IR (Instructor Register) và thanh ghi dữ liệu DR (Data Register)
- Thanh ghi IR : Để điều khiển LCD, người dùng phải “ra lệnh” thông qua tám đường bus DB0-DB7
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
Bảng 2.10 : Chức năng chân RS và R/W theo mục đích sử dụng
Cờ báo bận BF: (Busy Flag)
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hoàn tất
Khiđang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên để báo cho MCU biết nó đang “bận” Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0
Bộ đếm địa chỉ AC : (Address Counter)
Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM (DDRAM
và CGRAM) mà thông qua bộ đếm địa chỉ AC
Bộ đếm này lại nối với 2 vùng RAM theo kiểu rẽ nhánh Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương tác đã được bao hàm trong mã lệnh
Trang 34Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi) 1 đơn vị và nội dung của AC được xuất ra cho MCU thông qua DB0-DB6 khi có thiết lập RS=0 và R/W=1 (xem bảng tóm tắt RS - R/W).
Vùng RAM hiển thị DDRAM :(Display Data RAM)
Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ô
kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD sẽ hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà bạn đã cung cấp
Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8 bit.Những vùng RAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM đa mục đích
Lưu ý là để truy cập vào DDRAM, ta phải cung cấp địa chỉ cho AC theo mã HEX
Vùng ROM chứa kí tự CGROM: Character Generator ROM
Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự, và định địa chỉ bằng 8 bit
Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mẫu kí tự kiểu 5x10 (tổng cộng là 240 thay vì 28 = 256 mẫu kí tự)
Người dùng không thể thay đổi vùng ROM này
Ví dụ : Ghi vào DDRAM tại địa chỉ “01” một chuỗi 8 bit “01100010” thì trên LCD tại ô thứ 2 từ trái sang (dòng trên) sẽ hiển thị kí tự “b”
Vùng RAM chứa kí tự đồ họa CGRAM : (Character Generator RAM)
Như trên bảng mã kí tự, nhà sản xuất dành vùng có địa chỉ byte cao là 0000 để người dùng có thể tạo các mẫu kí tự đồ họa riêng Tuy nhiên dung lượng vùng này rất hạn chế: Ta chỉ có thể tạo 8 kí tự loại 5x8 điểm ảnh, hoặc 4 kí tự loại 5x10 điểm ảnh để ghi vào CGRAM
2.2.2.d.Tập lệnh của LCD :
Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp với LCD :
Trang 35* Tuy trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập trình điều khiển LCD ta chỉ có thể tác động trực tiếp được vào 2 thanh ghi DR và IR thông qua các chân DBx, và ta phải thiết lập chân RS, R/W phù hợp để chuyển qua lại giữ 2 thanh ghi này
* Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này có thể khá lâu đối với tốc độ của MCU, nên ta cần kiểm tra cờ BF hoặc đợi (delay) cho LCD thực thi xong lệnh hiện hành mới có thể ra lệnh tiếp theo
* Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có lệnh ghi vào RAM (Điều này giúp chương trình gọn hơn)
* Các lệnh của LCD có thể chia thành 4 nhóm như sau :
• Các lệnh về kiểu hiển thị VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), …
• Chỉ định địa chỉ RAM nội
• Nhóm lệnh truyền dữ liệu trong RAM nội
là : Tắt hiển thị, con trỏ dời về góc trái (hàng đầu tiên), chế độ tăng AC
Entry
mode set Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 0 0 1 [I/D] [S]
I/D : Tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiển thị AC 1 đơn vị mỗi khi có
37uS
Trang 36hành động ghi hoặc đọc vùng DDRAM Vị trí con trỏ cũng di chuyển theo sự tăng giảm này.
S : Khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải (I/D=0) hoặc sang trái (I/D=1) mỗi khi có hành động ghi vùng DDRAM
Khi S=0: không dịch nội dung hiển thị
Nội dung hiển thị không dịch khi đọc DDRAM hoặc đọc/ghi vùng CGRAM
Display
on/off
control
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0DBx = 0 0 0 0 1 [D] [C] [B]
D: Hiển thị màn hình khi D=1 và ngược lại Khi tắt hiển thị, nội dung DDRAM không thay đổi
C: Hiển thị con trỏ khi C=1 và ngược lại Vị trí và hình dạng con trỏ, xem hình 8
B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại Xem thêm hình 8 về kiểu nhấp nháy Chu kì nhấp nháy khoảng 409,6ms khi mạch dao động nội LCD là 250kHz
Hình 8: Kiểu con trỏ, kiểu kí tự và nhấp nháy kí tự
37uS
Trang 37ordisplay
shift
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
DBx = 0 0
0 1 [S/C] [R/L] * *
Lệnh Cursor or display shift dịch chuyển con trỏ hay dữ liệu hiển thị sang trái
mà không cần hành động ghi/đọc dữ liệu Khi hiển thị kiểu 2 dòng, con trỏ sẽ nhảy xuống dòng dưới khi dịch qua vị trí thứ 40 của hàng đầu tiên Dữ liệu hàng đầu
và hàng 2 dịch cùng một lúc Chi tiết sử dụng xem bảng bên dưới:
Ngược lại, giao thức giao tiếp là 4 bit (từ bit DB7 đến bit DB0) Khi chọn giao thức 4 bit, dữ liệu được truyền/nhận 2 lần liên tiếp với 4 bit cao gởi/nhận trước, 4 bit thấp gởi/nhận sau