Tín hiệu PSEN ở mức Logic 0 trong suất thời gian tìm nạp lệnh, các mã nhị phân của chương trình hay mã thao tác Opcode được đọc từ EPROM qua BUS dữ liệu và được chốt vào thanh ghi IR của
Trang 1Đề tài thiết kế Hệ Thống Quảng Cáo
MỤC LỤC
MỞ ĐẦU Error! Bookmark not defined.CHƯƠNG
I: TỔNG QUAN VỀ HỌ VI XỬ LÝ 8051 1
I NHỮNG ĐẶC ĐIỂM CƠ BẢN HỌ VI XỬ LÝ 8051 1
1.Tóm tắt về lịch sử của 8051 1
2 Bộ ví điều khiển 8051 2
3 Sơ đồ khối chung của họ vi điều khiển 8051 2
II THÀNH VIÊN HỌ VI XỬ LÝ 8051 3
1 Bộ vi điều khiển 8052: 3
2 Bộ vi điều khiển 8031: 4
3 Các bộ vi điều khiển 8051 từ các hãng khác nhau 5
3.1 Bộ vi điều khiển 8751 5
3.2 Bộ vi điều khiển AT8951 từ Atmel Corporation 5
3.3 Bộ vi điều khiển DS5000 từ hãng Dallas Semiconductor 6
3.4 Phiên bản OTP của 8051 8 3.5 Họ 8051 từ Hãng Philips 8
CHƯƠNG II GIỚI THIỆU VI ĐIỀU KHIỂN AT89C51……….12
1 Sơ Đồ Khối Của Vi Điều Khiển AT89C51 9
2 Đặc Tinh Của AT89C51 10
3 Sơ đồ chân và chức năng các chân của CHIP 89C51 11
4 Cấu trúc của PORT xuất/nhập 15
5 Tổ chức bộ nhớ 17
6 Hoạt Động Của Thanh Ghi TIME 28
7 Bộ Đềm Chương Trinh Và Không Gian ROM Của 8051 33
CHƯƠNG III: CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ CỦA 8051 39
I CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ TỨC THỜI VÀ THEO THANH GHI 39
Trang 21 Chế độ đánh địa chỉ tức thời 39
2 chế độ đánh địa chỉ theo thanh ghi: 39
II TRUY CẬP BỘ NHỚ SỬ DỤNG CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ KHÁC NHAU 40
1 Chế độ đánh địa chỉ trực tiếp 402 Các thanh ghi SFSR và các địa chỉ của chúng 41
3 Ngăn xếp và chế độ đánh địa chỉ trực tiếp 444 Chế độ đánh địa chỉ gián tiếp thanh ghi 44
5 ưu điểm của chế độ đánh địa chỉ gián tiếp thanh ghi 45
6 Hạn chế của chế độ đánh địa chỉ gián tiếp thanh ghi trong 8051 45
7 Chế độ đánh địa chỉ theo chỉ số và truy cập bộ nhớ ROM trên chíp 45
8 Bảng xắp xếp và sử dụng chế độ đánh địa chỉ theo chỉ số 46CHƯƠNG IV: ỨNG DỤNG 46
I Bài toán: 46
II Sơ dồ khối và các chức năng của hệ quảng cáo 46
1.Sơ dồ khối của hệ quảng cáo 46
2.Chức năng các khối 47
III THIẾT KẾ CHI TIẾT CÁC KHỐI 48
1.Thiết kế chi tiết khối nguồn 48
2 Thiết thiết khối đệm hàng 49
3 Thiết kế khối giải mã cột chi tiết (quét cột) 50
4 Khối thúc công xuất cột (đệm ngõ ra cộT) 54
5 khối hiển thị 57
6 Khối Điều Khiển Trung Tâm 60
7 Nguyên lý toàn mạch 61
7.1 Linh kiện cần cho thiết kế 61
7.1 Sơ đồ nguyên lý toàn mạch và công cụ thiết kế mạch in 63
7.2.Board điều khiển(mạch đồng 2 lớp) 67
Trang 37.3 Board hiển thị (mạch đồng khối hiển thị) 68
7.4 Nguyên lý hoạt động của toàn mạch: 69
IV THIẾT KẾ CHƯƠNG TRÌNH CHO VI ĐIỀU KHIỂN 70
1.Nguyên lý hoạt động 70
2 Lưu Đồ Thuật Toán 71
3.Chương trinh và nạp chương trình cho chíp AT89C51 73
4 Kết quả 82
KẾT LUẬN 79 TÀI LIỆU THAM KHẢO
CHƯƠNG I
TỔNG QUAN VỀ HỌ VI XỬ LÝ 8051
I NHỮNG ĐẶC ĐIỂM CƠ BẢN HỌ VI XỬ LÝ 8051
1.Tóm tắt về lịch sử của 8051
Vào năm 1981, hãng Intel giới thiệu một số bộ vi điều khiển được gọi là
8051 Bộ vi điều khiển này có 128 byte RAM, 4K byte ROM, hai bộ định thời, một cổng nối tiếp và 4 cổng 8 bit Tất cả đều được tích hợp trên một
chíp Lúc bấy giờ, bộ vi điều khiển như vậy được coi là một “hệ thống trên
chíp” 8051 là một bộ xử lý 8 bit, tức là CPU chỉ có thể làm việc với 8 bit dữ
liệu Dữ liệu lớn hơn 8 bit được chia ra thành các dữ liệu 8 bit để xử lý 8051
có tất cả 4 cổng I/O mỗi cổng rộng 8 bit, có thể có một ROM trên chíp cực
Trang 4đại là 64 K byte Tuy nhiên, lúc đó các nhà sản xuất đã cho xuất xưởng chỉ với 4K byte ROM trên chíp 8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và bán bất kỳ dạng biến thể nào của 8051 mà
họ thích với điều kiện họ phải để mã chương trình tương thích với 8051 Từ
đó dẫn đến sự ra đời nhiều phiên bản của 8051 với các tốc độ khác nhau
Tuy nhiên, điều quan trọng là mặc dù có nhiều biến thể của 8051, như khác nhau về tốc độ và dung lượng nhớ ROM trên chíp, nhưng tất cả các lệnh đều tương thích với 8051 ban đầu Điều này có nghĩa là nếu ta viết chương trình của mình cho một phiên bản nào đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ khác mà không phân biệt nó từ hãng sản xuất nào
Bảng 1.1 Các đặc tính của 8051 đầu tiên
3 Sơ đồ khối chung của họ vi điều khiển 8051
Trang 5Interrupt control : Điều khiển ngắt
Other registers : Các thanh ghi khác 128 Byte
RAM : RAM 128 Byte
Timer 2, 1 , 0 : Bộ định thời 2 , 1 , 0
CPU : Đơn vị điều khiển trung tâm
Oscillator : Mạch dao động
Bus control: Điều khiển Bus
I/O ports: Các ports vào/ ra
Serial port: port nối tiếp
Address/data : địa chỉ/ dữ liệu
Trang 6Hình 1.1 Bố trí bên trong của sơ đồ khối 8051
II THÀNH VIÊN HỌ VI XỬ LÝ 8051
1 Bộ vi điều khiển 8052:
Bộ vi điều khiển 8052 là một thành viên khác của họ 8051, 8052 có tất
cả các đặc tính chuẩn của 8051 ngoài ra nó có thêm 128 byte RAM và một
bộ định thời nữa Hay nói cách khác là 8052 có 256 byte RAM 3 bộ định thời
và có 8K byte ROM trên chíp thay vì 4K byte như 8051
ROM trên chíp 4K byte 8K byte
Trang 72 Bộ vi điều khiển 8031:
Một thành viên khác nữa của 8051 là chíp 8031 Chíp này thường được coi như là 8051 không có ROM trên chíp vì nó có OK byte ROM trên chíp Để sử dụng chíp này ta phải bổ xung ROM ngoài cho nó ROM ngoài phải chứa chương trình mà 8031 sẽ nạp và thực hiện So với 8051 mà chương trình được chứa trong ROM trên chíp bị giới hạn bởi 4K byte, còn ROM ngoài chứa chương trinh được gắn vào 8031 thì có thể lớn đến 64K byte Khi bổ xung cổng, như vậy chỉ còn lại 2 cổng để thao tác Để giải quyết vấn đề này ta có thể bổ xung cổng vào - ra cho 8031 Phối phép 8031 với bộ nhớ và cổng vào - ra chẳng hạn với chíp 8255 Ngoài ra còn có các phiên bản khác nhau về tốc độ của 8031 từ các hãng sản xuất khác nhau
3 Các bộ vi điều khiển 8051 từ các hãng khác nhau
Mặc dù 8051 là thành viên phổi biến nhất của họ 8051 nhưng chúng ta
sẽ thấy nó trong kho linh kiện Đó là do 8051 có dưới nhiều dạng kiểu bộ nhớ khác nhau như UV - PROM, Flash và NV - RAM mà chúng đều có số đăng ký linh kiện khác nhau Phiên bản UV-PROM của 8051 là 8751 Phiên
Trang 8bản Flash ROM được bán bởi nhiều hãng khác nhau chẳng hạn của Atmel corp với tên gọi là AT89C51 còn phiên bản NV-RAM của 8051 do Dalas Semi Conductor cung cấp thì được gọi là DS5000 Ngoài ra còn có phiên bản OTP (khả trình một lần) của 8051 được sản xuất bởi rất nhiều hãng
3.1 Bộ vi điều khiển 8751
Chíp 8751 chỉ có 4K byte bộ nhớ UV-EPROM trên chíp Để sử dụng chíp này để phát triển yêu cầu truy cập đến một bộ đốt PROM cũng như bộ xoá UV- EPROM để xoá nội dung của bộ nhớ UV-EPROM bên trong 8751 trước khi ta có thể lập trình lại nó Do một thực tế là ROM trên chíp đối với 8751 là UV-EPROM nên cần phải mất 20 phút để xoá 8751 trước khi nó có thể được lập trình trở lại Điều này đã dẫn đến nhiều nhà sản xuất giới thiệu các phiên bản FLASH ROM và UV-RAM của 8051 Ngoài ra còn có nhiều phiên bản với các tốc độ khác nhau của 8751 từ nhiều hãng khác nhau
3.2 Bộ vi điều khiển AT8951 từ Atmel Corporation
Chíp 8051 phổ biến này có ROM trên chíp ở dạng bộ nhớ Flash Điều này là lý tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được xoá trong vài giây trong tương quan so với 20 phút hoặc hơn mà 8751 yêu cầu Vì lý do này mà AT89C51 để phát triển một hệ thống dựa trên bộ vi điều khiển yêu cầu một bộ đốt ROM mà có hỗ trợ bộ nhớ Flash Tuy nhiên lại không yêu cầu bộ xoá ROM Lưu ý rằng trong bộ nhớ Flash ta phải xoá toàn
bộ nội dung của ROM nhằm để lập trình lại cho nó Việc xoá bộ nhớ Flash được thực hiện bởi chính bộ đốt PROM và đây chính là lý do tại sao lại không cần đến bộ xoá Để loại trừ nhu cầu đối với một bộ đốt PROM hãng Atmel đang nghiên cứu một phiên bản của AT 89C51 có thể được lập trình qua cổng truyền thông COM của máy tính IBM PC
Trang 9Số linh kiện ROM RAM Chân I/O Timer Ngắt Vcc Đóng vỏ
Bảng 1.3: Các phiên bản của 8051 từ Atmel (Flash ROM)
Chữ C trong ký hiệu AT89C51 là CMOS
Cũng có những phiên bản đóng vỏ và tốc độ khác nhau của những sản phẩm trên đây xem bảng 1.4 Ví dụ để ý rằng chữ “C” đứng trước số 51 trong
AT 89C51 -12PC là ký hiệu cho CMOS “12” ký hiệu cho 12 MHZ và “P” là kiểu đóng vỏ DIP và chữ “C” cuối cùng là ký hiệu cho thương mại (ngược với chữ “M” là quân sự ) Thông thường AT89C51 - 12PC rất lý tưởng cho các dự án của học sinh, sinh viên
Mã linh kiện Tốc độ Số chân Đóng vỏ Mục đích
AT89C51-12PC 42MHZ 40 DTP Thương mại
Bảng 1.4: Các phiên bản 8051 với tốc độ khác nhau của Atmel
3.3 Bộ vi điều khiển DS5000 từ hãng Dallas Semiconductor
Một phiên bản phổ biến khác nữa của 8051 là DS5000 của hãng Dallas Semiconductor Bộ nhớ ROM trên chíp của DS5000 ở dưới dạng NV-RAM Khả năng đọc/ ghi của nó cho phép chương trình được nạp vào ROM trên chíp trong khi nó vẫn ở trong hệ thống (không cần phải lấy ra) Điều này còn
có thể được thực hiện thông qua cổng nối tiếp của máy tính IBM PC Việc nạp chương trình trong hệ thống (in-system) của DS5000 thông qua cổng nối
Trang 10tiếp của PC làm cho nó trở thành một hệ thống phát triển tại chỗ lý tưởng Một ưu việt của NV-RAM là khả năng thay đổi nội dung của ROM theo từng byte tại một thời điểm Điều này tương phản với bộ nhớ Flash và EPROM
mà bộ nhớ của chúng phải được xoá sạch trước khi lập trình lại cho chúng
Mã linh kiện ROM RAM Chân I/O Timer Ngắt Vcc Đóng vỏ
40
40
40
40
Bảng 1.5: Các phiên bản 8051 từ hãng Dallas Semiconductor
Chữ “T” đứng sau 5000 là có đồng hồ thời gian thực
Lưu ý rằng đồng hồ thời gian thực RTC là khác với bộ định thời Timer RTC tạo và giữ thời gian l phút giờ, ngày, tháng - năm kể cả khi tắt nguồn
Còn có nhiều phiên bản DS5000 với những tốc độ và kiểu đóng gói khác nhau Ví dụ DS5000-8-8 có 8K NV-RAM và tốc độ 8MHZ Thông thường DS5000-8-12 hoặc DS5000T-8-12 là lý tưởng đối với các dự án của sinh viên
12MHz 8MHz 8MHz (with RTC) 12MHz
12MHz (with RTC)
Trang 11Bảng 1.6: Một số thành viên của họ 8051
3.4 Phiên bản OTP của 8051
Các phiên bản OTP của 8051 là các chíp 8051 có thể lập trình được một lần và được cung cấp từ nhiều hãng sản xuất khác nhau Các phiên bản Flash và NV-RAM thường được dùng để phát triển sản phẩm mẫu Khi một sản phẩm được thiết kế và được hoàn thiện tuyệt đối thì phiên bản OTP của
8051 được dùng để sản hàng loạt vì giá thành một đơn vị sản phẩm sẽ rẻ hơn
Trang 121 Sơ Đồ Khối Của Vi Điều Khiển AT89C51
Hình 2.1: Sơ Đồ Khối Của Vi Điều Khiển AT89C51
2 Đặc Tính Của AT89C51
Chíp AT89C51 chứa trên 60000 Transistor bao gồm 4Kbyte ROM, 128Byte RAM, 32 đường xuất nhập, 1 Port nối tiếp và 2 bộ định thời 16 bit Một số
Trang 13lượng mạch đáng chú ý trong IC đơn Các thành viên mới được thêm vào cho
họ MCS-51 và các biến thể này gần như có gấp đôi các đặc trưng này Tập đoàn Seimens, nguồn sản xuất thứ hai các bộ vi điều khiển thuộc họ MCS-50 cung cấp Chíp SAB80515, một cải tiến của 8051 chứa trong một vỏ 68 chân,
có 6 Port xuất nhập 8-bit, 13 nguồn tạo ra ngắt và một bộ biến đổi A/D 8-bit với 8 kênh ngõ vào Họ 8051 là một trong những bộ vi điều khiển 8-bit mạnh
và linh hoạt nhất, đã trở thành bộ vi điều khiển hàng đầu trong những năm gần đây
- Cụ thể vi điều khiển AT89C51 là 1 IC có tích hợp trên đó hệ vi xử lí
- Có thể lập trình được qua cổng nối tiếp
- 210 bit được địa chỉ hoá
- Giao tiếp nối tiếp
3 Sơ đồ chân và chức năng các chân của Chíp AT89C51
Trang 15-PORT 0 : Nằm trên các chân từ 32 đến 39 có 2 công dụng Trong các
thiết kế có tối thiểu thành phần thì Port 0 được sử dụng làm nhiệm vụ xuất/nhập Trong các thiết kế lớn hơn có bộ nhớ ngoài, Port 0 trở thành Bus địa chỉ và Bus dữ liệu đa hợp
-PORT 1 : Nằm trên các chân 1 đến 8, chỉ có một cộng dụng là để gao
tiếp với thiết bị ngoài khi có yêu cầu
-PORT 2 : Nằm trên các chân 21 đến 28 có 2 công dụng hoặc làm
nhiệm vụ xuất/nhập hoặc là Byte địa chỉ cao của BUS địa chỉ 16 bit cho các thiết kế có nhiều hơn 256Byte bộ nhớ dữ liệu ngoài
-PORT 3 : Nằm trên các chân 10 đến 17 có 2 công dụng một là chức
năng xuất/nhập bình thường còn khi không hoạt động xuất nhập các chân của PORT 3 có nhiều chức năng riêng Cụ thể các chức năng của các chân ở PORT 3 như sau :
P 3.0 RxD B0H Nhận dữ liệu của Port nối tiếp
P 3.1 TxD B1H Phát dữ liệu của Port nối tiếp
P3.2 INT 0 B2H Ngõ vào ngắt ngoài 0
P 3.3 INT 1 B3H Ngõ vào ngắt ngoài 1
P 3.4 T 0 B4H Ngõ vào của bộ định thời/đếm 0
P 3.5 T 1 B5H Ngõ vào của bộ định thời/đếm 1
P 3.6 WR B6H Điều khiển ghi bộ nhớ dữ liệu ngoài
P 3.7 RD B7H Điều khiển đọc bộ nhớ dữ liệu ngoài
Bảng 2.1: Các chức năng của PORT 3
Trang 16-Chân cho phép bộ nhớ chương trình PSEN
8051 Cung cấp cho ta 4 tín hiệu điều khiển BUS Tín hiệu cho phép
bộ nhớ chương trình PSEN (Program Store Enable) là tín hiệu xuất trên chân
29 Đây là tín hiệu điều khiển cho phép ta truy xuất bộ nhớ chương trình ngoài Chân này thường được nối với chân cho phép xuất OE ( Output Enable) của EPROM hoặc ROM để cho phép đọc các Byte lệnh
Tín hiệu PSEN ở mức Logic 0 trong suất thời gian tìm nạp lệnh, các
mã nhị phân của chương trình hay mã thao tác (Opcode) được đọc từ EPROM qua BUS dữ liệu và được chốt vào thanh ghi IR của 8051 để được giải mã
Khi thực thi một chương trình chứa ở ROM nội PSEN được duy trì ở mức Logic tích cực 1
- Chân cho phép chốt địa chỉ ALE
Chân này nằm trên chân 30 của 8051 là chân xuất tín hiệu cho phép chốt địa chỉ ALE (Address Latch Enable) để giải đa hợp 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 để chôt địa chỉ ( Byte thấp của địa chỉ 16bit) vào một thanh ghi ngoài trong suốt 1/2 đầu chu kỳ bộ nhớ 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 1/2 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
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ệ
Trang 17thống Nếu mạch dao độ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, một 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 8051 có EPROM này
- Chân truy xuất ngoài EA
Ngõ vào này ở chân 31 có thể được nối với nguồn +5V (Logic 1) hoặc 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( và chân PSEN cũng ở mức Logic 0), chương trình cần thực thi chứa ở
bộ nhớ ngoài Đối với 8031/8032 chân EA phải ở mức Logic 0 vì chúng không có bộ nhớ chương trình trên CHIP Nếu chân EA ở mức Logic 0 đối với 8051/8052, ROM nội bên trong CHIP được vô hiệu hoá và chương trình cần thực thi chứa ở EPROM bên ngoài
Các phiên bản EPROM của 8051 còn sử dụng chân EA làm chân nhận điện áp cấp nguồn 21VPP cho việc lập trình EPROM nội ( Nạp EPROM)
- Các chân thạch anh XTAL 1 và XTAL 2
Trang 18Nằm trên chân 18 và 19 của CHIP, 2 chân này được dùng để nối với thạch anh ngoài nhằm tái tạo dao động và xác định tần số làm việc cho mạch dao động ở bên trong CHIP Kết hợp với thạch anh có thêm 2 tụ gốm để ổn định tần số dao động Tần số danh định của thạch anh là 12MHz cho hầu hết các CHIP của họ MCS - 51
Hình 2.3: Mạch dao động Thạch Anh XTAL 1 và XTAL 2
Hoặc ta cũng có thể dùng một nguồn xung CLOCK TTL để tạo dao động cho 8051 như mạch sau :
Trang 19Hình 2.4: Mạch dao động
4 Cấu trúc của PORT In/Out
Việc ghi đến 1 chân của Port sẽ nạp dư liệu vào bộ chốt của Port, ngõ
ra Q của bộ chốt điều khiển một Transistor trường và Transistor này nối với chân của Port Khả năng phân chia đầu ra (Fan - out) của các Port 1, 2 và 3 là
4 tải vi mạch TTL loại Schottky công suất thấp (LS) còn của Port 0 là 8 tải loại LS
Trang 20Lưu ý là điện trở kéo lên (Pull Up) không có ở Port 0 ( trừ khi port này làm nhiệm vụ của Port địa chỉ dữ liệu đa hợp) Do vậy phải nối thêm một điện trở kéo lên bên ngoài cho Port 0
Giá trị đ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
Ở đâ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, đọc bộ chốt để tránh nhầm mức điện áp do sự hiểu nhầm điện áp do sự kiện dòng tải tăng Các lệnh nhập một 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 hoà 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 một cách tường minh Tuy nhiên nếu một bộ chốt port bị xoá (như CLR P1.5) 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 ( như SETB P1.5)
Trang 22Bộ nhớ bên trong 89C51 bao gồm ROM và RAM
RAM 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 thanh ghi (BANK) và các thanh ghi chức năng đặc biệt ( Special Funtion Registers)
AT89C50 có bộ nhớ theo cấu trúc : Có những vùng 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 AT89C51 nhưng AT89C51 vẫn có thể kết nối với 64K Byte bộ nhớ chương trình và 64KByte bộ nhớ dữ liệu mở rộng
RAM bên trong AT89C51 được phân chia như sau :
- Các thanh ghi có địa chỉ từ 00H đến 1FH
- RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH
Trang 23Hoặc truy xuất dùng cách địa chỉ gián tiếp qua R0 hay R1
- RAM có thể truy xuất từng bit
AT89C51 chứa 210 bit được địa chỉ hoá từng bit, trong đó 128 bit chứa ở các địa chỉ từ 20H đến 2FH, các bit còn lại chứa trong nhóm thanh ghi chức năng đặc biệt
Ý tưởng truy xuất từng bit bằng phần mềm là một đặc tính mạnh của
vi điều khiển nói chung Các bit có thể được đặt, xoá, nhân, cộng với 1 lệnh đơn Ngoài ra các Port cũng có thể truy xuất được từng bit làm đơn giản phần mềm xuất nhập từng bit
- Các thanh ghi (BANK)
Bộ lệnh AT89C51 hỗ trợ 8 thanh ghi có tên là từ R0 đến R7 và theo mặc định ( sau khi RESET hệ thống ), các thanh ghi này ở các địa chỉ 00H đến 07F Lệnh sau đây sẽ đọc nội dung ở địa chỉ 05H vào thanh ghi tích luỹ
Trang 24Giả sử băng thanh ghi thứ 3 đang được truy xuất, lệnh sau đây sẽ di chuyển nội dung của thanh ghi A vào ô nhớ có địa chỉ 18H
MOV R0,A
- Các thanh ghi có chức năng đặc biệt
AT89C51 có 21 thanh ghi chức năng đặc biệt ( SFR : Special Function Register) ở vùng trên của RAM nội từ địa chỉ 80H đến FFH
Tất cả 128 địa chỉ từ 80H đến FFH không được định nghĩa, chỉ có 21 thanh ghi chức năng năng đặc biệt được định nghĩa sẵn các địa chỉ
- Thanh ghi trạng thái chương trình
Thanh ghi trạng thái chương trình PSW (Program Status Word) ở địa chỉ D0H chứa các bit trạng thái như bảng sau :
Trang 25PSW 1 _ D1H Dự trữ
Bảng 2.2: Bảng Thanh ghi trạng thái chương trình
+ Cờ nhớ : C = 1 Nếu phép toán cộng có tràn hoặc phép toán trừ có mượn và ngược lại C = 0
Nếu thanh ghi A có giá trị FF thì lệnh sau : ADD A,#1 Phép cộng này có tràn nên bit C = 1 và kết quả trong thanh ghi A = 00H
Cờ nhớ có thể xem là thanh ghi 1 bit cho các luận lý thi hành trên bit
ANL C,25H + Cờ nhớ phụ : Khi cộng các số BCD, cờ nhớ phụ AC = 1 Nếu kết quả 4 bit thấp trong khoảng 0AH đến 0FH, ngược lại AC = 0
+ Cờ 0 : Cờ 0 là cờ đa dụng dành cho các ứng dụng của người dùng
+ Các bit chọn Bank thanh ghi truy xuất :
Các bit chọn Bank thanh ghi (RS0 và RS1) xác định Bank thanh ghi được truy xuất Chúng được xoá sau khi RESET hệ thống và được thay đổi bằng phần mềm nếu cần
Lệnh sau cho phép Bank thanh ghi 3 và di chuyển nội dung của thanh ghi R7 (địa chỉ byte 1Fh) vào thanh ghi A :
SETB RS1
Trang 26SETB RS0 MOV A,R7
- Thanh ghi B
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi tích luỹ A cho các phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trụ không dấu 8bit trong A và B rồi trả kết quả về 16bit trong A (Byte thấp) và B (Byte cao) Lệnh DIV AB sẽ chia A cho B rồi trả kết quả nguyên trong A và phần dư trong B Thanh ghi cũng có thể xem như thanh ghi đệm đa dụng
- Con trỏ ngăn xếp
Con trỏ ngăn xếp SP là một thanh ghi 8 bit ở địa chỉ 18H Nó chứa địa chỉ của Byte dữ liệu hiện hành trên đỉnh của ngăn xếp Các lệnh trên ngăn xếp bao gồm các lệnh cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ liệu vào ngăn xếp sẽ làm giảm SP Ngăn xếp của 89C51 được cất giữ trong RAM nội và giới hạn các địa chỉ có thể truy xuất bằng các địa chỉ gián tiếp, chúng là 128Byte đầu của AT89C51
Để khởi động SP với ngăn xếp bắt đầu tại địa chỉ 60H, ta dùng lệnh sau :
MOV SP,#5FH
Nếu không dùng lệnh khởi động SP hoặc khi RESET lại AT89C51 thì
SP sẽ bắt đầu tại địa chỉ mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào
ô nhớ ngăn xếp có địa chỉ là 08H Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu hoặc truy xuất ngầm bằng lệnh gọi chương trình con ACALL, LCALL và các lệnh trở về RET,
Trang 27RETI để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con
- Con trỏ dữ liệu DPRT ( Data Pointer)
Con trỏ DPTR được dùng để truy xuất bộ nhớ ngoài, DPTR là một thanh ghi 16bit ở địa chỉ 28H (DPL , Byte thấp) và 83H ( DPH , Byte cao)
Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H
MOV A,#55H MOV DPTR,#1000H MOVX @DPTR,A
Lệnh đầu tiên sử dụng kiểu định địa chỉ tức thời để nạp hằng dữ liệu 55H vào thanh ghi chứa A Lệnh thứ 2 cũng sử dụng kiểu định địa chỉ tức thời, nạp hằng địa chỉ 16bit 1000H cho con trỏ dữ liệu DPTR Lệnh thứ 3 sử dụng kiểu định địa chỉ gián tiếp di chuyển giá trị 55H chứa trong A đến RAM ngoài tại địc chỉ chứa trong DPTR (1000H)
- Các thanh ghi PORT
Các Port xuất nhập của 89C51 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ 90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H các Port 0,2,3 không được dùng để xuất nhập nếu sử dụng thêm bộ nhớ ngoài hoặc nếu có một số đặc tính đặc biệt của 89C51 được sử dụng ( như là 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ệ
Trang 28Tấ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
Thí dụ ta có một động cơ một cuộn dây và một mạch kích dùng Transistor nối tới bit 7 của Port 1, động cơ có thể ngưng hay chạy chỉ nhờ vào
Hinh 2.7: Một lệnh đơn của 8051
SETB P1.7 sẽ làm động cơ chạy và lệnh CLR P1.7 làm động cơ ngưng
Các lệnh trên sử dụng toán tử (dot) để định chỉ 1 bit trong 1Byte cho phép định địa chỉ từng bit
Trình dịch hợp ngữ thực hiện biến đổi dạng ký hiệu thành địa chỉ thực tế nghĩa
là 2 lệnh sau sẽ tương đương
CLR P.17 tương đương với lệnh CLR 97H.
- Các thanh ghi định thời (Timer)
AT89C51 chưa 2 bộ định thời 2 bộ định thời/ đếm 16bit được dùng cho việc định thời hoặc đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0 : Byte thấp) và 8CH
Trang 29(TH0 : Byte cao) Timer 1 ở địa chỉ 8BH (TL0 : Byte thấp) và 8DH ( TH1 : Byte cao) Việc khởi động Timer được SET bởi TIMER Mode
(TMOD) ở địa chỉ 89H và thanh ghi điều khiển
Timer (TCON) ở địa chỉ 88H, chỉ có TCON được địa chỉ hoá từng bit
- Các thanh ghi nối tiếp
AT89C51 chứa một Port nối tiếp dành cho việc trao đổi thông tin với các thiết bị nối tiếp như máy tính, Modem hoặc giao tiếp nối tiếp với các IC khác Một thanh ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả 2 dữ liệu truyền và dữ liệu nhận Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF Các mode vận hành khác nhau được lập trình ghi điều khiển port nối tiếp SCON ở địa chỉ 98H
- Các thanh ghi ngắt
Thực tế ở 8051 chỉ có 5 ngắt dành cho người dùng, song nhiều tài liệu kỹ thuật của các nhà sản xuất vẫn nói rằng có 6 ngắt vì họ tính cả lệnh reset bố trí sáu ngắt của 8051 như sau:
-Reset: khi chân reset được kích hoạt thì 8051 nhảy về địa chỉ 0000
-Hai ngắt dành cho bộ định thời time 0 và time 1, đia chỉ ở bảng vector ngắt của hai ngắt này tương ứng với time 0 và time 1 là 000B4 và 001B4
Hai ngắt phần cứng dành cho các thiết bị bên ngoài nối tới chân 12 (P3.2) và
13 (P3.2) của cổng P3 là INTO và INT1 tương ứng Các ngắt ngoài cũng còn được gọi là EX1 và EX2 Vị trí nhớ trong bảng vector ngắt của hai ngắt
INT0 và INT1 này là 0003H và 0013H
Trang 30Truyền thông nối tiếp có một ngắt cho cả thu lẫn phát, địa chỉ nủa ngắt này trong bảng vector ngắt 0023H
B ả
Trang 32ORG 0 ; Địa chỉ bắt đầu của ROM khi khơi động lại
LJMP MAIN ;bỏ qua bảng vector ngắt
;……… Chương trình khởi động lại
Khi reset thì tất cả mọi ngắt bị cấm, có nghĩa là không có ngắt nào được bộ
vi điều khiển đáp ứng nếu chúng được kích hoạt các ngắt phải được cho phép bằng phần mềm để bộ vi điều khiển có thể đáp ứng được Có một thanh ghi được gọi là cho phép ngắt IE (Interrup Enable), chịu trách nhiệm về việc cho phép ngắt và cấm các ngắt IE là thanh ghi có thể định địa chỉ bit
Thanh ghi cho phét ngắt IE
Trang 33D7 D0
EA IE.7 Nếu EA=0 thì không ngắt nào được báo nhận
Nếu EA=1 thì từng nguồn ngắt sẽ được mở hoặc cấm bằng cách bật hoặc xóa bit cho phét tương ứng
IE.6 Dự phòng cho tương lại
ET2 IE.5 Cho phép hoặc cấm ngắt chàn hoặc thu của timer 2 (89C52)
ES IE.4 Cho phép hoặc cấm cổng nối tiếp
ET1 IE.3 Cho phép hoặc cấm ngắt tràn của time 1
EX1 IE.2 Cho phép hoặc cấm ngắt ngoài 1
ET0 IE.1 Cho phép hoặc cấm ngắt tràn của time 0
EX0 IE.0 Cho phép hoặc cấm ngắt ngoài 0
* Các bit này có thể dùng ở các bộ vi điều khiển có đặc tính mới trong tương lai
Bảng 2.4: Thanh ghi cho phét ngắt IE
- Các bước thực hiện khi cho phép một ngắt
• Để cho phép 1 ngắt, trình tự thực hiện các bước như sau
• bit D7 của thanh ghi IE là EA phải được bật lên cao cho phép các bit còn lại của thanh ghi có hiệu lực
• Nếu EA=1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit tương ứng của các ngắt này trong IE có mức cao
• Nếu EA=0 thì không có ngắt nào được đáp ứng cho dù bit tương ứng trong
IE có giá trị cao
- Thanh ghi điều khiển công suất
Thanh ghi điều khiển công suất (PCON) ở địa chỉ 87H chứa các bit điều khiển
- Tín hiệu RESET
Trang 34AT89C51 có ngõ vào RESET (RST) tác động ở mức cao trong khoảng thời gian 2 chu kỳ sau đó xuống mức thấp để AT89C51 bắt đầu làm việc RST có thể kích tay bằng một phím nhấn thường mở sơ đồ mạch RESET như hình sau:
Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC được RESET tại địa chỉ 0000H Nội dung của RAM trong chíp không bị thay đổi bởi tác động của ngõ vào RESET
Hình 2.8: Mạch RESET
Bảng giá trị của các thanh ghi sau khi RESET hệ thống :
Bộ đếm chương trình 0000H
Trang 35Bảng 2.5: Bảng giá trị của các thanh ghi sau khi RESET hệ thống
6 Hoạt Động Của Thanh Ghi TIME
AT89C51 có hai timer 16 bit, mỗi timer có bốn cách làm việc Người ta sử dụng các timer để:
• Định khoảng thời gian
• Đếm sự kiện
• Tạo tốc độ baud port nối tiếp trong 89C51
Trong các ứng dụng định khoảng time, người ta lập trình timer ở những khoảng đều đặn và đặt cờ tràn timer Cờ được dùng để đồng bộ hóa chương trình để thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc
Trang 36tạo xung nhịp đều đặn của timer để đo thời gian trôi qua giữa hai sự kiện (Vi
Các Thanh nghi chức năng của timer trong 8031
Bảng 2.6: Các Thanh nghi chức năng của timer trong 8031
Thanh Ghi Chế Độ Timer (TMOD):
Cả hai bộ định thời timer 0 và timer 1 đều dùng chung một thanh nghi được gọi là TMOD để thiết lập các chế độ làm việc khác nhau của bộ định thời Thanh ghi TMOD là thanh nghi 8 bít gồm có 4 bít dành cho bộ timer0
và 4 bít dành cho timer 1 Trong đó hai bít thấp của chúng dung để thiết lập chế độ của bộ định thời, còn 2 bít cao dùng để xác định phép toán
Dưới đây chung ta sẽ tìm hiểu về các phét toán
Trang 37Bít Tên Timer Mô tả
Bít chọn chế độ Count/ Timer 1=bộ đếm sự kiện
0 = Bộ định khoảng thời gian
Tóm tắt thanh nghi chức năng TMOD
Bảng 2.7: Tóm tắt thanh nghi chức năng TMOD
Thanh Ghi Điều Khiển Timer (TCON)
Thanh nghi TCON chứa các bít trạng thái và các bít điều khiển cho timer 1, timer 0
Trang 38Bít
Ký hiệu
Địa chỉ
Mô tả
TCON 7 TF1 8FH Cơ bản tràn timer 1 Đặt bởi phần cứng
khi được xóa bở phần mềm, hoặc phần cứng khi
ử lý chỉ đến chương trình phục vụ ngắt TCON 6 TR1 8EH
Bít điều khiển timer 1 chạy đặt xóa bằng mềm để cho timể chạy ngừng
TCON 5 TF0 8DH Cờ báo tràn timer 0
TCON 4 TR0 8CH Bít điều khiển timer 0 chạy
TCON 3 IE1 8BH Cớ cạnh ngắt 1 bên ngoài Đặt bởi phần
khi phát hiện một cạnh xuống ở INT1 xóa phần mềm hoạc phần cứng khi CPU chỉ đến
ng trình phục vụ ngắt TCON 2 IT1 8AH
Cờ kiểu ngắt 1 bên ngoài đặt xóa bằng mềm để ngắt ngoài tich cực cạnh xuống
t hấp TCON 1 IE0 89H Cờ cạnh ngắt 0 bên ngoài
TCON 0 IT0 88H Cờ cạnh ngắt 0 bên ngoài
Trang 39Bảng 2.8: Các thanh nghi chức năng của timer trong 8031
Chúng ta đã biết công dụng của các cờ TR0 và TR1 để bật/tắt các bộ định thời Các bít này thuộc thanh ghi điều khiển bộ định thời TCON (Time Control) Đây là thanh ghi 8 bít như bảng trên giời thiệu, bốn bít cao dùng để lưu các TF, TR cho cả timer 0 và time 1 Còn bốn bít thấp được thiết lập dành cho điều khiển bít ngắt Cũng cần lưu ý rằng thanh ghi TCON là thanh nghi
có thể định địa chỉ bít được lên hoàn toàn có thể thay các lệnh như “SETB TR1” và “CLR TR1” bằng các lệnh tương ứng như “SET TCON.6” và CLR TCON.6”, xem bảng sau
Đôi vơi timer 0
SETB TR0 = SETB TCON.4 SETB TR0 = CLR TCON.4 SETB TF0 = SETB TCON.5 CLR TF0 = CLR TCON.5
Đôi với Timer 1
SETB TR1 = SETB TCON.6 CLR TR1 = CLR TCON.6 SETB TF1 = SETB TCON.7 CLR TF1 = CLR TCON.7
Bảng 2.9: Các lệnh tương ứng đối với thanh ghi điều khiển bộ định thời Khởi
Động Và Truy Xuất Thanh Ghi Timer
Thông thường các thanh ghi được khởi động một lần đầu ở chương trinh để đặt
ở chế độ làm việc đúng Sau đó trong thân chương trình, các thanh ghi timer được cho chạy, dừng các bít được kiểm tra và xóa, các thanh ghi timer được đọc và cập nhật… theo dõi hỏi các ứng dụng
Trang 40TMOD là thanh ghi thứ nhất được khởi động vì nó đặt chế độ hoạt động Ví
dụ, các lệnh sau khởi động timer 1 như timer 16 bít (Chế độ 1) có xung nhịp
từ bộ dao động trên chíp cho việc định khoảng thời gian
MOV TMOD, #1B
Lệnh này sẽ đặt M1 = 1 và M0 = 0 cho chế độ 1, C/T=0 và Gate = 0 cho xung nhịp nội và xóa các bít chế độ Timer 0 Dĩ nhiên, timer không thật sự bắt đầu định thời cho đến khi bít điều khiển chạy TR1 được đặt lên 1
Nếu cần số đếm ban đầu, các thanh ghi TL1/TH1 cũng phải được khởi động, một khoảng 100µm có thể được khởi động bằng các khơi động giá trị cho TH1/TL1 là FF9CH
MOV TL1 , #9CH MOV TH1 , #0FFH Rồi timer được cho chạy bằng cách đặt bít điều khiển chạy như sau:
SETB TR1
Cờ báo tràn được tự động đặt lên một sau 100µm Phần mềm có thể đời trong 100µm bằng cách dùng lệnh rẽ nhánh có điều kiện nhẩy đến chính nó trong khi cờ bào tràn chưa được lên 1:
WAIT: JNB TF1, WAIT Khi timer tràn, cần dừng timer và xóa cờ báo tràn trong phần mềm
CLR TR1