Mục lục Chương I: GIỚI THIỆU …………………………………………..…trang 1 Chương II: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN AT89C51……….2 I. Giới thiệu. ………………………………………………… 2 II Lịch sử phát triển………………………………………...........2 III Khảo sát họ vi điều khiển 8051 và 8031: …………………….3 1. Cấu trúc bên trong của 80518031 ……………………...........3 2. Chức năng các chân của vi điều khiển ……………………….4 3. Tổ chức bộ nhớ ………………………………………………7 4. Các thanh ghi chức năng đặc biệt ……………………………10 5. Bộ nhớ ngoài………………………………………………….14 6. Lệnh Reset……………………………………………………18 7. Hoạt động của bộ định thời…………………………………..18 8. Hoạt động của port nối tiếp ………………………………….25 9. Hoạt động ngắt ……………………………………………….28 10. Tập lệnh của 8051 và 8031…………………………………..32 Chương III: KHẢO SÁT VI MẠCH GIAO TIẾP NGOẠI VI 8255A…….39 I. Cấu trúc phần cứng 8255 …………………………….……...39 II. Cấu trúc phần mềm của 8255 ………………………….…..41 III. Giao tiếp giữa vi xử lí với 8255A…………………………....42 1. Giao tiếp kiểu IO …………………………………………...42 2. Giao tiếp kiểu bộ nhớ ……………………………………….43 Chương IV: KHẢO SÁT BỘ NHỚ BÁN DẪN ………………………… ..44 I. Bộ nhớ chỉ đọc ROM ………………………………………....44 1. Cấu trúc bên trong của ROM ……………………………….. .44 2. Thời hằng truy xuất của bộ nhớ ROM……………………..…..46 3. Các loại bộ nhớ ROM……………………………………..…...46 4. Khảo sát bộ nhớ EPROM 2764…………………………..….....46 II. Bộ nhớ RAM…………………………………………….……..48 1. Cấu trúc của RAM ……………………………………………..48 2. Các loại RAM ………………………………………………….49 Chương V: CHUYỂN ĐỔI TƯƠNG TỰ SỐ ……………………………...50 I. Khái niệm chung ………………………………………………….50 II. Các phương pháp chuyển đổi tương tự số………………………..51 1. Phương pháp tích phân (Intergration methol)…….………………51 2. Phương ADC xấp xỉ liên tiếp ( SuccessiveApproximation ADC)..523. Phương pháp song song ( paralled methol)………………….53 Chương VI: ĐO NHIỆT ĐỘ ĐỘ ẨM ……………………………………55 I. Hệ thống đo lường……………………………………………55 1. Giới thiệu…………………………………………………….55 2. Hệ thống đo lường số ………………………………………..55 II. Đo Nhiệt Độ:…………………………………………………56 III. Đo Độ Ẩm : ……………………………………………….57 1. Không khí ẩm ………………………………………………..57 2. Các thông số đặc trưng của không khí ẩm …………………..58 3. Các thiết bị đo độ ẩm hiện có………………………………...60 Chương VII: THIẾT KẾ LẬP TRÌNH ……………………………….61 I. Nhiệm vụ thiết kế ……………………………………………61 II. Sơ đồ và chức năng từng khối ………………………………. 61 III. Thiết kế và phân tích chức năng từng khối …………………..62 1. Bộ cảm biến độ ẩm HTM2500………………………………..62 2. Thiết kế bộ cảm biến nhiệt độ………………………………...66 3. Thiết kế bộ chuyển đổi tương tự số ADC…………………….69 4. Mở rộng port nhậpxuất dùng PPI 8255A…………………….74 5. Thiết kế bộ nhớ ……………………………………………..75 6. Thiết kế giao tiếp bằng bàn phím……………………………..80 7. Thiết kế mạch hiển thị ………………………………………..80 8. Thiết kế mạch giao tiếp công xuất ……………………………85 IV. Sơ đồ mạch nguyên lí thuật giải chương trình:……………….87 1. Sơ đồ nguyên lí……………………………………………….88 2. Thuật toán và chương trình…………………………………...89 Chương Kết Luận ……………………………………………………..99 Tài liệu tham khảo ……………………………………………………..100
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
Trang 2LỜI CẢM TẠ
Trong suốt khoá học (2002-2007) tại trường Đại Học Bách Khoa Đà Nẵng, được sự dạy dỗ tận tình của các thầy cô Khoa Điện đã cung cấp cho
em những kiến thức chuyên môn cần thiết để em
có thể thực hiện hoàn thành đề tài này.Em xin chân thành cảm tạ đến:
Bộ môn Tự Động –Đo Lường đã trang bị cho
em những kiến thức cần thiết để em có thể hoàn thành đề tài này và tạo điều kiện cho em hoàn tất khoá học
Đặc biệt TS Lâm Tăng Đức- giáo viên hướng dẫn đề tài đã có những lời khuyên quí báu giúp
em có những định hướng tốt trong khi thực hiện
đề tài này
Tất cả các bạn đã đóng gốp ý kiến trong lúc mình thực hiện đề tài
TP.Đà Nẵng- Tháng 5 Năm 2007 Sinh viên thực hiện
Võ Ngọc Tuyến
Trang 3Chương I: GIỚI THIỆU ……… …trang 1
Chương II: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN AT89C51……….2
I./ Giới thiệu ……… 2
II/ Lịch sử phát triển……… 2
III/ Khảo sát họ vi điều khiển 8051 và 8031: ……….3
1./ Cấu trúc bên trong của 8051/8031 ……… 3
2./ Chức năng các chân của vi điều khiển ……….4
3./ Tổ chức bộ nhớ ………7
4./ Các thanh ghi chức năng đặc biệt ………10
5./ Bộ nhớ ngoài……….14
6./ Lệnh Reset………18
7./ Hoạt động của bộ định thời……… 18
8./ Hoạt động của port nối tiếp ……….25
9./ Hoạt động ngắt ……….28
10./ Tập lệnh của 8051 và 8031……… 32
Chương III: KHẢO SÁT VI MẠCH GIAO TIẾP NGOẠI VI 8255A…….39
I./ Cấu trúc phần cứng 8255 ……….…… 39
II./ Cấu trúc phần mềm của 8255 ……….… 41
III./ Giao tiếp giữa vi xử lí với 8255A……… 42
1./ Giao tiếp kiểu I/O ……… 42
2./ Giao tiếp kiểu bộ nhớ ……….43
Chương IV: KHẢO SÁT BỘ NHỚ BÁN DẪN ……… 44
I./ Bộ nhớ chỉ đọc ROM ……… 44
1./ Cấu trúc bên trong của ROM ……… .44
2./ Thời hằng truy xuất của bộ nhớ ROM……… … 46
3./ Các loại bộ nhớ ROM……… … 46
4./ Khảo sát bộ nhớ EPROM 2764……… … 46
II./ Bộ nhớ RAM……….…… 48
1./ Cấu trúc của RAM ……… 48
2./ Các loại RAM ……….49
Chương V: CHUYỂN ĐỔI TƯƠNG TỰ- SỐ ……… 50
I./ Khái niệm chung ……….50
II./ Các phương pháp chuyển đổi tương tự- số……… 51
1./ Phương pháp tích phân (Intergration methol)…….………51
2./ Phương ADC xấp xỉ liên tiếp ( Successive-Approximation ADC) 52
Trang 4Chương VI: ĐO NHIỆT ĐỘ- ĐỘ ẨM ………55
I./ Hệ thống đo lường………55
1./ Giới thiệu……….55
2./ Hệ thống đo lường số ……… 55
II./ Đo Nhiệt Độ:………56
III./ Đo Độ Ẩm : ……….57
1./ Không khí ẩm ……… 57
2./ Các thông số đặc trưng của không khí ẩm ……… 58
3./ Các thiết bị đo độ ẩm hiện có……… 60
Chương VII: THIẾT KẾ - LẬP TRÌNH ……….61
I./ Nhiệm vụ thiết kế ………61
II./ Sơ đồ và chức năng từng khối ……… 61
III./ Thiết kế và phân tích chức năng từng khối ……… 62
1./ Bộ cảm biến độ ẩm HTM2500……… 62
2./ Thiết kế bộ cảm biến nhiệt độ……… 66
3./ Thiết kế bộ chuyển đổi tương tự số ADC……….69
4./ Mở rộng port nhập/xuất dùng PPI 8255A……….74
5./ Thiết kế bộ nhớ ……… 75
6./ Thiết kế giao tiếp bằng bàn phím……… 80
7./ Thiết kế mạch hiển thị ……… 80
8./ Thiết kế mạch giao tiếp công xuất ………85
IV./ Sơ đồ mạch nguyên lí thuật giải chương trình:……….87
1./ Sơ đồ nguyên lí……….88
2./ Thuật toán và chương trình……… 89
Chương Kết Luận ……… 99
Tài liệu tham khảo ……… 100
Trang 5
Sơ đồ khối tổng quát ………61
Bảng phạm vi làm việc của cảm biến ẩm……….62
Bảng đặc tính cảm biến ẩm……… 63
Bảng các mức ra tham chiếu của cảm biến ẩm ………64
Qui định cấu trúc cảm biến ẩm và hình vẽ………65
Sơ đồ mạch khuếch đại……….66
Sơ đồ kết nối ADC0809 ……… …73
Bảng qui định địa chỉ ……… ….77
Sơ đồ kết nối bộ nhớ ngoài với 8051……… 79
Sơ đồ giao tiếp bằng phím ……… 80
Sơ đồ mạch hiển thị nhiệt độ và độ ẩm ……….83
Sơ đồ mạch hiển thị hệ số trọng lượng M ……… 85
Sơ đồ mạch giao tiếp công xuất ……… 87
Sơ đồ nguyên lí toàn mạch ……… …89
Trang 6Tóm tắt đồ án
Nội dung thuyết minh là sử dụng vi điều khiển AT89C51 để thiết kế hệ thống
đo và khống chế độ ẩm không khí trong phòng kín.Để đo được độ ẩm không khí em sử dụng bộ cảm biến ẩm HTM2500 và cảm biến nhiệt độ LM35.Tín hiệu tương tự thu được từ các bộ cảm biến được chọn và chuyển đổi thành tín hiệu số thông qua bộ ADC0809 Dữ liệu số ra khỏi ADC0809 ở dạng 8 bit được gởi đến Port 0 của vi điều khiển 8051 khi vi điều khiển có lệnh đọc dữ liệu Tương ứng với dữ liệu đọc được vi điều khiển sẽ cho xuất ra các bộ hiển thị giá trị độ ẩm tương đối , nhiệt độ t, và giá trị hệ số trọng lượng hơi nước
M ứng với giá trị t đọc được Người quan sát có thể tính được khối lượng hơi nước bằng biểu thức * M / 1000 [g/m³]
Để tạo được dung lượng ROM đủ lớn có khả năng nhập được số liệu cho bảng tra M (tính theo bảng nước và hơi nước bão hòa trong phạm vi nhiệt độ rộng),
em sử dụng EPROM 2764 EPROM 2764 có 8 bit địa chỉ thấp từ 8 bit của port
0 được chốt qua 74LS373, 5 bit địa chỉ cao nối với 5 bit thấp của port 2
Hai IC 8255A được sử dụng để mở rộng port dữ liệu cho 8051 bằng cách ghép
8 bit dữ liệu của nó với 8 bit port 0 của 8051
Để quản lí không gian địa chỉ chương trình, qua giá trị của 3 bit P2.7 P2.6 P2.5
IC giãi mã địa chỉ 74LS138 sẽ giúp chọn đúng IC có địa chỉ (đã được qui định trước) mà con trỏ chương trình nhảy đến
Các tải xoay chiều được điều khiển đóng cắt nguồn cấp bằng cách điều khiển đóng cắt cấp điện cho cuộn dây của Rơle
Như vậy, khi người quan sát chọn giá trị độ ẩm cần duy trì từ bàn phím thì dưới tác động của chương trình đã nạp trước, các tải xoay chiều sẽ được đóng cắt một cách thích hợp để duy trì độ ẩm không khí trong phòng theo đúng giá trị đã đặt
Trang 7
I Đặt vấn đề:
Ngày nay với sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ
thống điều khiển dần dần được tự động hoá Với kỹ thuật tiên tiến vi xử lý, vi mạch
số….được ứng dụng vào lĩnh vực điều khiển tự động với chương trình thiết lập
trước thay thế cho các hệ thống điều khiển cơ khí thô sơ, tốc độ xử lý chậm, ít
chính xác
Hiện nay, hầu hết các quy trình sản xuất hàng tiêu dùng quá trình sấy đóng
vai trò quan trọng quyết định đến chất lượng sản phẩm Do đó, việc đo được nhiệt
độ, độ ẩm và khống chế các yếu tố này theo đúng yêu cầu mong muốn là điều hết
sức quan trọng và cần thiết
Để kiểm soát được nhiệt độ, độ ẩm trong buồng sấy, dùng vi điều khiển 8051
để tự động hoá quá trình là phương pháp tiện lợi, giá thành thích hợp cho những
ứng dụng rộng rãi Được sự đồng ý của Khoa Điện - Trường Đại học Bách khoa Đà
Nẵng, em tiến hành thực hiện đề tài “Dùng vi điều khiển để đo nhiệt độ, độ ẩm và
khống chế độ ẩm trong phòng kín”
II Giới hạn đề tài:
- Đo nhiệt độ và độ ẩm phòng kín, khống chế độ ẩm trong phòng theo một
giá trị đặt trước
- Tính toán hệ số khối lượng hơi nước trong không khí trong phạm vi hoạt
động của thiết bị đo theo tiêu chuẩn của hơi nước bão hoà theo nhiệt độ và hiển thị
thông số này khi giá trị độ ẩm được thiết lập
III Mục đích nghiên cứu:
Đề tài này nhằm các mục đích:
- Dùng kỹ thuật vi điều khiển để áp dụng vào các quy trình sản xuất sản
phẩm cần đến công đoạn đo nhiệt độ, độ ẩm
- Giúp người sử dụng có thể kiểm soát, điều khiển được độ ẩm của một
không gian kín thích hợp
- Hổ trợ người vận hành có thể tính được nhanh chóng khối lượng hơi nước
trong phạm vi thể tích không khí đang quang sát
Trang 8
Chương 2
GIớI THIệU CHUNG Về Bộ VI ĐIềU KHIểN
I.GIớI 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 tử dân dụng, các bộ vi điều khiển, điều khiển
hoạt động của ti vi, 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
II.LịCH Sử PHáT TRIểN CủA CáC Bộ VI ĐIềU KHIểN:
Bộ vi điều khiển được phát triển từ bộ vi xử lí, từ những năm 70 của thế kỷ
XX, 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í
Đến năm 1976 Công ty INTEL (Interlligen-Electronics) 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, là chip đầu tiên của họ
vi điều khiển MCS 48 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 8 bit tương tự
như 8048 và hình thành họ vi điều khiển MCS-48 (Microcontroller-sustem-48)
Đế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
Bộ vi điều khiển đầu tiên của Tập đoàn SIEMENS cung cấp chip SAB 8051,
một cải tiến của 8051 có 6 Port xuất/nhập 8 bit, đặc biệt có một bộ biến đổi AD 8
bit với 8 kênh ngõ vào
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
Trang 9III.KHảO SáT Bộ VI ĐIềU KHIểN 8051 Và 8031:
IC vi điều khiển 8051/8031 thuộc họ MCS51 có các đặt điểm sau :
- 4KB ROM (được lập trình bởi nhà sản xuất chỉ có ở 8051)
- 128 byte RAM
- 4port I/0 8 bit
- Hai bộ định thời 16 bit
- Mạch giao tiếp nối tiếp
- 64KB không gian bộ nhớ chương trình mở rộng
- 64 KB không gian bộ nhớ dữ liệu mở rộng
- Bộ xử lý Bit (thao tác trên các bit riêng lẻ)
- 210 bit được địa chỉ hóa
- Nhân/chia 4s,
1./ Cấu trỳc bờn trong của 8051 / 8031:
Hình 2.1 : Sơ Đồ Khối 8051 / 8031
OTHER REGISTER
128 byte RAM
128 byte RAM 8032\8052
ROM 0K:
8031\8032 4K:8951 8K:8052
Trang 10Phần chính của vi điều khiển 8051 / 8031 là bộ xử lí trung tâm (CPU: central
processing unit ) bao gồm :
- Thanh ghi tích lũy A
- Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học (ALU : Arithmetic Logical Unit )
- Từ trạng thái chương trình (PSW : Prorgam Status Word)
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
- Ngoài ra còn có bộ nhớ chương trình, bộ giải mã lệnh, bộ điều khiển thời
gian và logic
Đơn vị xử lí trung tâm nhận trực tiếp xung từ bộ giao động, ngoài ra còn có
khả năng đưa một tín hiệu giữ nhịp từ bên ngoài
Chương trình đang chạy có thể cho dừng lại nhờ một khối điều khiển ngắt ở
bên trong Các nguồn ngắt có thể là: các biến cố ở bên ngoài , sự tràn bộ đếm định
thời hoặc cũng có thể là giao diện nối tiếp
Hai bộ định thời 16 bit hoạt động như một bộ đếm
Các cổng (port0, port1, port2, port3 ) Sử dụng vào mục đích điều khiển
ở cổng 3 có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ
bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bên
ngoài
Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làm
việc độc lập với nhau Tốc độ truyền qua cổng nối tiếp có thể đặt trong vảy rộng và
Các thanh ghi sử dụng để lưu trữ thông tin trong quá trình xử lí Khi CPU làm
việc nó làm thay đổi nội dung của các thanh ghi
2./ Chức năng cỏc chõn vi điều khiển :
a.port0 : là port có 2 chức năng (các chân từ 32 đến 39) trên 8051 trong các
thiết kế cỡ nhỏ dùng làm điện tụ xuất/nhập Đối với các thiết kế cỡ lớn (với bộ nhớ
mở rộng) port0 trở thành bus địa chỉ và bus dữ liệu đa hợp
b.port1 : port1 là một port I/O (các chân 1 đến 8) trên 8051 Các chân được ký
hiệu P1.0, P1.1,…., P1.7 có thể dùng cho các thiết bị ngoài nếu cần Port1 không có
chức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị
ngoài
c.port2 : port2 là một port công dụng kép (các chân 21 đến 28) trên 8051 được
dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế
dùng bộ nhớ mở rộng
Trang 11d.Port3 : port3 là một port công dụng kép (các chân 10 đến 17) Các chân
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
trưng cụ thể của 8051)
Bảng 2.1 : Chức năng của các chân trên port3
e PSEN (Program Store Enable ): 8051/8031 có 4 tín hiệu điều khiển bus
PSEN là tín hiệu ra trên chân 29 Nó là tín hiệu điều khiển để cho phép bộ nhớ
chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một
EPROM để cho phép đọc các bytes mã lệnh
PSEN sẽ ở trong thời gian tìm - nạp lệnh Các mã nhị phân của chương trình
được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mã
lệnh Khi thi hành chương trình trong ROM nội (8051) PSEN sẽ ở mức thụ động
(logic1)
f ALE (Address Latch Enable ) :
8051 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) bú dữ liệu và bus địa chỉ Khi Port0 sử dụng đa hợp phân
ALE xuất đến hiện chốt địa chỉ vào 1 thanh ghi ngoài hay nửa đầu chu kỳ bộ nhớ
(Memory cycle) sau đó các thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ
Sau đó, các chân port 0 dùng để xuất/nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ
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à nguồn xung nhịp cho các hệ thống Nếu xung trên 8051 là 12MHz
thì ALE có tần số 2MHz Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ
bị mất Chân ALE cũng được làm ngõ vào cho xung lập trình cho EPROM trong
8051
g EA (External Access) :
Trang 12Tín hiệu vào EA(chân 31) có thể thường được nối với 5V (logic 1) hoặc với
GND (logic 0) Nếu ở logic 1, 8051 thi hành chương trình từ ROM nội trong
khoảng địa chỉ thấp (4K) Nếu ở logic 0, bộ nhớ bên trong chương trình 8051 sẽ bị
cấm và chương trình thi hành từ EPROM mở rộng Người ta còn dùng chân EA
làm chân cấp điện áp 21V khi lập trình cho EPROM trong 8051
h RST (Reset) :
Ngõ vào RST (chân 9) là ngõ reset của 8051 Khi tín hiệu này được đưa lên
mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8051 được tải những giá
trị thích hợp để khởi động hệ thống
i Các chân XTAL1 và XTA2 :
Như trong hình vẽ, 8051 có một bộ dao động trên chip Nó thường được nối
với thạch anh giữa hai chân 18 và 19 Các tụ ổn định cũng cần thiết như đã vẽ Tần
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
18
19
12 MHz
P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
Trang 133 Tổ chức bộ nhớ :
8051 / 8031 có cấu trúc theo bộ nhớ harvard :có những vùng cho bộ nhớ riêng
biệt cho chương trình dữ liệu.Cả chương trình và dữ liệu có thể ở bên trong 8051,dù
vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến 64Kbyte bộ nhớ
chương trình và 64 Kbyte bộ nhớ dữ liệu
Bộ nhớ bên trong bao ROM(8051) và RAM trên chip,RAM trên chip bao gồm
nhiều phần:các dãy thanh ghi(00H-1FH),phần lưu trữ địa chỉ hoá từng
bit(20H-2FH),phần lưu trữ đa dụng(30H-7FH) và các thanh ghi chức năng đặt
a RAM đa dụng:
Moùi ủũa chổ trong vuứng RAM ủa duùng ủeàu coự theồ ủửụùc truy xuaỏt tửù do
duứng caựch ủaựnh ủũa chổ trửùc tieỏp hoaởc giaựn tieỏp Vớ duù, ủeồ ủoùc noọi dung ụỷ ủũa chổ
5FH cuỷa RAM noọi vaứo thanh ghi tớch luừy leọnh sau seừ ủửụùc duứng :
MOV A, 5FH
Lệnh này di chuyển một byte dữ liệu bằng cách đánh địa chỉ trực tiếp để xác
định “địa chỉ nguồn”(5FH) Đích nhận dữ liệu được ngầm định trông mã lệnh là
thanh ghi tích luỹ A
RAM bên trong cũng có thể được truy xuất bằng cách đánh địa chỉ gián tiếp
qua RO hay R1 Ví dụ,hai lệnh sau thi hành cùng nhiệm vụ như lệnh trên :
MOV R0, #5FH
MOV A, @R0
Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0 và
lệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu “được trỏ bởi R0” vào thanh
ghi tích luỹ
Trang 14địa chỉ byte địa chỉ bit
7F
30 2F 2E 2D 2C 2B 2A
18
17
10 0F
67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58
57 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 4A 49 48
47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38
37 36 35 34 33 32 31 30 2F 2E 2D 2C 2B 2A 29 28
27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 19 18
17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08
07 06 05 04 03 02 01 00
BANK 3 BANK 2 BANK 1 Dãy thanh ghi mặc định
R0-R7
Bảng tóm tắt bản đồ vùng nhớ trên chip data 8051
Trang 15địa chỉ byte địa chỉ bit
FF F0 E0 D0 B8 B0 A8 A0
99
98
90
8D 8C 8B 8A
TL1 TL0 TMOD
Không định địa chỉ bit Không định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bit
SP
Không định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bit
Tóm tắc bộ nhớ dữ liệu trên chip
b.RAM địa chỉ hoá từng bit:
8051 / 8031 chứa 210 vị trí bit được địa chỉ hoá,trong đó 128 bit là ở các byte
20H đến 2FH,và phần còn lại trong các thanh ghi chức năng đặc biệt.ý tưởng truy
xuất từng bit từng bit riêng rẽ bằng phần mềm là một đặt tính của vi điều khiển nói
Trang 16chung Các bit có thể được đặt, xoá, AND, OR bằng một lệnh đơn.Đa số các bộ vi
xử lí đòi hỏi một chuổi lệnh đọc sửa ghi để nhận được cùng kết quả
Hơn nữa,các port I/O cũng được địa chỉ từng bit làm đơn giản phần mềm xuất nhập
từng bit
128 bit ở các byte 20H đến 2FH có thể được truy xuất như các byte hay các bit phụ
thuộc vào lệnh được dùng, ví dụ để đặt bit 67H, ta dùng lệnh sau:
SETB 67H
Chú ý rằng “địa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “địa chỉ byte
2CH” lệnh trên sẽ không tác động đến các bit khác của địa chỉ này
c.Các dãy thanh ghi:
32 byte thấp của bộ nhớ nội là các dãy thah ghi Bộ nhớ lệnh của
8051/8031hổ trợ 8 thanh ghi (R0 đến R7) và theo mặc định(sau khi reset hệ thống)
và các thanh ghi này ở các địa chỉ 00H-07H Lệnh sau đây sẽ đọc nội dung ở đia chỉ
05H vào thanh ghi tích luỹ
MOV A,R5
ẹaõy laứ leọnh moọt byte duứng ủũa chổ thanh ghi Taỏt nhieõn, thao taực tửụng tửù
coự theồ ủửụùc thi haứnh baống leọnh 2 byte duứng ủũa chổ trửùc tieỏp naốm trong byte thửự
hai:
MOV A,05H
Caực leọnh duứng caực thanh ghi R0 ủeỏn R7 thỡ seừ ngaộn vaứ nhanh hụn caực leọnh
duứng ủũa chổ trửùc tieỏp Caực giaự trũ dửừ lieọu ủửụùc duứng thửụứng xuyeõn neõn duứng moọt
trong caực thanh ghi naứy
Bank thanh ghi tớch cửùc coự theồ chuyeồn ủoồi baống caựch thay ủoồi caực bit choùn
bank thanh ghi trong tửứ traùng thaựi chửụng trỡnh (PSW) Giaỷ sửỷ raống bank thanh
ghi 3 ủửụùc tớch cửùc, leọnh sau seừ ghi noọi dung cuỷa thanh ghi tớch luừy vaứo ủũa chổ
18H:
MOV R0,A
Y tưởng dùng các dãy thanh ghi cho phép “chuỷên hướng” chương trình
nhanh và hiệu quả( từng phần riêng rẽ của phần mềm sẽ có một hanh ghi riêng rẽ
không phụ thuộc vào các phần khác
4./ Các thanh ghi chức năng đặc biệt:
Các thanh ghi nội của 8051/8031 được truy xuất ngầm định bởi lệnh Ví dụ
lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1 Tác động này được
ngầm định trong mã lệnh
Các thanh ghi trong 8051/8031 được định dạng như một phần của RAM trên
chip Vì vậy một thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi trực tiếp, sẽ không
có lợi khi đặt chúng vào trong RAM trên chip).Đó là lý do để 8051/8031 có nhiều
thanh ghi Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt (SFR: Special
Funtion Register) ở vùng trên của RAM nội, từ địa chỉ 80H đến FFH Chú ý rằng
Trang 17hầu hết 128 địa chỉ từ 80H đến FFH không được định nghĩa Chỉ có 21 địa chỉ SFR
là được định nghĩa
Ngoaùi trửứ tớch luừy (A) coự theồ ủửụùc truy xuaỏt ngaàm nhử ủaừ noựi, ủa soỏ caực
SFR ủửụùc truy xuaỏt duứng ủũa chổ trửùc tieỏp chuự yự raống moọt vaứi SFR coự theồ ủửụùc
ủũa chổ hoựa bit hoaởc byte Ngửụứi thieỏt keỏ phaỷi thaọn troùng khi truy xuaỏt bit vaứ
byte Vớ duù leọnh sau:
SETB 0E0H
Seừ Set bit 0 trong thanh ghi tớch luừy, caực bit khaực khoõng thay ủoồi Ta thaỏy
raống E0H ủoàng thụứi laứ ủũa chổ byte cuỷa thanh ghi tớch luừy vaứ laứ ủũa chổ bit coự
troùng soỏ nhoỷ nhaỏt trong thanh ghi tớch luừy Vỡ leọnh SETB chổ taực ủoọng treõn bit,
neõn chổ coự ủũa chổ bit laứ coự hieọu quaỷ
a Từ trạng thái chương trình PSW (Program Status Word):
D2H D1H D0H
Cờ nhớ
Cờ nhớ phụ
Cờ 0 Chọn dãy thanh ghi (bit 1) Chọn dãy thanh ghi (bit 0)
00=bank 0;địa chỉ 00H-07H 01=bank 1:địa chỉ 08H-0FH 10=bank 2:địa chỉ 10H-17H 11=bank 3:địa chỉ 18H-1FH
Cờ tràn
Dự trữ
Cờ kiểm tra chẳn lẻ
Bảng 2.2: Thanh ghi PSW
Cờ nhớ (CY) có công dụng kép Thông thường nó được dùng cho các lệnh số
học: có sẽ được set nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số
mượn phép trừ Ví dụ, nếu thanh chứa A có nội dung là FFH, thì lệnh sau:
ADD A,#1
Sẽ trả về thanh ghi tích luỹ kết quả 00H và set cờ nhớ trong PSW
Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh thao tác trên
bit Ví dụ, lệnh sẽ AND bit 25H với cờ nhớ CY và đặt kết quả trở vể cờ nhớ:
ANL C,25H
Cờ nhớ phụ:
Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit thấp
trong khoảng 0AH đến 0FH Nừu các giá trj cộng được là số BCD, thì sau lệnh
cộng cần có DA A( hiệu chỉnh thập phân thanh ghi tích luỹ)để mang kết quả lớn
hơn 9 trở về tầm từ 09
Trang 18 Cờ 0
Cờ 0 (F0)là một bit đa dụng dùng cho các ứng dụng của người dùng
Các bit chọn dãy thanh ghi
(RSO v RS1) dùng xác định dãy thanh ghi tích cực Chúng được xoá sau khi
reset hệ thống và được thay đổi mức logic bằng phần meàm nếu caàn Ví dụ, ba lệnh
sau cho phép dãy thanh ghi 3 và di chuyển nội dung cuả thanh ghi R7 (địa chỉ byte
1FH) đến thanh ghi tích luỹ:
SETB RS1
SETB RSO
MOV A,R7
Khi chương trình được hợp dịch các địa chỉ bit đúng được thay thế cho các ký
hiệu “RS1” và “RS0” Vởy lệnh SETB RS1 sẽ giông như lệnh SETB 0D4H
Cờ tràn
Cờ tràn (OV) được set sau phép toán cộng hoặc trừ nếu có xuất hiện một tràn
số học Khi các số có dấu được cộng hoặc trừ với nhau, phaàn meàm có thể kiểm tra
bit này để xác định xem kết quả của nó co nằm trong tầm xác định không Khi các
số không dấu không được cộng, bit OV có thể được bỏ qua Các kết quả lớn hơn
-127 hoặc nhỏ hơn +128 sẽ set cờ OV bằng 1
b Thanh ghi B:
Thanh ghi B ụỷ ủũa chổ F0H ủửụùc duứng chung vụựi thanh ghi A trong caực pheựp
toaựn nhaõn vaứ chia Leọnh MUL AB seừ nhaõn 2 giaự trũ khoõng daỏu 8 bit trong A vaứ B
roài traỷ veà keỏt quỷa 16 bit trong A (byte thaỏp) vaứ B (byte cao) Leọnh DIV AB seừ
chia A cho B roài traỷ veà keỏt quỷa nguyeõn trong A vaứ phaàn dử trong B Thanh ghi B
cuừng coự theồ ủửụùc xem nhử thanh ghi ủeọm ủa duùng Noự ủửụùc ủũa chổ hoựa tửứng bit
baống caực ủũa chổ bit FOH ủeỏn F7H
c Con trỏ ngăn xếp(stack):
Con troỷ ngaờn xeỏp (Stack Pointer) laứ moọt thanh ghi 8 bit ụỷ ủũa chổ 81H Noự
chửựa ủũa chổ cuỷa byte dửừ lieọu hieọn haứnh treõn ủổnh cuỷa ngaờn xeỏp Caực leọnh treõn
ngaờn xeỏp bao goàm caực thao taực caỏt dửừ lieọu vaứo ngaờn xeỏp vaứ laỏy dửừ lieọu ra khoỷi
ngaờn xeỏp Leọnh caỏt dửừ lieọu vaứo ngaờn xeỏp seừ laứm taờng SP trửụực khi ghi dửừ lieọu,
vaứ leọnh laỏy dửừ lieọu ra khoỷi ngaờn xeỏp seừ laứm giaỷm SP Ngaờn xeỏp cuỷa 8051/8031
ủửụùc giửừ trong RAM noọi vaứ ủửụùc giụựi haùn caực ủũa chổ coự theồ truy xuaỏt baống ủũa
chổ giaựn tieỏp chuựng laứ 128 byte ủaàu cuỷa 8051/8031
Để khởi động lại SP ngăn xếp bắt đầu tại 60H, các lệnh sau đây được dùng:
MOV SP,#5FH
Trên 8051/8031 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM
trên chip là 7FH Dùng giá trị 5FH vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu
đầu tiên
Trang 19Người thiết kế có thể chon không phảI khởi động lại con trỏ ngăn xếp mà để
nó lấy giá trị mặc định khi reset hệ thống Giá trj mặc định đó là 07H và kết quả là
ngăn đầu tiên để cất dữ liệu có địa chỉ 08H Nếu phần mềm ứng dụng không khởi
động lại SP , dãy thanh ghi 1 (có thể cả 2 và 3) sẽ không được dùng vì vùng RAM
này đã được dùng làm ngăn xếp
Ngaờn xeỏp ủửụùc truy xuaỏt trửùc tieỏp baống caực leọnh PUSH vaứ POP ủeồ lửu giửừ
taùm thụứi vaứ laỏy laùi dửừ lieọu hoaởc ủửụùc truy xuaỏt ngaàm baống caực leọnh goùi chửụng
trỡnh con (ACALL, LACALL) vaứ caực leọnh trụỷ veà (RET,RETI) ủeồ caỏt vaứ laỏy laùi
boọ ủeỏm chửụng trỡnh
d Con trỏ dữ liệu(DPTR):
DPTR ủửụùc duứng ủeồ truy xuaỏt boọ nhụự ngoaứi laứ moọt thanh ghi 16 bit ụỷ ủũa
chổ 82H(DPL: byte thaỏp) vaứ 83H (DPH:byte cao) Ba leọnh sau seừ ghi 55H vaứo
RAM ngoaứi ụỷ ủũa chổ 1000H:
MOV A,#55H
MOV DPTR,#1000H
MOVX @DPTR,A
Leọnh ủaàu tieõn duứng ủũa chổ tửực thụứi ủeồ taỷi dửừ lieọu 55H vaứo thanh ghi tớch
luừy, leọnh thửự hai cuừng duứng ủũa chổ tửực thụứi, laàn naứy ủeồ taỷi dửừ lieọu 16 bit 1000H
vaứo con troỷ dửừ lieọu Leọnh thửự ba duứng ủũa chổ giaựn tieỏp ủeồ di chuyeồn dửừ lieọu
trong A (55H) ủeỏn RAM ngoaứi ụỷ ủũa chổ ủửụùc chửựa trong DPTR (1000H)
e Các thanh ghi port xuất nhập:
Caực port cuỷa 8051/8031 bao goàm Port 0 ụỷ ủũa chổ 80H, Port 1 ụỷ ủũa chổ 90
H, Port 2 ụỷ ủũa chổ A0H vaứ Port 3 ụỷ ủũa chổ B0H Taỏt caỷ caực Port ủeàu ủửụùc ủũa
chổ hoựa tửứng bit ẹieàu ủoự cung caỏp moọt khaỷ naờng giao tieỏp thuaọn lụùi
f Các thanh ghi định thời(timer):
8051/8031 chửựa 2 boọ ủũnh thụứi/ủeỏm 16 bit ủửụùc duứng trong vieọc ủũnh thụứi
hoaởc ủeỏm sửù kieọn Timer 0 ụỷ ủũa chổ 8AH (TL0:byte thaỏp) vaứ 8CH (TH0:byte
cao).Timer 1 ụỷ ủũa chổ 8BH (TL1:byte thaỏp) vaứ 8DH (TH1: byte cao) Vieọc vaọn
haứnh timer ủửụùc set bụỷi thanh ghi Timer Mode (TMOD) ụỷ ủũa chổ 89H vaứ thanh
ghi ủieàu khieồn timer (TCON) ụỷ ủũa chổ 88H Chổ coự TCON ủửụùc ủũa chổ hoựa tửứng
bit
g Các thanh ghi port nối tiếp:
8051/8031 chửực moọt port noỏi tieỏp treõn chip daứnh cho vieọc trao ủoồi thoõng tin
vụựi caực thieỏt bũ noỏi tieỏp nhử maựy tớnh, modem hoaởc cho vieọc giao tieỏp vụựi caực IC
khaực coự giao tieỏp noỏi tieỏp (coự boọ chuyeồn ủoồi A/D, caực thanh ghi dũch ) Moọt
thanh ghi goùi laứ boọ ủeọm dửừ lieọu noỏi tieỏp (SBUF) ụỷ ủũa chổ 99H seừ giửừ caỷ hai giửừ
lieọu truyeàn vaứ nhaọn Khi truyeàn dửừ lieọu thỡ ghi leõn SBUf, khi nhaọn dửừ lieọu thỡ
Trang 20ủoùc SBUF Caực mode vaọn haứnh khaực nhau ủửụùc laọp trỡnh qua thanh ghi ủieàu
khieồn port noỏi tieỏp (SCON) (ủửụùc ủũa chổ hoựa tửứng bit) ụỷ ủũa chổ 98H
h Các thanh ghi ngắt:
8051/8031 coự caỏu truực 5 nguoàn ngaột, 2 mửực ửu tieõn Caực ngaột bũ caỏm sau
khi reset heọ thoỏng vaứ seừ ủửụùc cho pheựp baống vieọc ghi thanh ghi cho pheựp ngaộ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 có
địa chỉ B8H.Cả hai thanh ghi ủửụùc ủũa chổ hoựa tửứng bit
i Các thanh ghi điều khiển nguồn:
Thanh ghi ủieàu khieồn nguồn (PCON) ụỷ ủũa chổ 87H chửựa nhieàu bit ủieàu
khieồn Chuựng ủửụùc toựm taột trong baỷng sau:
PD IDL
Bit gaỏp ủoõi toỏc ủoọ baud, neỏu ủửụùc set thỡ toỏc ủoọ baud seừ taờng gaỏp ủoõi trong caực mode 1,2 vaứ 3 cuỷa port noỏi tieỏp
Khoõng ủũnh nghúa Khoõng ủũnh nghúa Khoõng ủũnh nghúa Bit cụứ ủa mục đích 1 Bit cụứ ủa mục đích 2 Nguồn giảm, được set để tích cực chế độ nguồn giảm,chỉ thoát khi reset hệ thống Mode nghĩ set ủeồ kớch hoaùt mode nghĩ chổ thoaựt khi coự ngaột hoaởc reset heọ thoỏng
Baỷng 2.3 :Thanh ghi ủieàu khieồn nguồn (PCON)
5/ Bộ nhớ ngoài:
8051/8031 coự khaỷ naờng mụỷ roọng boọ nhụự ủeỏn 64K boọ nhụự chửụng trỡnh vaứ
64K boọ nhụự dửừ lieọu beõn ngoaứi Do ủoự coự theồ duứng theõm ROM vaứ RAM neỏu caàn
Khi duứng boọ nhụự ngoaứi, port 0 khoõng coứn laứ moọt port I/O thuaàn tuựy nửừa
Noự ủửụùc hụùp keõnh giửừa bus ủũa chổ (A0-A7) vaứ bus dửừ lieọu (D0-D7) vụựi tớn hieọu
ALE ủeồ choỏt byte thaỏp cuỷa ủũa chổ khi baột ủaàu moói chu kyứ boọ nhụự Port 2 thoõng
thửụứng ủửụùc duứng cho byte cao cuỷa bus ủũa chổ
Trong nửỷa ủaàu cuỷa moói chu kyứ boọ nhụự, byte thaỏp cuỷa ủũa chổ ủửụùc caỏp
trong port 0 vaứ ủửụùc choỏt baống xung ALE Moọt IC choỏt 74HC373 (hoaởc tửụng
ủửụng) seừ giửừ byte ủũa chổ thaỏp trong phaàn coứn laùi cuỷa chu kyứ boọ nhụự Trong nửỷa
sau cuỷa chu kyứ boọ nhụự port 0 ủửụùc duứng nhử bus dửừ lieọu vaứ ủửụùc ủoùc hoaởc ghi
tuứy theo leọnh
Trang 21a/ Truy xuất bộ nhớ chương trình ngoài :
Boọ nhụự chửụng trỡnh ngoaứi laứ một IC ROM ủửụùc pheựp bụỷi tớn hieọu PSEN
Moọt chu kyứ maựy cuỷa 8051/8031 coự 12 chu kyứ xung nhũp Neỏu boọ dao ủoọng
treõn chip ủửụùc laựi bụỷi moọt thaùch anh 12MHz thỡ chu kyứ maựy keựo daứi 1s Trong
moọt chu kyứ maựy seừ coự 2 xung ALE vaứ 2 byte ủửụùc ủoùc tửứ boọ nhụự chửụng trỡnh
(neỏu leọnh chỉ có 1 byte thỡ byte thửự 2ừ ủửụùc loaùi boỷ) Giaỷn ủoà thụứi gian cuỷa moọt
laàn laỏy leọnh ủửụùc veừ ụỷ hỡnh 2.5:
Hình 2.4:Giao tiếp giữa 8051 và EPROM
Port 2 PSEN
D0-D7 A0-A7 EPROM
A8-A15
OE
D Q 74HC373
Trang 22b/ Truy xuất bộ nhớ dữ liệu ngoài :
Boọ nhụự dửừ lieọu ngoaứi laứ moọt boọ nhụự RAM ủửụùc cho pheựp ghi/ủoùc baống
caực tớn heọu WR vaứ RD (caực chaõn P3.6 vaứ P3.7).Chổ coự moọt caựch truy xuaỏt boọ
nhụự dửừ lieọu ngoaứi laứ vụựi leọnh MOVX duứng con troỷ dửừ lieọu (DPTR) 16 bit hoaởc
R0 vaứ R1 xem nhử thanh ghi ủũa chổ
Keỏt noỏi bus ủũa chổ vaứ bus dửừ lieọu giửừa RAM vaứ 8051/8031 cuừng gioỏng
EPROM vaứ do ủoự cuừng coự theồ leõn ủeỏn 64 byte boọ nhụự RAM Ngoaứi ra, chaõn RD
cuỷa 8051/8031 ủửụùc noỏi tụựi chaõn cho pheựp xuaỏt (OE) cuỷa RAM vaứ chaõn WR
ủửụùc noỏi tụựi chaõn ghi (WR) cuỷa RAM
Hình2.6: Giao tiếp giữa 8051/8031 và RAM
Gian đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngoài được vẽ trên hình sau
đối với lệnh MOVX A,@DPTR:
74HC373
O D
G
Trang 23Hình 2.7:Giản đồ thời gian của lệnh MOVX
Giaỷn ủoà thụứi gian cho leọnh ghi (MOVX @DPTR, A) cuừng tửụng tửù chổ
khaực ủửụứng WR seừ thay vaứo ủửụứng RD vaứ dửừ lieọu ủửụùc xuaỏt ra treõn port 0 (RD
vaón giửừ mửực cao)
c/ Giải mã địa chỉ:
Nếu có nhiều EPROM hoặc có nhiều RAM hoặc cả hai giao tiếp với 8051 ta
cần giãi mã địa chỉ Thí dụ, nếu các RAM và ROM 8 bit được sử dụng, địa chỉ phải
được giãi mã để chọn IC nhớ này trên các giới hạn 8K: 0000H-1FFFH, 2000H –
3FFFH,…Một IC giải mã điển hình là 74HC138 với các ngõ ra được nối với ngõ
vào chọn chip CS của IC nhớ (như hình) cho bộ nhớ có nhiều EPROM 2764(8K) và
RAM 6264 (8K) Do đường cho phép riêng rẽ (PSEN cho bộ nhớ chương trình, RD
và WR cho bộ nhớ dữ liệu), 8051 có thể quản lý bộ nhớ đến 64K với EPROM và 64
CS CS CS
CS CS CS
D0-D7 D0-D7
EPROM 8KBytes
Select another EPROM/RAM
Trang 246/ Lệnh reset:
8051/8031 ủửụùc reset baống caựch giửừ chaõn RST ụỷ mửực cao tối thiểu 2 chu
kyứ maựy vaứ traỷ noự veà mức thaỏp RST coự theồ ủửụùc kớch khi caỏp ủieọn duứng moọt
PSW
SP DPTR Port 0-3
IP
IE Các thanh ghi định thời
SCON SBUF PCON(HMOS) PCON(CMOS)
0000H 00H 00H 00H 07H 0000H FFH xxx00000B 0xx00000B 00H 00H 00H 0xxxxxxB 0xxx0000B
Bảng 2.3 trạng thái các thanh ghi sau khi reset
Quan troùng nhaỏt trong caực thanh ghi treõn laứ thanh ghi ủeỏm chửụng trỡnh,
noự ủửụùc ủaởt laùi 0000H Khi RST trụỷ laùi mửực thaỏp, vieọc thi haứnh chửụng trỡnh
luoõn baột ủaàu ụỷ ủũa chổ ủaàu tieõn trong boọ nhụự trong chửụng trỡnh: ủũa chổ 0000H
Noọi dung cuỷa RAM treõn chip khoõng bũ thay ủoồi bụỷi leọnh reset
7 Hoạt động của bộ định thời (timer)
Trang 25Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đôi tần
số nối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp Ngõ ra của
tần số cuối làm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ)
Giá trị nhị phân trong các flip-flop của timer có thể xem như số đếm số xung
nhịp (hoặc các sự kiện) từ khi khởi động timer Ví dụ timer 16 bit sẽ đếm lên từ
0000H đến FFFFH Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H
8051/8031 cĩ 2 timer 16 bit, mỗi timer cĩ bốn cách làm việc Người ta sử dụng các
timer để : a) định khoảng thời gian, b) đếm sự kiện c) tạo tốc độ baund cho port
nối tiếp trong 8051/8031
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở một
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 cửa ngõ vào
hoặc gửi các sự kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo
xung nhịp đều đặn của timer để đo thời gian trôi qua giữa hai sự kiện (ví dụ : đo
độ rộng xung)
Đếm sự kiện dùng để xác định số lần xẩy ra của một sự kiện Một “sự
kiện” là bất cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên
một chân của 8051/8031 Các timer cũng có thể cung cấp xung nhịp tốc độ baud
cho port nối tiếp trong 8051/8031
Truy xuất timer của 8051/8031 dùng 6 thanh ghi chức năng đặc biệt cho
trong bảng sau:
SFR MỤC ĐÍCH ĐỊA CHỈ Địa chỉ hóa từng bit
88H 89H 8AH 8BH 8CH 8DH
Có Không Không Không Không Không
Bảng 2.4: Thanh ghi chức năng đặc biệt dùng timer
7.2 Thanh ghi chế độ timer (TMOD)
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho timer 0
và timer 1
Bit Tên Timer Mô tả
7 GATE 1 Bit (Mở) cổng, khi lên 1 timer chỉ chạy khi INT1
ở mức cao.Bit
Trang 2600:chế độ 0 : timer 13 bit 01: chế độ 1 :timer 16 bit 10: chế độ 2 :tự động nạp lại 8255A bit 11: chế độ 3 :tách timer
Bit mở cổng Bit chọn counter/timer Bit 1 của chế độ Bit 0 của chế độ
Bảng 2.5: Tĩm tắt thanh ghi TMOD
7.3 Thanh ghi điều khiển timer (TCON)
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho timer 0 và
89H 88H
Cờ báo tràn timer 1 Đặt bởi phần cứng khi tràn, được xóa bởi phần mềm hoặc phần cứng khi bộ xử lý chỉ đến chương trình phục vụ ngắt
Bit điều khiển timer 1 chạy Đặt/xóa bằng phần mềm cho timer chạy/ngưng
Cờ báo tràn timer 0 Bit điều khiển timer 0 chạy Cờ cạnh ngắt 1 bên ngoài Cờ cạnh ngắt 1 bên ngoài, phần cứng khi phát hiện một cạnh xuống ở INT1, xóa bằng phần mềm hoặc phần cứng khi CPU chỉ đến chương trình phục vụ ngắt Đặt/xóa bằng phần mềm đề ngắt ngoài tích cực cạnh xuống/mức thấp
Cờ cạnh ngắt 0 bên ngoài
Cờ kiểu ngắt 0 bên ngoài
Bảng 2.6: Tóm tắt thanh ghi TCON
Trang 277 4 Các chế độ timer
a/ Chế độ 0, chế độ timer 13 bit
Để tương thích với 8048 (có trứớc 8051)
Ba bit cao của TLX (TL0 / TL1) không dùng
Xung nhịp
Timer Cờ báo tràn
b/ Chế độ 1- chế độ timer 16 bit :
Hoạt động như timer 16 bit đầy đủ
Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phầm mềm
MSB của giá trị trong các thanh ghi timer là bit 7 của THx và LBS là bit 0
của TLx Các thanh ghi timer (TLx/THx) có thể được đọc hoặc ghi bất cứ lúc
nào bằng phầm mềm
Xung nhịp
Timer Cờ báo tràn
c/ Chế độ 0- chế độ tự động nạp lại 8 bit
TLx hoạt động như một timer 8 bit, trong khi đó THx vẫn giữ nguyên giá
trị được nạp Khi số đếm tràn tứ FFH đến 00H, không những cờ timer được set
mà giá trị trong THx đồng thời được nạp vào TLx Việc đếm tiếp tục từ giá trị
này lên đến FFH xuống 00H và nạp lại chế độ này rất thông dụng vì sự tràn
timer xảy ra trong những khoảng thời gian nhất định và tuần hoàn một khi đã
khởi động TMOD và THx
TFx
THx (8 bit)
Trang 28Timer 0 tách thành hai timer 8 bit (TL0 và TH0), TL0 có cờ báo tràn là
TF0 và TH0 có cờ báo tràn là TF1
Timer 1 ngưng ở chế độ3, nhưng có thể được khởi động bằng cách chuyển
sang chế độ khác Giới hạn duy nhất là cờ báo tràn TF1 không còn bị tác động
khi timer 1 bị tràn vì nó đã được nối tới TH0
Khi timer 0 ở chế độ 3, có thể cho timer 1 chạy và ngưng bằng cách chuyển nó
ra ngoài và vào chế độ 3 Nó vẫn có thể được sử dụng bởi port nối tiếp như bộ
tạo tốc độ baund hoặc nó có thể được sử dụng bằng bất cứ cách nào không cần
ngắt (vì nó không còn được nối với TF1)
Cờ báo tràn
7.5 Nguồn tạo xung nhịp
Có hai nguồn tạo xung nhịp có thể có,đượcï chọn bằng cách ghi vào bit
C/T (counter/timer) trong TMOD khi khởi động timer Một nguồn tạo xung nhịp
dùng cho định khoảng thời gian, cái khác cho đếm sự kiện
Crytal
Timer Clock
12
T
C /
Trang 29- Định khoảng thời gian (interval timing)
Nếu C/T =0 hoạt động timer liên tục được chọn và timer được dùng cho việc
định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip Bộ
chia 12 được thêm vào để giảm tần số xung nhịp đến giá trị thích hợp cho phần
lớn các ứng dụng Như vậy thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1
MHz.Bao tràn timer xảy ra sau một số (cố định) xung nhịp, phụ thuộc vào giá trị
ban đầu được nạp vào các thanh ghi timer TLx/THx
- Đếm sự kiện (Event counting)
- Nếu C/T=1, timer lấy xung nhịp từ nguồn bên ngoài Trong hầu hết các
ứng dụng nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra một
“sự kiện “, timer dùng đếm sự kiện được xác định bằng phần mềm bằng cách
đọc các thanh ghi TLx/THx vì giá trị 16 bit trong các thanh ghi này tăng thêm
1 cho mỗi sự kiện
Nguồn xung nhịp ngoài có từ thay đổi chức năng của các chân port 3 Bit 4
của port 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên trong timer 0 và được gọi
là “T0” Và P3.5 hay “T1” là ngõ vào tạo xung nhịp cho timer 1
7.6 Bắt đầu dừng và điều khiển các timer
Phương pháp mới đơn giản nhất để bắt đầu (cho chạy) và dừng các timer là
dùng các bit điều khiển chạy :TRx trong TCON, TRx bị xóa sau khi reset hệ
thống Như vậy, các timer theo mặc nhiên là bị cấm (bị dừng) TRx được đặt lên
1 bằng phần mềm để cho các timer chạy
Xung nhịp
0=lên : timer dừng 1=xuống : timer chạy
Cho chạy và dừng timer
Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điều khiển
các timer trong chương trình.Ví dụ: cho timer 0 chạy bằng lệnh : SETB TR0 và
dừng bằng lệnh SETB TR0
Trình biên dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “TR0” sang
địa chỉ bit đúng SETB TR0 chính xác giống như SETB 8CH
7.7 Khởi động và truy xuất các thanh ghi timer
TRx
Trang 30Thông thường các thanh ghi được khởi động một lần ở đầu chương trình
để đặt chế độ làm việc cho đúng Sau đó trong thân chương trình các timer được
cho chạy, dừng, các bit cờ được kiểm tra và xóa, các thanh ghi timer được đọc
và cập nhật theo đòi hỏi của các ứng dụng
TMOD là thanh ghi thứ nhất được khởi động vì nó đặt chế độ hoạt động
Ví dụ các lệnh sau khi khởi động timer 1 như timer 16 bit (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,#00010000B
Lệnh này sẽ đặt M1=0 và M0=1 cho chế độ 1, C/T=0 và GATE=0 cho
xung nhịp nội và xóa các bit chế độ timer 0 Dĩ nhiên timer thật sự không bắt
đầu định thời cho đến khi bit điều khiển chạy TR1 được đặt lên 1
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi
động Nhớ lại là các timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếp
FFFFH sang 0000H
- Đọc timer đang chạy
Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đang
chạy Vì phải đọc 2 thanh ghi timer “sai pha” có thể xẩy ra nếu byte thấp tràn
vào byte cao giữa hai lần đọc Giá trị có thể đọc được không đúng Giải pháp là
đọc byte cao trước, kế đó đọc byte thấp rồi đọc byte cao lại một lần nữa Nếu
byte cao đã thay đổi thì lập lại các hoạt động đọc
7.8 Các khoảng ngắn và các khoảng dài
Dãy các khoảng thời gian có thể định thời là bao nhiêu ? vấn đề này được
khảo sát với 8051/8031 hoạt động với tần số 12MHz.Như vậy xung nhịp của
các timer có tần số lá 1 MHz
Khoảng thời gian ngắn nhất có thể có bị giới hạn không chỉ bởi tần số xung nhịp
của timer mà còn bởi phần mềm Do ảnh hưởng của thời khoảng thực hiện một
lệnh Lệng ngắn nhất 8051/8031 là một chu kỳ máy hay 1s Sau đây là bảng
tóm tắt các kỹ thuật để tạo những khoảng thời gian có chiều dài khác nhau (với
giả sử xung nhịp cho 8051/8031 có tần số 12 MHz)
Khoảng thời gian tối đa Kỹ thuật
10
256
65535
Không giới hạn
- Bằng phần mềm
- Timer 8 bit với tự động nạp lại
- Timer 16 bit
- Timer 16 bit cộng với các vòng lập phần mềm
Trang 31Các kỹ thuật để lập trình các khoảng thời gian (FOSC=12 MHz)
8 Hoạt động port nối tiếp
8.1 Giới thiệu
8051/8031 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế
độ khác trên một dãy tần số rộng Chức năng chủ yếu của một port nối tiếp là
thực hiện chuyển đổi song song sang nối tiếp với dữ liệu xuất và chuyển đồi nối
tiếp sang song song với dữ liệu nhập
Truy xuất phần cứng đến port nối tiếp qua các chân TxD và RxD Các
chân này có các chức năng khác với hai bit của port 3 P3 ở chân 11 (TxD) và
P3.0 ở chân 10 (RxD)
Port nối tiếp cho hoạt động song công (full duplex : thu và phát đồng thời)
và đệm lúc thu (receiver buffering) cho phép một ký tự sẽ được thu và được giữ
trong khi ký tự thứ hai được nhận Nếu CPU đọc ký tự thứ nhất trước khi ký tự
thứ hai được thu đầy đủ thì dữ liệu sẽ không bị mất
Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port
nối tiếp là : SBUF và SCON Bộ đếm port nối tiếp (SBUF) ở địa chỉ 99H thật sự
là hai bộ đếm.Viết vào SBUF để truy xuất dữ liệu thu được Đây là hai thanh
ghi riêng biệt thanh ghi chỉ ghi để phát và thanh ghi để thu
TxD (P3.1) RxD (P3.0)
CLK
Q D
CLK Xung nhịp tốc Độ baud (thu) Xung nhịp tốc
Độ baud (thu)
Hình 2.10: Sơ đồ port nối tiếp
Thanh ghi điều khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi có
địa chỉ bit chứa các bit trạng thái và các bit điều khiển Các bit điều khiển đặt
chế độ hoạt động cho port nối tiếp, và các bit trạng thái báo cáo kết thúc việc
phát hoặc thu ký tự Các bit trạng thái có thể được kiểm tra bằng phần mềm
hoặc có thể được lập trình để tạo ngắt
SUBF
SBUF (chỉ đọc)
BUS nội 8051/8031
SBUF (chỉ đọc)
Trang 32Tần số làm việc của port nối tiếp còn gọi là tốc độ baund có thể cố định
(lấy từ bộ giao động của chip) Nếu sử dụng tốc độ baund thay đổi, timer 1 sẽ
cung cấp xung nhịp tốc độ baund và phải được lập trình
8.2 Thanh ghi điều khiển port nối tiếp
Chế độ hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi
chế độ port nối tiếp (SCON) ở địa chỉ 98H Sau đây các bảng tóm tắt thanh ghi
SCON và các chế độ của port nối tiếp :
Bit Ký hiệu Địa chỉ Mô tả
SCON.7 SM0 9FH Bit 0 của chế độ port nối tiếp
SCON.6 SM1 9EH Bit 1 của chế độ port nối tiếp
SCON.5 SM2 9DH Bit 2 của chế độ 2 nối tiếp
cho phép truền thông đã xử lý
trong các chế độ 2 và 3 ;RI sẽ
SCON.4 REN 9CH Cho phép bộ thu phải đặt lên
SCON.3 TB8 9BH Bit 8 phát, bit thứ 9 được phát
SCON.2 RB8 9AH Bit 8 thu, bit thứ 9 thu được
SCON.1 TI 99H Cờ ngắt phát Đặt lên 1 khi
SCON.0 RI 98H Cờ ngắt thu Đặt lên 1 khi
Bảng 2.7:Tóm tắt thanh ghi chế độ port nối tiếp SCON
SM0 SM1 Chế độ Mô tả Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (Fosc/12)
0 1 1 UART 8 bit Thay đổi (đặt bằng timer)
1 0 2 UART 9 bit Cố định (Fosc/12 hoặc Fosc/64)
1 1 3 UART 9 bit Thay đổi (đặt bằng timer)
Bảng 2.8: Các chế độ port nối tiếp
Trang 33Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ
Ví dụ, lệnh sau:
MOV SCON,#01010010B
Khởi động port nối tiếp cho chế độ 1 (SM0/SM1=0/1), cho phép bộ thu
(REN=1) và đặt cờ ngắt phát (TP=1) để chỉ bộ phát sẵn sàng hoạt động
8.3 Khởi động và truy xuất các thanh ghi cổng nối tiếp
a Cho phép thu:
Bit cho phép bộ thu (REN = Receiver Enable) trong SCON phải được đặt
lên 1 bằng phần mềm để cho phép thu các ký tự Thông thường thực hiện việc
này ở đầu chương trình khi khởi động cổng nối tiếp, timer Có thể thực hiện
việc này theo hai cách Lệnh :
SETB REN
Sẽ đặt REN lên 1, hoặc lệnh :
MOV SCON,#xxx1xxxxB
Sẽ đặt REN 1 và đặt hoặc xóa đi các bit khác trên SCON khi cần (các x
phải là 0 hoặc 1 để đặc chế độ làm việc)
b Bit dữ liệu thứ 9:
Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3, phải được nạp vào
trong TB8 bằng phần mềm Bit dữ liệu thứ 9 thu được đặt ở RBS Phần mềm có
thể cần hoặc không cần bit dữ liệu thứ 9, phụ thuộc vào các đặc tính kỹ thuật
của thiết bị nối tiếp sử dụng (bit dữ liệu thứ 9 cũng đóng vai một trò quan trọng
trong truyền thông đa xử lý)
c Thêm 1 bit parity:
Thường sử dụng bit dữ liệu thứ 9 để thêm parity vào ký tự Như đã xét ở
các chương trước, bit P trong từ trạng thái chương trình (PSW) được đặt lên 1
hoặc bị xóa bởi chu kỳ máy để thiết lập kiểm tra chẵn với 8 bit trong thanh tích
lũy
d Các cờ ngắt:
Hai cờ ngắt thu và phát (RI và TI) trong SCON đóng một vai trò quan
trọng truyền thông nối tiếp dùng 8051/8031 Cả hai bit được đặt lên 1 bằng phần
cứng, nhưng phải được xóa bằng phần mềm
8.4 Tốc độ baud port nối tiếp
Như đã nói, tốc độ baund cố định ở các chế độ 0 và 2 Trong chế độ 0 nó
luôn luôn là tần số dao động trên chip được chia cho 12 Thông thường thạch
anh ấn định tần số dao động trên chip của 8051/8031 nhưng cũng có thể sử dụng
Trang 34nguồn xung nhịp khác Giả sử với tần số dao động danh định là 12 MHz, tìm tốc
độ baud chế độ 0 là 1 MHz
Mặc nhiên, sau khi reset hệ thống, tốc độ baud chế độ là 2 tần số bộ dao động
chia cho 64 Tốc độ baud cũng ảnh hưởng bởi 1 bit trong thanh ghi điều khiển nguồn
cung cấp (PCON) Bit 7 của PCON là bit SMOD Đặt bit SMOD lên một làm gấp đôi
tốc độ baud trong chế độ 1,2 và 3 Trong chế độ 2, tốc độ baud có thể bị gấp đôi từ giá
trị mặc nhiên của 1/64 tần số dao động (SMOD=0) đến 1/32 tần số dao động
(SMOD=1).
a Chế độ 0
SMOD=0
SMOD=1
b Chế độ 2
SMOD=0
SMOD=1
c Chế độ 1 và 3
Hình 2.12 Các nguồn tạo xung nhịp cho port nối tiếp
Vì PCON không được định địa chỉ theo bit, nên để đặt bit SMOD lên 1
cần phải theo các lệnh sau:
MOV A,PCON lấy giá trị hiện thời của PCON
SETB ACC.7 đặt bit 7 (SMOD) lên 1
MOV PCON,A ghi giá trị ngược về PCON
Các tốc độ baud trong các chế độ 1 và 3 được xác định bằng tốc độ tràn
của timer 1 Vì timer hoạt động ở tần số tương đối cao, tràn timer được chia
thêm cho 32 (hay 16 nếu SMOD=1) trước khi cung cấp xung nhịp tốc độ baud
cho port nối tiếp
9 Hoạt động ngắt:
Trang 35Ngắt là hoạt động ngừng tạm thời một chương trình này để thi hành một
chương trình khác Các ngắt có một vai trò quan trọng trong thiết kế và khả
năng thực thi của vi điều khiển Chúng cho phép hệ thống đáp ứng không cùng
lúc tới một công việc và giải quyết một công việc đó trong khi một chương trình
khác đang thực thi
Một hệ thống được điều khiển bằng ngắt cho ảo giác là làm nhiều việc
đồng thời Dĩ nhiên CPU mỗi lần không thể thực thi một chương trình để thực thi
một chương trình khác, rồi quay về chương trình đầu khi có yêu cầu ngắt
Chương trình giải quyết ngắt được gọi là chương trình phục vụ ngắt (ISR :
Interrupt Sevice Reutine)
9.1 Tổ chức ngắt
Ơû 8051 có 5 nguồn ngắt:
- 2 ngắt ngoài
- 2 ngắt từ timer
- 1 ngắt port nối tiếp
Tất cả các ngắt sẽ không được đặt sau khi reset hệ thống và cho phép
ngắt riêng rẽ bởi phần mềm
a Cho phép và không cho phép ngắt
Mỗi nguồn ngắt được cho phép hoặc không cho phép từng ngắt một qua
thanh ghi chức năng đặc biệt cố định địa chỉ bit IE (Interrupt Enable : cho phép
ngắt) ở địa chỉ A8H Cũng như các bit cho phép mỗi nguồn ngắt, có một bit cho
phép hoặc cấm toàn bộ được xóa để cấm tất cả các ngắt hoặc được đặt lên 1 để
cho phép tất cả các ngắt
Bit Ký hiệu Địa chỉ bit Mô tả (1=cho phép,0=cấm)
AFH AEH ADH ACH ABH AAH A9H
A8H
Cho phép hoặc cấm toàn bộ Không được định nghĩa Cho phép ngắt từ timer 2 (8052)
Cho phép ngắt Port nối tiếp Cho phép ngắt từ timer 1 Cho phép ngắt ngoài 1 Cho phép ngắt từ timer 0 Cho phép ngắt ngoài 0
Tóm tắt thanh ghi IE
Trang 36b Ưu tiên ngắt:
Mỗi nguồn ngắt đuợc lập trình riêng vào một trong hai mức ưu tiên qua
thanh ghi chức năng đặc biệt được địa chỉ bit Ip (Interrupt priority : ưu tiên ngắt)
ở địa chỉ B8H
Bit Ký hiệu Địa chỉ bit Mô tả (1=mức cao hơn,0=mức
thấp) IP.7
BDH BCH BBH BAH B9H B8H
Không được định nghĩa Không được định nghĩa
Ưu tiên cho ngắt từ timer 2 (8052)
Ưu tiên cho ngắt Port nối tiếp
Ưu tiên cho ngắt từ timer 1
Ưu tiên cho ngắt ngoài
Ưu tiên cho ngắt từ timer 0
Ưu tiên cho ngắt ngoài 0 Tóm tắt thanh ghi IP
Các ngắt ưu tiên được xóa sau khi reset hệ thống để đặt tất cả các ngắt ở
mức ưu tiên thấp hơn
9.2 Xử lý ngắt
Khi có một ngắt xẩy ra và được CPU chấp nhận, chương trình chính bị
ngắt quãng Những hoạt động sau xẩy ra:
- Thi hành hoàn chỉnh lệnh đang hiện hành
- Cất DC vào ngắt xếp
- Trạng thái ngắt hiện hành được cất bên trong
- Các ngắt được chặn tại mức của ngắt
- Nap vàp DC địa chỉ Vector của ISR
- ISR thực thi
ISR thực thi và đáp ứng ngắt, ISR hoàn tất bằng lệnh RET1 Điều này làm
lấy lại giá trị cũ của PC từ ngăn xếp và lấy lại trạng thái ngắt cũ Chương trình
lại tiếp tục thi hành tại nơi mà nó dừng
Các Vector ngắt
Khi chấp nhận ngắt, giá trị được nạp vào PC được gọi là Vector ngắt Nó
là địa chỉ bắt đầu của ISR cho nguồn tạo ngắt Các Vector ngắt được cho ở bảng
sau:
Trang 37Ngắt Cờ Địa chỉ Vector Reset hệ
thống Bên ngoài 0 Timer 0 Bên ngoài 1 Timer 1 Port nối tiếp
RST IE0 TF0 IE1 TF1
TI hoặc RI
0000H 0003H 000BH 0013H 001BH
0023H
Các Vector ngắt
Vector reset hệ thống (RST ở địa chỉ 0000H) nó giống như một ngắt Nó
ngắt chương trình chính và tải vào PC một giá trị mới
Khi chỉ đến một ngắt cờ gây ngắt tự động bị xóa bởi phần cứng, trừ ra R1,
T1 cho các ngắt cổng nối tiếp Vì có hai nguồn có thể có cho ngắt này, không
thực tế để CPU xóa cờ ngắt này Các bit phải được kiểm tra trong ISR để xác
định nguồn ngắt và cờ tạo ngắt sẽ được xóa bằng phần mềm
9.3 Các ngắt của 8051:
a Các ngắt timer:
Các ngắt timer có địa chỉ Vector ngắt là 000BH (timer 0) và 001BH (timer
1) Ngắt timer xẩy ra khi các thanh ghi timer (TLx ITHx) tràn và set cờ báo tràn
(TFx) lên 1 Các cờ timer (TFx) không bị xóa bằng phần mềm Khi cho phép
các ngắt, TFx tự động bị xóa bằng phần cứng khi CPU chuyển đến ngắt
b Các ngắt cổng nối tiếp:
Ngắt cổng nối tiếp xẩy ra khi hoặc cờ phát (TI) hoặc cờ ngắt thu (KI)
được đặt lên 1 Ngắt phát xẩy ra khi một ký tự đã được nhận xong và đang đợi
trong SBUP để được đọc
Các ngắt cổng nối tiếp khác với các ngắt timer Cờ gây ra ngắt cổng nối
tiếp không bị xóa bằng phần cứng khi CPU chuyển tới ngắt Do có hai nguồn
ngắt cổng nối tiếp Ti và RI Nguồn ngắt phải được xác định trong ISR và cờ tạo
ngắt sẽ được xóa bằng phần mềm Các ngắt timer cờ ngắt được xóa bằng phần
cứng khi CPU hướng tới ISR
c Các ngắt ngoài :
- Các ngắt ngoài xẩy ra khi có một mức thấp hoặc cạnh xuống trên chân INT0
hoặc INT1 của vi điều khiển Đây là chức năng chuyển đổi của các bit Port
3.(Port 3.2 và Port 3.3)
Trang 38Caực cụứ taùo ngaột naứy laứ caực bit IE0 vaự IE1 trong TCON Khi quyeàn ủieàu khieồn ủaừ
chuyeồn ủeỏn ISR, cụứ taùo ra ngaột chổ ủửụùc xoựa neỏu ngaột ủửụùc tớch cửùc baống caùnh
xuoỏng Neỏu ngaột ủửụùc tớch cửùc theo mửực, thỡ nguoàn yeõu caàu ngaột beõn ngoaứi seừ
ủieàu khieồn mửực cuỷa cụứ thay cho phaàn cửựng
Sửù lửùa choùn ngaột tớch cửùc mửực thaỏp hay tớch cửùc caùnh xuoỏng ủửụùc laọp trỡnh
qua caực bit IT0 vaứ IT1 trong TCON Neỏu IT1 = 0, ngaột ngoaứi 1 ủửụùc taực ủoọng
baống mưực thaỏp ụỷ chaõn IT1 Neỏu IT1 = 1 ngaột ngoaứi 1 seừ ủửụùc taực ủoọng baống
caùnh xuoỏng Trong cheỏ ủoọ naứy, neỏu caực maóu lieõn tieỏp treõn chaõn INT1 chổ mửực
cao trong moọt chu kyứ vaứ chổ mửực thaỏp trong chu kyứ keỏ, cụứ yeõu caàu ngaột IE1
trong TCON ủửụùc ủaởt leõn 1, roài bit IE yeõu caàu ngaột
Neỏu ngaột ngoaứi ủửụùc taực ủoọng baống caùnh xuoỏng thỡ nguoàn beõn ngoaứi phaỷi
giửừ chaõn taực ủoọng ụỷ mửực cao toỏi thieồu moọt chu kyứ vaứ giửừ noự ụỷ mửực thaỏp theõm
moọt chu kyứ nửừa ủeồ ủaỷm baỷo phaựt hieọn ủửụùc caùnh xuoỏng Neỏu ngaột ngoaứi ủửụùc
taực ủoọng theo mửực thỡ nguoàn beõn ngoaứi phaỷi giửừ tớn hieọu yeõu caàu taực ủoọng cho
ủeỏn khi ngaột ủửụùc yeõu caàu ủửụùc thaọt sửù taùo ra vaứ khoõng taực ủoọng yeõu caàu ngaột
trửụực khi ISR ủửụùc hoaứn taỏt Neỏu khoõng moọt ngaột khaực seừ ủửụùc laởp laùi
a/ Định địa chỉ thanh ghi:
8051/8031 có 4 dãy thanh ghi mỗi dãy có 8 thanh ghi đánh số từ R0 đến R7
Tại mỗi thời đỉêm chỉ có một dãy thanh ghi được tích cực Muốn chọn dãy thanh
ghi nào ta chỉ cần gán bit nhị phân thích hợp vào RS1 (PSW.4) và RS0
(PSW.3)trong thanh ghi trạng thái chương trình (PSW)
Mã lệnh n n n
Địa thỉ thanh ghi
Ngoài ra một số thanh ghi đặc biệt như thanh ghi tích luỹ con trỏ giữ liệu…cũng
được xác định trong các lệnh nên không cần các bit địa chỉ Trong các lệnh này các
thanh ghi tích luỹ được xác định là A, con trỏ dữ liệu là DPTR, thanh ghi đếm
chương trình là PC, cờ nhớ là C , cặp thanh ghi tích luỹ B là AB
b/Địa chỉ trực tiếp:
Trong chế độ này,các thanh ghi bên trong 8051/8031 được đánh địa chỉ trực tiếp
bằng 8 bit địa chỉ nằm trong byte thứ hai của mã lệnh
Trang 39Địa chỉ trực tiếp
Dù vậy trình dịch hợp ngữ cho phép gọi tên các thanh ghi chức năng đặc
biệt(có địa chỉ trực tiếp từ 80H đến FFH) ví dụ: P0 cho Port ,TMOD cho thanh ghi
chế độ Timer…
c/ Địa chỉ gián tiếp :
R0 và R1 được dùng để chứa địa chỉ ô nhớ mà lệnh tác động đến, người ta quy ước
dùng dấu @ trước R0 hoặc R1
Địa chỉ gián tiếp
d/ Địa chỉ tức thời:
Người ta dùng # trước các toán hạng tức thời Các toán hạng đó có thể là một hằng
số, một tham số hay biểu thức toán học Trường hợp dịch sẽ tự động tính toánvà
thay thế dữ liệu trực tiếp vao mã lệnh
Địa chỉ tức thời
e/ Địa chỉ tương đối :
Địa chỉ tương đối chỉ dùng trong các lệnh nhảy 8051/8031 dùng giá trị 8 bit có
dấu để cộng thêm vào thanh ghi đếm chương trình(PC).Tầm nhảy của lệnh này
trong khoảng từ -128 đến 127 ô nhớ Trước khi cộng, thanh ghi PC sẽ tăng đến địa
chỉ theo sau lệnh nhảy rồi tính toán địa chỉ offset cần thiết để nhảy đến địa chỉ yêu
cầu.Như vậy địa chỉ mới là địa chỉ tương đối so với lệnh kế tiếp chứ không phải là
bản thân lệnh nhảy Thường lệnh này có liên quan đến nhãn được định nghĩa trước
địa chỉ tương đối
f/ Địa chỉ tuyệt đối:
Địa chỉ tuyệt đối chỉ dùng trong các lệnh ACALL và AJMP Các lệnh 2 byte này
dùng để rẽ nhánh vào một trang 2 Kbyte cuả bộ nhớ chương trình bằng cách cấp 11
bit địa chỉ thấp (A0-A10) để xác định địa chỉ bit trong mã.Còn 5 bit cao của địa chỉ
đích(A11-A15) chính là 5 bit cao hiện hành trong thanh ghi đếm chương trình Vì
vậy địa chỉ của lệnh theo sau lệnh rẽ nhánh và địa chỉ của lệnh rẽ nhánh và địa chỉ
đích của lệnh rẽ nhánh phỉa cùng trang mã 2 Kbyte (có cùng 5 bit địa chỉ cao)
Trang 40
Xác định trang mã xác định điạ chỉ trong trang mã
địa chỉ tuyệt đối
g/ Địa chỉ dài:
Chỉ dung cho lệnh LCALL và LJMP Các lệnh này chiếm 3 byte và dùng 2 byte
sau (byte 2 và byte 3) để định địa chỉ của lệnh (16 bit).Ưu điểm của lệnh này là có
sử dụng trong toàn bộ vùng nhớ 64 Kbyte Tuy nhiên, lệnh này chiếm nhiều byte và
lệ thuộc vào vị trí vùng nhớ
Địa chỉ dài
h/ Địa chỉ tham chiếu :
Đia chỉ tham chiếu dùng một thanh ghi cơ bản (hoặc thanh ghi đếm chương trình
PC hoặc thanh ghi con trỏ dữ liệu DPTR) và địa chỉ offset (trong thanh ghi A) để
tạo địa chỉ được tác động cho các lệnh JMP hoặc MOVC Các bảng nhảy và bảng
tìm kiếm dễ dàng được tạo ra để sử dụng địa chỉ tham chiếu
Địa chỉ tham chiếu
Các chi tiết thiết lập lệnh:
Rn :Thanh ghi R0 đến R7 của dãy 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ức trong câu lệnh
Addr16 : 16 bit địa chỉ được dùng trong LCALL và LJMP
Addr11 : 11 bit địa chỉ được dùng trong lệnh ACALL và AJMP